我已经尝试过许多 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 吗?