OpenNLP与Stanford CoreNLP比较

15

我正在比较这两个软件包,但不确定应该选择哪一个。我需要的功能如下:

  1. 命名实体识别(人物、地点、组织等)。
  2. 性别识别。
  3. 良好的训练API。

从我所看到的情况来看,OpenNLP和Stanford CoreNLP的功能相似。然而,Stanford CoreNLP似乎活跃度更高,而OpenNLP在过去六个月中只有几个提交。

根据我所看到的,OpenNLP似乎更容易训练新模型,仅出于这个原因可能更具吸引力。但是,我的问题是其他人会从哪个软件包开始添加NLP功能到Java应用程序?我主要担心OpenNLP是否"已经成熟"或者半废弃。

3个回答

15

完全透明地说,我是CoreNLP的贡献者,所以这是一个有偏见的答案。但是,在您的三个标准上,我认为:

  1. 命名实体识别:我认为CoreNLP在准确性和易用性方面都明显胜过OpenNLP。首先,OpenNLP每个NER标签都有一个模型,而CoreNLP则使用单个注释器检测所有标签。此外,CoreNLP中有一个时间分辨率工具SUTime,也是一个不错的功能。就准确性而言,我的个人经验是,CoreNLP在通用文本方面表现更好。

  2. 性别识别。我认为这两个工具在这方面都文档不够详细。OpenNLP似乎有一个GenderModel类;CoreNLP有一个性别注释器。

  3. 训练API。我认为OpenNLP的训练API对于非现成培训来说可能更易于使用。但是,如果您只想从CoNLL文件中训练模型,那么两者都应该很简单。相比我尝试过的其他工具,CoreNLP的训练速度倾向于更快,但我没有正式进行基准测试,因此请谨慎对待。


10
稍微有些晚了,但是我最近看了一下OpenNLP,主要是因为斯坦福采用了GPL许可证——如果这符合你项目的要求,那么斯坦福通常被认为是自然语言处理的基准/最先进技术。
话虽如此,预先训练模型的性能将取决于你的目标文本,因为它非常依赖于领域特定的数据。如果你的目标文本类似于模型所训练的数据,那么你应该可以得到不错的结果,但如果不是,你就需要自己训练模型,这将取决于训练数据。

OpenNlp的一个优点是它非常可扩展,而且编写得很容易与其他库一起使用,并且具有良好的API进行集成。训练非常简单(一旦您拥有训练数据),使用OpenNLP (我在这里写了一篇文章——即使使用相当差的生成数据集,我也能够获得不错的结果来识别食品)。它非常可配置——您可以非常容易地配置所有与训练相关的参数,并且可以使用一系列算法(感知器、最大熵,在快照版本中,他们添加了朴素贝叶斯)。

如果您发现需要自己训练模型,我建议尝试使用OpenNlp并查看其性能,以进行比较,因为通过微调,您可以获得相当不错的结果。


-6

这要看你的目的和需求,据我所知,OpenNLP是开源的,而CoreNLP显然不是。

但是,如果你看一下准确度水平,斯坦福核心NLP在检测方面比OpenNLP更准确。最近我对两者的词性标注(POS)进行了比较,这是任何NLP任务中最重要的部分。根据我的分析,胜利者是CoreNLP

对于NER,同样地,CoreNLP具有比OpenNLP更准确的结果。

因此,如果您刚开始,可以使用OpenNLP,如果需要,以后可以迁移到Stanford CoreNLP


7
CoreNLP是开源的,发布在GitHub上,遵循GPL v3协议。 - Mike Thomsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接