关于nlp:是否有一种算法可以判断两个词组的语义相似性

关于nlp:是否有一种算法可以判断两个词组的语义相似性

Is there an algorithm that tells the semantic similarity of two phrases

输入:词组1,词组2

输出:语义相似性值(0到1之间),或者这两个短语谈论同一件事的可能性


您可能想查看这篇文章:

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

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

您没有提供太多背景信息,所以我不一定推荐这样做,但是阅读本文可能对您了解如何解决该问题很有用。

问候,

马特


这有一个简短的回答。

简短的答案:

使用WordNet :: Similarity Perl包。如果不是您选择的语言是Perl,请查看Princeton的WordNet项目页面,或在google上找到包装器库。

长答案:

确定单词的相似性是一个复杂的问题,在这个领域,研究仍然很热门。要计算相似度,您需要适当表达单词的含义。但是,"椅子"的含义将是什么呢?实际上,"椅子"的确切含义是什么?如果您对此进行漫长而艰苦的思考,将会使您产生疑惑,您会发疯,并最终从事哲学或计算语言学的研究事业以找到真相?哲学家和语言学家都试图提出一个真正的答案,这已经有数千年的历史了,而且没有尽头。

因此,如果您有兴趣更深入地研究这个问题,我强烈建议您阅读Jurafsky和Martin撰写的《语音和语言处理》第20.7章,其中一些内容可以通过Google图书获得。它很好地概述了最新的分布方法,这些方法使用词共现统计来定义词相似度的度量。但是,您不太可能找到实现这些功能的库。


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

抱歉,这是高级的。我显然从来没有尝试过。只是一个快速的想法。


对于刚接触此问题的任何人,我建议您看看SEMILAR-http://www.semanticsimilarity.org/。他们实现了许多用于计算单词和句子相似度的现代研究方法。它是用Java编写的。

SEMILAR API comes with various similarity methods based on Wordnet, Latent Semantic Analysis (LSA), Latent Dirichlet Allocation (LDA), BLEU, Meteor, Pointwise Mutual Information (PMI), Dependency based methods, optimized methods based on Quadratic Assignment, etc. And the similarity methods work in different granularities - word to word, sentence to sentence, or bigger texts.


我将为此研究潜在的语义索引。我相信您可以创建类似于矢量空间搜索索引的内容,但语义相关的术语会更靠近在一起,即它们之间的夹角较小。如果我了解更多信息,我会在这里发布。


抱歉,我提出了一个长达6年的问题,但是今天我刚看到这篇文章时,我会给出一个答案,以防其他人正在寻找类似的内容。

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


一种简单的解决方案是使用字符n元语法向量的点积。这在排序更改(许多编辑距离度量标准未提供)方面很可靠,并且捕获了词干周围的许多问题。它还防止了完全语义理解的AI完全问题。

要计算n元语法向量,只需选取n的值(例如3),然后将短语中的每个3字序列哈希为向量即可。将向量归一化为单位长度,然后采用不同向量的点积来检测相似性。

这种方法已在
J. Mitchell和M. Lapata,"语义分布模型的组成",认知科学,第1卷。 34号8,第1388-1429页,2010年11月。DOI10.1111 / j.1551-6709.2010.01106.x


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


我将看看统计技术,该技术考虑了每个单词出现在句子中的可能性。这将使您对诸如"和","或","该"之类的流行单词的重视程度降低,而对显得不太规则的单词给予更多重视,因此成为更好的区分因素。例如,如果您有两个句子:

1)Smith-waterman算法为您提供了两个字符串之间的相似性度量。
2)我们回顾了史密斯-沃特曼算法,发现它对我们的项目足够好。

这两个句子共享单词" smith-waterman"和"算法"(不如" and"," or"等常见),这使您可以说这两个句子可能确实在谈论同一个话题。

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

希望这可以帮助。


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


看看http://mkusner.github.io/publications/WMD.pdf。本文描述了一种称为词移动距离的算法,该算法试图揭示语义相似性。它依赖于word2vec规定的相似性分数。将此与GoogleNews-vectors-negative300集成可获得理想的结果。


推荐阅读