OpenNLP 与斯坦福 CoreNLP
OpenNLP vs Stanford CoreNLP
我一直在对这两个包进行一些比较,但我不确定该往哪个方向走。我正在寻找的简要内容是:
- 命名实体识别(人、地点、组织等)。
- 性别识别。
- 体面的训练API.
据我所知,OpenNLP 和 Stanford CoreNLP 具有非常相似的功能。然而,Stanford CoreNLP 看起来有更多 activity 而 OpenNLP 在过去六个月中只有少数提交。
根据我所见,OpenNLP 似乎更容易训练新模型,并且可能仅出于这个原因就更具吸引力。但是,我的问题是其他人会从什么开始作为将 NLP 功能添加到 Java 应用程序的基础?我最担心的是 OpenNLP 是 "just mature" 还是半废弃的。
坦白地说,我是 CoreNLP 的贡献者,所以这是一个有偏见的答案。但是,在我看来,您的三个标准是:
命名实体识别:我认为 CoreNLP 在准确性和易用性方面明显胜出。一方面,OpenNLP 每个 NER 标签都有一个模型,而 CoreNLP 使用单个注释器检测所有标签。此外,SUTime 的时间分辨率是 CoreNLP 中的一项不错的福利。在准确性方面,我的轶事经验是 CoreNLP 在通用文本上做得更好。
性别识别。我认为这两种工具在这方面的记录都很少。 OpenNLP 似乎有一个 GenderModel class; CoreNLP 有一个性别注释器。
训练API。我怀疑 OpenNLP 培训 API 对于非现成的培训更易于使用。但是,如果您只想从 CoNLL 文件训练模型,那么两者都应该很简单。与我尝试过的其他工具相比,使用 CoreNLP 的训练速度往往更快,但我还没有正式对它进行基准测试,所以对此持保留态度。
这取决于您的目的和需要,我对这两个的了解是 OpenNLP
是开源的,而 CoreNLP
当然不是。
但是,如果您查看准确度级别,Stanford CoreNLP
的检测比 OpenNLP
更准确。最近我对两者的 Part Of Speech (POS)
标记进行了比较,是的,这是任何 NLP 任务中最重要的部分,所以在我的分析中,获胜者是 CoreNLP
。
与 OpenNLP
相比,NER
也有 CoreNLP
更准确的结果。
因此,如果您刚刚起步,可以在以后使用 OpenNLP
如果需要,您可以迁移到 Stanford CoreNLP
。
这里有点晚了,但我最近看 OpenNLP 只是基于斯坦福大学获得 GPL 许可这一事实——如果这对你的项目来说没问题,那么斯坦福大学通常被称为 NLP 的 benchmark/state-of-the-art。
也就是说,预训练模型的性能将取决于您的目标文本,因为它是非常特定领域的。如果你的目标文本与训练模型的数据相似,那么你应该会得到不错的结果,但如果不是,那么你将不得不自己训练模型,这将取决于训练数据。
OpenNlp 的一个优势是它的可扩展性很强,编写起来很容易与其他库一起使用,并且具有很好的 API 集成 - 训练非常简单(一旦你有了训练数据) OpenNLP (I wrote about it here - with a pretty lousy generated data set I was able to get ok results identifying foods), and it is very configurable - you can configure all the parameters around training very easily and there are a range of algorithms you can use (perceptron, max entropy, and in the snapshot version they have added Naive Bayes)
如果您发现确实需要自己训练模型,我会考虑试用 OpenNlp,看看它的性能如何,只是为了比较,因为微调可以得到相当不错的结果。
我一直在对这两个包进行一些比较,但我不确定该往哪个方向走。我正在寻找的简要内容是:
- 命名实体识别(人、地点、组织等)。
- 性别识别。
- 体面的训练API.
据我所知,OpenNLP 和 Stanford CoreNLP 具有非常相似的功能。然而,Stanford CoreNLP 看起来有更多 activity 而 OpenNLP 在过去六个月中只有少数提交。
根据我所见,OpenNLP 似乎更容易训练新模型,并且可能仅出于这个原因就更具吸引力。但是,我的问题是其他人会从什么开始作为将 NLP 功能添加到 Java 应用程序的基础?我最担心的是 OpenNLP 是 "just mature" 还是半废弃的。
坦白地说,我是 CoreNLP 的贡献者,所以这是一个有偏见的答案。但是,在我看来,您的三个标准是:
命名实体识别:我认为 CoreNLP 在准确性和易用性方面明显胜出。一方面,OpenNLP 每个 NER 标签都有一个模型,而 CoreNLP 使用单个注释器检测所有标签。此外,SUTime 的时间分辨率是 CoreNLP 中的一项不错的福利。在准确性方面,我的轶事经验是 CoreNLP 在通用文本上做得更好。
性别识别。我认为这两种工具在这方面的记录都很少。 OpenNLP 似乎有一个 GenderModel class; CoreNLP 有一个性别注释器。
训练API。我怀疑 OpenNLP 培训 API 对于非现成的培训更易于使用。但是,如果您只想从 CoNLL 文件训练模型,那么两者都应该很简单。与我尝试过的其他工具相比,使用 CoreNLP 的训练速度往往更快,但我还没有正式对它进行基准测试,所以对此持保留态度。
这取决于您的目的和需要,我对这两个的了解是 OpenNLP
是开源的,而 CoreNLP
当然不是。
但是,如果您查看准确度级别,Stanford CoreNLP
的检测比 OpenNLP
更准确。最近我对两者的 Part Of Speech (POS)
标记进行了比较,是的,这是任何 NLP 任务中最重要的部分,所以在我的分析中,获胜者是 CoreNLP
。
与 OpenNLP
相比,NER
也有 CoreNLP
更准确的结果。
因此,如果您刚刚起步,可以在以后使用 OpenNLP
如果需要,您可以迁移到 Stanford CoreNLP
。
这里有点晚了,但我最近看 OpenNLP 只是基于斯坦福大学获得 GPL 许可这一事实——如果这对你的项目来说没问题,那么斯坦福大学通常被称为 NLP 的 benchmark/state-of-the-art。
也就是说,预训练模型的性能将取决于您的目标文本,因为它是非常特定领域的。如果你的目标文本与训练模型的数据相似,那么你应该会得到不错的结果,但如果不是,那么你将不得不自己训练模型,这将取决于训练数据。
OpenNlp 的一个优势是它的可扩展性很强,编写起来很容易与其他库一起使用,并且具有很好的 API 集成 - 训练非常简单(一旦你有了训练数据) OpenNLP (I wrote about it here - with a pretty lousy generated data set I was able to get ok results identifying foods), and it is very configurable - you can configure all the parameters around training very easily and there are a range of algorithms you can use (perceptron, max entropy, and in the snapshot version they have added Naive Bayes)
如果您发现确实需要自己训练模型,我会考虑试用 OpenNlp,看看它的性能如何,只是为了比较,因为微调可以得到相当不错的结果。