我已尝试过许多NER工具(OpenNLP,Stanford NER,LingPipe,Dbpedia Spotlight等)。
但是我不断回避的是基于地名词典/词典的NER系统,我的自由文本与预定义的实体名称列表相匹配,并返回潜在的匹配。
这样我可以拥有各种列表,如PERSON,ORGANIZATION等。我可以动态更改列表并获得不同的提取。这将大大减少培训时间(因为大多数培训时间基于maximum entropy model,因此它们通常包括标记大型数据集,培训模型等)。
我使用OpenNLP POS标记器构建了一个非常粗略的基于地理信息系统的NER系统,我用它来取出所有的专有名词(NP),然后在我的列表创建的Lucene索引中查找它们。然而,这给了我很多误报。对于前者如果我的lucene指数有"三星电子"我的POS标签给了我"电子"作为一个NP,我的方法会让我回归"三星电子"因为我正在进行部分比赛。
我也读过人们谈论使用地名词典作为CRF算法的一个特征。但我永远无法理解这一点approach。
你们中的任何人都能引导我走向一个明确而坚实的方法,在地名词典和词典上建立NER吗?
答案 0 :(得分:4)
我会尝试更明确地使用地名录,因为我怀疑这是你正在寻找的。无论使用何种训练算法(CRF,maxent等),他们都会考虑大部分时间的特征:
实际上,地名索引功能为模型提供了训练步骤将考虑的中间信息,而没有明确依赖于训练语料库中存在的NE列表。假设您有一个关于运动队的地名录,一旦训练模型,您可以根据需要扩展列表,而无需再次训练模型。该模型将任何列出的运动队视为......运动队,无论其名称如何。
在实践中:
希望这有帮助!
答案 1 :(得分:1)
你可以尝试这个最小的bash Named-Entity Recognizer: https://github.com/lasigeBioTM/MER 演示:http://labs.fc.ul.pt/mer/