是否有一种算法可以告诉两个短语的语义相似性

时间:2008-09-15 12:26:42

标签: algorithm nlp semantics

输入:短语1,短语2

输出:语义相似度值(介于0和1之间),或这两个短语谈论同一事物的概率

11 个答案:

答案 0 :(得分:41)


您可能需要查看此论文:

Sentence similarity based on semantic nets and corpus statistics (PDF)

我已经实现了所描述的算法。我们的背景非常笼统(实际上是任何两个英语句子),我们发现所采用的方法太慢而且结果虽然很有希望,但还不够好(或者如果没有相当大的额外努力,可能会如此)。

你没有给出很多背景信息,所以我不一定会推荐这个,但阅读本文对你理解如何解决这个问题非常有用。

此致

答案 1 :(得分:32)

对此有一个简短的答案。

答案简短:

使用WordNet::Similarity Perl package。如果Perl不是您选择的语言,请查看普林斯顿的WordNet project page,或谷歌查看包装库。

答案很长:

确定单词相似性是一个复杂的问题,在这方面的研究仍然很热门。要计算相似度,您需要对单词的含义进行适当的表示。但是,例如“椅子”的含义是什么呢?事实上,是什么'椅子'的确切含义?如果你认真思考这个问题,它会扭曲你的思想,你会有点疯狂,最后在哲学或计算语言学研究生涯中寻找真理。哲学家和语言学家都试图在数千年的时间内找到答案,并且看不到尽头。

所以,如果你有兴趣更深入地探讨这个问题,我强烈建议你阅读Jurafsky和Martin在Speech and Language Processing中的第20.7章,其中一些可以通过Google Books获得。它非常好地概述了分布式方法的最新技术,它使用单词共现统计来定义单词相似性的度量。但是,您不太可能找到实现这些的库。

答案 2 :(得分:7)

您可能需要查看普林斯顿大学的WordNet项目。一种可能的方法是首先通过一个停用词列表运行每个短语(删除“常用”词,如“a”,“to”,“the”等)然后对于每个剩余的词。每个短语,您可以使用基于WordNet的距离度量来计算另一个短语中每个单词之间的语义“相似度”。距离度量可能类似于:您必须在WordNet中通过以从word1到word2的弧数。

对不起,这是非常高级别的。我显然从未尝试过这个。快速思考。

答案 3 :(得分:5)

我会研究潜在的语义索引。我相信你可以创建类似于向量空间搜索索引的东西,但是语义相关的术语更接近在一起,即它们之间的角度更小。如果我了解更多,我会在这里发帖。

答案 4 :(得分:5)

对于刚来这里的人,我建议你看看SEMILAR - http://www.semanticsimilarity.org/。他们实施了许多用于计算单词和句子相似度的现代研究方法。它是用Java编写的。

  

SEMILAR API提供了基于Wordnet,潜在语义分析(LSA),潜在Dirichlet分配(LDA),BLEU,流星,逐点互信息(PMI),基于依赖性的方法,基于二次分配的优化方法的各种相似性方法,并且相似性方法以不同的粒度工作 - 单词,单词,句子或更大的文本。

答案 5 :(得分:3)

一个简单的解决方案是使用字符n-gram向量的点积。这比排序更改(许多编辑距离指标不是这样)更加强大,并且捕获了很多关于词干的问题。它还可以防止完全语义理解的AI完全问题。

要计算n-gram向量,只需选择n(例如3)的值,并将短语中的每个3字序列散列到向量中。将矢量标准化为单位长度,然后取不同矢量的点积来检测相似性。

这种方法已在中描述 J. Mitchell and M. Lapata, “Composition in Distributional Models of Semantics,” Cognitive Science, vol. 34, no. 8, pp. 1388–1429, Nov. 2010., DOI 10.1111/j.1551-6709.2010.01106.x

答案 6 :(得分:3)

很抱歉找到一个6岁的问题,但正如我今天刚看到这篇文章一样,如果其他人正在寻找类似的东西,我会提出答案。

cortical.io开发了一个计算两个表达式的语义相似度的过程,它们有一个demo of it up on their website。它们提供free API providing access to the functionality,因此您可以在自己的应用程序中使用它,而无需自己实现算法。

答案 7 :(得分:2)

我会看一下考虑每个单词出现在句子中的概率的统计技巧。这将使你不太重视流行的词语,如'和','或','the',并且更加重视那些看起来不那么规律的词,因此这是一个更好的辨别因素。例如,如果您有两个句子:

1)史密斯 - 沃特曼算法为您提供两个字符串之间的相似性度量。 2)我们已经审查了smith-waterman算法,我们发现它对我们的项目来说已经足够了。

这两个句子共享“smith-waterman”和“算法”(不像'和','或'等)这些词的事实将允许你说两个句子可能确实在谈论同一个话题。

总结一下,我建议你看看:  1)字符串相似度量;  2)统计方法;

希望这有帮助。

答案 8 :(得分:2)

尝试SimService,它提供了计算前n个相似单词和短语相似度的服务。

答案 9 :(得分:1)

这要求你的算法实际上知道你在说什么。它可以通过比较单词和寻找同义词等以某种基本形式完成,但任何形式的准确结果都需要某种形式的智能。

答案 10 :(得分:0)

查看http://mkusner.github.io/publications/WMD.pdf本文介绍了一种名为Word Mover距离的算法,该算法试图揭示语义相似性。它依赖于word2vec所规定的相似性得分。将其与GoogleNews-vectors-negative300集成可产生理想的结果。