谁能指出 openNLP NameFinder 模块使用的算法?代码很复杂,而且文档很少,并且作为一个黑盒(提供默认模型)使用它给我的印象是它主要是启发式的。以下是输入和输出的一些示例:
输入:
约翰史密斯很沮丧。
约翰史密斯很沮丧。
巴拉克奥巴马很沮丧。
雨果查韦斯很沮丧。(不再)
杰夫阿特伍德很沮丧。
Bing Liu 对 openNLP NER 模块感到沮丧。
诺姆乔姆斯基对这个世界感到沮丧。
杰登史密斯很沮丧。
史密斯杰登很沮丧。
Lady Gaga 很沮丧。
Gaga 女士很沮丧。
Gaga 夫人很沮丧。
杰登很沮丧。
刘先生很沮丧。
输出(我将菱形改为方括号):
[START:person] John Smith [END] 很沮丧。
约翰史密斯很沮丧。
[START:person] Barak Obama [END] 很沮丧。
雨果查韦斯很沮丧。(不再)
[START:person] Jeff Atwood [END] 很沮丧。
Bing Liu 对 openNLP NER 模块感到沮丧。
[START:person] Noam Chomsky [END] 对这个世界感到沮丧。
Jayden [START:person] Smith [END] 很沮丧。
[START:person] Smith [END] [START:person] Jayden [END] 很沮丧。
Lady Gaga 很沮丧。
Gaga 女士很沮丧。
Gaga 夫人很沮丧。
杰登很沮丧。
刘先生很沮丧。
该模型似乎只是学习了在训练数据中注释的固定名称列表,并允许进行一些平铺和组合。两个值得注意的 (FN) 示例是:
- 忽略诸如 Mr. 和 Mrs. 之类的强姓名指示符。
- Jayden(2011 年美国最受欢迎的第 4 名)未被确定,而以下“Smith”(在“Jayden Smith...”中)被确定。我怀疑模型“认为”句子开头的大写 Jayden 是句子的开头而不是 NE。颠倒顺序,“Smith Jayden”作为提示(假设为 1),openNLP 将其识别为两个独特的 NE,与其他全名(例如“John Smith”)不同,可能暗示“Smith”在姓氏列表中。 .
-> 我感到困惑和沮丧,如果有人能指出我的算法(或验证它很糟糕),我将不胜感激。
ps 斯坦福和 UIUC NER 系统的性能要好得多,但存在一些有趣但偏离主题的细微差异(这个问题太长了)