如何在实体识别后提取句子的意义?

0 投票
3 回答
1900 浏览
提问于 2025-04-18 07:14

首先:有没有推荐的方法来修改标题?

我正在使用自己开发的命名实体识别算法,从普通文本中提取数据。具体来说,我想提取律师的执业领域。我看到的一个常见句子结构是:

1) 尼尔专注于就业、税务和版权诉讼。

或者

2) 尼尔专注于一般公司事务,包括证券、商业组织、合同准备和知识产权保护。

我的实体提取做得不错,可以找到关键词,比如,从第一个句子得到的输出可能是:

尼尔专注于(就业)、(税务)和(版权诉讼)。

但是,这样的结果对我帮助不大。更有帮助的是,如果我的输出看起来像这样:

尼尔专注于(就业 - 诉讼)、(税务 - 诉讼)和(版权诉讼)。

有没有办法使用现有的Python框架,比如nltk,来实现这个目标?在我的算法提取出执业领域后,能否用nltk提取出那些“执业领域”所修饰的其他词,以便获得更完整的信息?

3 个回答

0

看看这个CogComp NER标注工具: https://github.com/CogComp/cogcomp-nlp/tree/master/ner

1

我觉得你的“算法”可能连实体识别都没做到……不过,如果稍微扩展一下你提出的问题,你想做的事情看起来像是在处理包含省略的并列结构中的指代消解。这可不是一件简单的事:可以先去网上查查相关的语言学和计算语言学的文献。我下面会用这个领域的标准术语。

从实际操作来看,你可以先从给最近的先行词(也就是最常用的做法)开始。用你的例子来说:

  • 首先提取句子中的所有“实体”。

  • 从实体列表中,找出先行词候选(比如“诉讼”等)。这是一项非常困难的任务,涉及很多不同的问题……如果你提前知道哪些“实体”对你来说是有趣的,可能可以避免这个步骤。

  • 最后,把每个指代词(包括前指和后指)分配给最近的先行词。

4

命名实体识别(NER)系统通常使用基于语法的规则或统计语言模型。不过,你这里描述的似乎只是基于关键词。

一般来说,就像大多数复杂的自然语言处理(NLP)任务一样,NER系统应该在特定领域的数据上进行训练,这样它们才能在之前没有见过的数据上表现良好。要走这条路,你需要对机器学习有一定的了解。

用“普通”的语言来说,如果你想提取一些单词或短语,并把它们分类到你定义的类别中(比如诉讼),通常使用外部本体中的类别标签是个不错的选择。举个例子:

  • 你想提取与体育相关的单词和短语。

这种分类(也就是判断一个单词是否真的与体育相关)并不是一个“通用”的问题。这意味着你不会找到现成的系统来解决这个问题(比如NLTK库中的算法)。不过,你可以利用像维基百科这样的本体,利用那里的类别标签。

  • 例如,你可以查看如果在维基百科搜索“足球”,它有一个类别标签“球类游戏”,而这个又属于“体育”。

注意,维基百科的类别标签形成了一个有向图。如果你构建一个利用这种本体的类别结构的系统,你应该能够按照自己的需要对文本中的术语进行分类。此外,你甚至可以控制分类的细致程度(比如,你想要“体育”,还是“个人体育”和“团队体育”)。

我曾经为计算机科学相关术语的分类构建过这样的系统,效果非常好。与之类似的、可以免费使用的系统是Wikifier,这是伊利诺伊大学香槟分校的认知计算小组开发的。

注意事项:你可能需要对一个简单的基于类别的代码进行调整,以满足你的需求。例如,“诉讼”在维基百科上没有独立页面,而是会重定向到一个标题为“诉讼”的页面。这种情况需要单独处理。

最后说明:这个解决方案其实并不属于NLP的范畴,但我过去的经验表明,对于某些领域,这种基于本体的方法效果很好。此外,我在回答中使用“体育”这个例子是因为我对法律术语不太了解。但我希望这个例子能帮助你理解背后的过程。

撰写回答