Mik*_*sen 11 java stanford-nlp opennlp
我一直在对这两个包进行一些比较,并且不确定要进入哪个方向.我正在寻找的是:
据我所知,OpenNLP和Stanford CoreNLP提供了非常相似的功能.然而,斯坦福CoreNLP似乎有更多活动,而OpenNLP在过去六个月中只有一些提交.
根据我所看到的,OpenNLP似乎更容易训练新模型,仅凭这个原因可能更具吸引力.但是,我的问题是其他人开始将其作为将Java功能添加到Java应用程序的基础?我最担心的是OpenNLP是"刚刚成熟"还是半成熟.
Gab*_*eli 14
在完全披露中,我是CoreNLP的贡献者,所以这是一个有偏见的答案.但是,在我看来你的三个标准:
命名实体识别:我认为CoreNLP在准确性和易用性方面明显胜出.例如,OpenNLP每个NER标签都有一个模型,而CoreNLP使用一个Annotator检测所有标签.此外,使用SUTime的时间分辨率是CoreNLP中的一个很好的特权.准确性方面,我的轶事经验是CoreNLP在通用文本方面做得更好.
性别认同.我认为这两种工具在这方面都很难记录.OpenNLP似乎有一个GenderModel类; CoreNLP有一个性别注释器.
培训API.我怀疑OpenNLP培训API更易于使用而不是现成的培训.但是,如果你想做的只是,例如,从CoNLL文件中训练模型,两者都应该是直截了当的.CoreNLP的训练速度往往比我尝试过的其他工具更快,但是我还没有正式对它进行基准测试,所以请耐心等待.
这里有点晚了,但我最近看看OpenNLP仅基于斯坦福获得GPL许可的事实 - 如果这对您的项目来说可行,那么斯坦福通常被称为NLP的基准/最先进技术.
也就是说,预训练模型的性能将取决于您的目标文本,因为它是特定于域的.如果您的目标文本与模型所训练的数据类似,那么您应该获得不错的结果,但如果没有,那么您将不得不自己训练模型,这将取决于训练数据.
OpenNlp的优势在于它非常易于扩展,并且易于与其他库一起使用,并且具有良好的集成API - 使用OpenNLP进行培训非常简单(一旦获得了训练数据)(我在这里写了一篇关于它的文章)一个非常糟糕的生成数据集我能够获得确定食物的结果,并且它非常易于配置 - 您可以非常容易地配置训练周围的所有参数,并且您可以使用一系列算法(感知器,最大熵和在快照版本中他们添加了Naive Bayes)
如果你发现你确实需要自己训练模型,我会考虑尝试OpenNlp,看看它的表现仅仅是为了比较,就像微调你可以得到相当不错的结果.