我一直在对这两个套餐做一点比较,我不确定要进入哪个方向。我正在寻找的是:
据我所知,OpenNLP和Stanford CoreNLP提供了非常相似的功能。但是,Stanford CoreNLP似乎有更多活动,而OpenNLP在过去六个月中只有一些提交。
根据我所看到的,OpenNLP似乎更容易培训新模型,仅凭这个原因可能更具吸引力。但是,我的问题是其他人会将其作为添加NLP功能到Java应用程序的基础?我最担心的是OpenNLP是否已经成熟了#34;与半被遗弃。
答案 0 :(得分:12)
在完全披露中,我是CoreNLP的撰稿人,所以这是一个有偏见的答案。但是,在我看来你的三个标准:
命名实体识别:我认为CoreNLP在准确性和易用性方面都明显胜出。例如,OpenNLP每个NER标签都有一个模型,而CoreNLP使用一个Annotator检测所有标签。此外,使用SUTime的时间分辨率是CoreNLP中的一个很好的特权。准确性方面,我的轶事经验是CoreNLP在通用文本方面做得更好。
性别认同。我认为这两种工具在这方面都很难记录。 OpenNLP似乎有一个GenderModel类; CoreNLP有性别注释器。
培训API。我怀疑OpenNLP培训API更易于使用而不是现成的培训。但是,如果你想做的只是,例如,从CoNLL文件训练模型,两者都应该是直截了当的。 CoreNLP的培训速度往往比我尝试过的其他工具更快,但我还没有正式对其进行基准测试,所以请稍等一些。
答案 1 :(得分:8)
这里有点晚了,但我最近根据斯坦福获得GPL许可这一事实来看待OpenNLP - 如果这对您的项目来说可行,那么斯坦福通常被称为NLP的基准/最先进技术
也就是说,预训练模型的性能将取决于您的目标文本,因为它是特定于域的。如果您的目标文本与模型所训练的数据类似,那么您应该获得不错的结果,但如果没有,那么您将不得不自己训练模型,这将取决于训练数据。
OpenNlp的优势在于它非常易于扩展,并且易于与其他库一起使用而编写,并且具有良好的集成API - 使用OpenNLP进行培训非常简单(一旦获得培训数据)({{3} },它是非常可配置的 - 您可以非常容易地配置训练周围的所有参数,并且您可以使用一系列算法(感知器,最大熵,I wrote about it here - with a pretty lousy generated data set I was able to get ok results identifying foods)
如果您发现自己需要自己训练模型,我会考虑尝试使用OpenNlp,看看它是如何进行比较的,因为微调可以获得相当不错的结果。
答案 2 :(得分:-5)
这取决于您的目的和需求,我对这两者的了解是OpenNLP
是开源的,CoreNLP
当然不是。
但是,如果您要查看准确度级别Stanford CoreNLP
,则检测的准确度高于OpenNLP
。最近我对两者的Part Of Speech (POS)
标记进行了比较,而且这是任何NLP任务中最重要的部分,所以在我的分析中,获胜者是CoreNLP
。
与NER
相比,CoreNLP
与OpenNLP
相比,OpenNLP
的结果更准确。
因此,如果您刚刚开始,可以在以后需要Stanford CoreNLP
,如果需要,您可以迁移到select * from Table where field_name ~ '^[0-9]*$'
。