47

是否有任何用于计算一对句子的语义相似度分数的库?

我知道 WordNet 的语义数据库,以及如何生成 2 个单词的分数,但我正在寻找能够对整个句子和输出执行所有预处理任务(如端口词干、停用词删除等)的库两个句子相关程度的分数。

我发现了一项使用 .NET 框架编写的工作正在进行中,该框架使用一系列预处理步骤计算分数。有没有在 python 中执行此操作的项目?

我不是在寻找可以帮助我找到分数的操作序列(正如这里所要求的那样)
我很想自己实现每个阶段,或者从不同的库中粘合函数,以便它适用于句子对,但我主要需要它作为测试数据推论的工具。


编辑:我正在考虑使用 NLTK 并计算迭代两个句子的每对单词的分数,然后从结果的标准差中得出推论,但我不知道这是否是对相似性的合理估计。另外,对于长字符串,这将花费大量时间。
同样,我正在寻找已经智能地实现这一点的项目/库。让我这样做的东西:

import amazing_semsim_package
str1='Birthday party ruined as cake explodes'
str2='Grandma mistakenly bakes cake using gunpowder'

>>similarity(str1,str2)
>>0.889
4

3 回答 3

50

我见过的最好的包是 Gensim,可以在Gensim 主页上找到。我已经用过很多次了,总体上对它的易用性非常满意;它是用 Python 编写的,并且有一个易于理解的教程来帮助您入门,它比较了 9 个字符串。它可以通过 pip 安装,所以我希望安装它不会有很多麻烦。

您使用哪种评分算法在很大程度上取决于您的问题的上下文,但如果您想要一些基本的东西,我建议从 LSI 功能开始。(这就是本教程将引导您完成的内容。)

如果您阅读 gensim 的教程,它将引导您使用 Similarities 函数比较两个字符串。这将允许您根据它们包含的文本来查看您的叮咬如何相互比较,或与其他一些叮咬进行比较。

如果您对其工作原理背后的科学感兴趣,请查看这篇论文。

于 2013-06-18T23:37:31.960 回答
5

不幸的是,我无法在 PY 方面为您提供帮助,但您可以查看我的旧项目,该项目使用字典来完成句子之间的语义比较(稍后可以在 PY 中编码以实现向量空间分析)。从 JAVA 翻译成 PY 应该只需要几个小时的编码。 https://sourceforge.net/projects/semantics/

于 2014-09-26T15:44:46.370 回答
-4

AFAIK 最强大的 Python NLP-Lib 是http://nltk.org/

于 2013-06-10T12:04:46.987 回答