it-swarm.cn

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

输入:短语1,短语2

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

61
btw0

您可以查看本文:

基于语义网和语料库统计的句子相似性(PDF)

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

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

问候,

马特。

41
Matt Mower

对此有一个简短的答案。

简短的回答:

使用 WordNet :: Similarity Perl包 。如果Perl不是您选择的语言,请查看 WordNet项目页面 在普林斯顿,或谷歌搜索包装库。

答案很长:

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

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

32
nfelger

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

对不起,这是相当高级别的。我显然从未尝试过这个。只是一个快速的想法。

7
Chuck Wooters

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

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

5
kyrenia

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

5
jonfm

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

cortical.io开发了一个计算两个表达式的语义相似度的过程,他们在他们的网站上有一个 演示 。它们提供了一个 免费API,提供对功能的访问 ,因此您可以在自己的应用程序中使用它,而无需自己实现算法。

3
Hybrid System

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

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

这种方法已在 J. Mitchell和M. Lapata,“语义分布模型中的组成”,“认知科学”,第一卷中描述。 34,不。 8,pp.1388-1429,2010年11月。,DOI 10.1111/j.1551-6709.2010.01106.x

3
Jonathan Betz

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

2
Lushan Han

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

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

这两个句子分享“史密斯 - 沃特曼”和“算法”(不像'和','或'等)这些词的事实将允许你说这两个句子可能确实谈论同一个话题。

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

希望这可以帮助。

2
Gia

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

1
Rik

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

0
Anonymous