有人能指出openNLP NameFinder模块使用的算法吗? 代码很复杂,只有很少的文档记录,并作为一个黑盒子(提供默认模型)使用它给我的印象是它主要是启发式的。 以下是输入和输出的一些示例:
输入:
约翰史密斯很沮丧。 约翰史密斯很沮丧。 巴拉克奥巴马很沮丧。 雨果查韦斯感到很沮丧。 (没有了)杰夫阿特伍德很沮丧。
刘冰对openNLP NER模块感到沮丧。 诺姆乔姆斯基对世界感到沮丧。 杰登史密斯很沮丧。 史密斯杰登很沮丧。Lady Gaga很沮丧。
女士。加加很沮丧。
MRS。加加很沮丧。
杰登很沮丧。先生。刘很沮丧。
输出(我将钻石换成方括号):
[START:person] John Smith [END]很沮丧。
约翰史密斯很沮丧。[START:person] Barak Obama [END]感到沮丧。
雨果查韦斯感到很沮丧。 (没有了)[START:person] Jeff Atwood [END]很沮丧。
刘冰对openNLP NER模块感到沮丧。[开始:人] Noam Chomsky [END]对这个世界感到沮丧。
Jayden [START:person] Smith [END]感到沮丧。
[START:person] Smith [END] [START:person] Jayden [END]感到沮丧。
Lady Gaga很沮丧。女士。加加很沮丧。
MRS。加加很沮丧。
杰登很沮丧。先生。刘很沮丧。
模型似乎只是简单地学习了在训练数据中注释的固定名称列表,并允许一些平铺和组合。 两个值得注意的(FN)示例是:
- >我很困惑和沮丧,如果有人能指出我的算法(或验证它很糟糕),我会很感激。
P.S。斯坦福大学和UIUC NER系统的表现要好得多,但有些微妙的差异很有趣,但很不合适(这个问题太长了)
答案 0 :(得分:5)
顾名思义,NameFinderME使用最大熵模型。 Here是关于我的开创性论文。
如果OpenNLP的性能不符合您的要求且您无法使用Stanford或UIUC NER,我建议您使用Mallet尝试CRF。 This sample code应该让你开始。