3

我已经尝试过许多 NER 工具(OpenNLP、Stanford NER、LingPipe、Dbpedia Spotlight 等)。

但是,我经常回避的是一个基于地名词典/字典的 NER 系统,其中我的自由文本与预定义的实体名称列表匹配,并返回潜在的匹配项。

通过这种方式,我可以拥有各种列表,例如 PERSON、ORGANIZATION 等。我可以动态更改列表并获得不同的提取。这将极大地减少训练时间(因为它们中的大多数都基于最大熵模型,因此它们通常包括标记大型数据集、训练模型等)。

我使用 OpenNLP POS 标记器构建了一个非常粗糙的基于地名词典的 NER 系统,我曾经从中取出所有专有名词 (NP),然后在从我的列表创建的 Lucene 索引中查找它们。然而,这给了我很多误报。例如。如果我的 lucene 索引有“Samsung Electronics”并且我的 POS 标记器给了我“Electronics”作为 NP,我的方法将返回“Samsung Electronics”,因为我正在进行部分匹配。

我还读到人们谈论使用地名词典作为 CRF 算法中的一个功能。但我永远无法理解这种做法

你们中的任何人都可以指导我采用一种清晰而可靠的方法,在地名词典和字典上构建 NER 吗?

4

2 回答 2

6

我会尽量让地名词典的使用更清楚,因为我怀疑这就是你要找的。无论使用什么训练算法(CRF、maxent 等),它们都会考虑特征,大多数情况下:

  • 代币
  • 词性
  • 大写
  • 地名录
  • (以及更多)

实际上,地名词典功能为模型提供了训练步骤将考虑的中间信息,而不明确依赖于训练语料库中存在的 NE 列表。假设您有一个关于运动队的地名词典,一旦模型经过训练,您就可以根据需要扩展列表,而无需再次训练模型。该模型将任何列出的运动队视为……运动队,无论其名称如何。

在实践中:

  1. 使用任何基于 NER 或 ML 的框架
  2. 确定哪些地名词典有用(这可能是最关键的部分)
  3. 影响每个地名录的相关标签(例如运动队、公司、城市、纪念碑等)
  4. 使用大量 NE 填充地名词典
  5. 使您的模型将这些地名词典作为特征考虑在内
  6. 在相关语料库上训练模型(它应该包含来自地名词典的许多 NE)
  7. 尽可能多地更新您的列表

希望这可以帮助!

于 2017-07-20T13:09:44.270 回答
1

你可以试试这个最小的 bash 命名实体识别器: https ://github.com/lasigeBioTM/MER 演示: http: //labs.fc.ul.pt/mer/

于 2017-07-21T07:57:02.097 回答