如何创建基于地名词典的命名实体识别(NER)系统?

时间:2017-07-19 17:17:50

标签: opennlp named-entity-recognition crf

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

但是我不断回避的是基于地名词典/词典的NER系统,我的自由文本与预定义的实体名称列表相匹配,并返回潜在的匹配。

这样我可以拥有各种列表,如PERSON,ORGANIZATION等。我可以动态更改列表并获得不同的提取。这将大大减少培训时间(因为大多数培训时间基于maximum entropy model,因此它们通常包括标记大型数据集,培训模型等)。

我使用OpenNLP POS标记器构建了一个非常粗略的基于地理信息系统的NER系统,我用它来取出所有的专有名词(NP),然后在我的列表创建的Lucene索引中查找它们。然而,这给了我很多误报。对于前者如果我的lucene指数有"三星电子"我的POS标签给了我"电子"作为一个NP,我的方法会让我回归"三星电子"因为我正在进行部分比赛。

我也读过人们谈论使用地名词典作为CRF算法的一个特征。但我永远无法理解这一点approach

你们中的任何人都能引导我走向一个明确而坚实的方法,在地名词典和词典上建立NER吗?

2 个答案:

答案 0 :(得分:4)

我会尝试更明确地使用地名录,因为我怀疑这是你正在寻找的。无论使用何种训练算法(CRF,maxent等),他们都会考虑大部分时间的特征:

  • 令牌
  • 演讲
  • 大写
  • 地名索引
  • (以及更多)

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

在实践中:

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

答案 1 :(得分:1)

你可以尝试这个最小的bash Named-Entity Recognizer: https://github.com/lasigeBioTM/MER 演示:http://labs.fc.ul.pt/mer/