有没有一种algorithm能够说明两个短语的语义相似性
input:短语1,短语2
输出:语义相似度值(在0和1之间),或者这两个短语谈论同一事物的概率
你可能想看看这篇文章:
基于语义网和语料库统计的句子相似度(PDF)
我已经实现了所描述的algorithm。 我们的背景是非常普遍的(有效的是任何两个英语句子),我们发现采取的方法太慢,结果虽然有前途,但还不够好(或者可能没有相当多的额外努力)。
你没有给出很多的背景,所以我不一定会推荐这个,但是阅读这篇论文对你理解如何解决这个问题是有用的。
问候,
马特。
对此有一个简短而长的回答。
简短的回答:
使用WordNet :: Similarity Perl包 。 如果Perl不是您select的语言,请检查普林斯顿的WordNet项目页面 ,或谷歌的包装库。
漫长的回答:
确定词汇相似性是一个复杂的问题,在这方面的研究还很热。 要计算相似度,您需要适当地表示单词的含义 。 但是,什么是“椅子”的含义的表示呢? 事实上,“椅子”的确切含义是什么? 如果你长期认真思考这个问题,会扭曲你的思维,你会发疯,最后从哲学或计算语言学的研究生涯中find真相。 哲学家和语言学家都试图想出几千年来的答案,而且没有尽头。
因此,如果您有兴趣更深入地探讨这个问题,我强烈build议阅读Jurafsky和Martin的“ 语言和语言处理”第20.7章,其中一些可以通过Google Books获得 。 它对分布方法的现状进行了很好的概述,它使用词汇共现统计来定义词汇相似度的度量。 但是,你不可能find实现这些的库。
你可能想检查普林斯顿大学的WordNet项目。 一个可能的方法是首先运行一个停用词表(去除“a”,“to”,“the”等“常用”词),然后对每个剩余词每个短语,你可以使用基于WordNet的距离度量来计算另一个短语中的每个单词之间的语义“相似性”。 距离度量可能是这样的:您需要在WordNet中通过从word1到word2的弧线数量。
对不起,这是相当高级的。 我显然从来没有尝试过这一点。 只是一个快速的想法。
我会研究潜在的语义索引。 我相信你可以创build类似于向量空间search索引的东西,但是语义上相关的术语更接近,即它们之间的angular度较小。 如果我了解更多,我会在这里发表。
对不起挖掘一个6岁的问题,但正如我刚刚遇到这个职位今天,我会抛出一个答案,以防其他人正在寻找类似的东西。
cortical.io开发了一个计算两个expression式的语义相似度的过程,并在他们的网站上进行了演示 。 他们提供了一个免费的API来访问function ,所以你可以在你自己的应用程序中使用它,而不必自己实现algorithm。
对于任何人只是来这个,我会build议看看SEMILAR – http://www.semanticsimilarity.org/ 。 他们实现了很多现代的计算单词和句子相似度的研究方法。 它是用Java编写的。
SEMILAR API提供了基于Wordnet,潜在语义分析(LSA),潜在Dirichlet分配(LDA),BLEU,meteor,点信息(PMI),基于依赖关系的方法,基于二次分配的优化方法等各种相似方法。相似性方法在不同的粒度上工作 – 单词对单词,句子对,或更大的文本。
我会看看考虑到每个单词出现在句子中的概率的统计技术。 这样可以让你不那么重视“和”,“或”这样的stream行词,并且更加重视那些看起来不那么重要的词,因此是一个更好的歧视因素。 例如,如果你有两个句子:
1)smith-watermanalgorithm给你两个string之间的相似性度量。 2)我们已经回顾了smith-watermanalgorithm,我们发现它对我们的项目来说足够好了。
这两个句子分享“史密斯 – 沃特曼”这个词和“algorithm”这两个词(它们不像'和','或'等等那么常见)这个事实,可以让你说这两个句子的确是可能的在谈论同一个话题。
总结一下,我build议你看看:1)string相似性度量; 2)统计方法;
希望这可以帮助。
尝试使用SimService ,它提供了计算前n个相似的单词和短语相似度的服务。
一个简单的解决scheme是使用字符n-gram向量的点积。 这对订购更改(许多编辑距离度量标准不是这样)是强大的,并捕获围绕词干的许多问题。 它也阻止了完全语义理解的AI完全问题。
为了计算n-gramvector,只需要select一个n(比如3)的值,并且将该短语中的每个3个单词的序列散列成一个vector。 将vector归一化为单位长度,然后用不同vector的点积来检测相似度。
这种方法已经在J.Mitchell和M.Lapata,“语义分布模型中的组成”,认知科学, 34,没有。 8,第1388-1429页,2010年11月,DOI 10.1111 / j.1551-6709.2010.01106.x
这要求你的algorithm实际上知道你在说什么。 它可以通过比较单词和寻找同义词等基本forms来完成,但是任何forms的准确结果都需要某种forms的智能。
看看http://mkusner.github.io/publications/WMD.pdf本文描述了一种称为移动距离的algorithm,试图发现语义相似性。; 它依赖于word2vec规定的相似度分数。 将其与GoogleNews-vectors-negative300集成可以产生理想的结果。