64

输入:词组 1,词组 2

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

4

11 回答 11

43

你可能想看看这篇论文:

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

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

您没有提供很多背景信息,因此我不一定会推荐这一点,但阅读本文可能有助于您了解如何解决问题。

问候,

马特。

于 2008-09-15T13:53:33.753 回答
34

对此有一个简短的答案。

简短的回答:

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

长答案:

确定单词相似度是一个复杂的问题,该领域的研究仍然非常热门。要计算相似度,您需要适当地表示单词的含义。但是,“椅子”的含义是什么?事实上,“椅子”的确切含义是什么如果您对此深思熟虑,它会扭曲您的思想,您会有点发疯,最终从事哲学或计算语言学的研究工作以找到真相™。几千年来,哲学家和语言学家都试图找到答案,而且看不到尽头。

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

于 2008-10-07T15:32:59.830 回答
8

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

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

于 2008-09-15T22:36:57.723 回答
8

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

SEMILAR API 带有基于 Wordnet、潜在语义分析 (LSA)、潜在狄利克雷分配 (LDA)、BLEU、Meteor、逐点互信息 (PMI)、基于依赖的方法、基于二次分配的优化方法等的各种相似性方法。相似性方法适用于不同的粒度——单词到单词、句子到句子或更大的文本。

于 2016-01-14T18:46:39.540 回答
6

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

于 2008-09-15T13:20:07.733 回答
4

很抱歉挖掘了一个 6 年前的问题,但是当我今天刚刚看到这篇文章时,我会给出一个答案,以防其他人正在寻找类似的东西。

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

于 2014-10-01T13:12:33.367 回答
3

一种简单的解决方案是使用字符 n-gram 向量的点积。这对排序更改(许多编辑距离度量不是)是稳健的,并且捕获了围绕词干提取的许多问题。它还可以防止完全语义理解的 AI 完全问题。

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

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

于 2008-09-15T14:01:41.753 回答
2

我会看看统计技术,考虑到每个单词出现在句子中的概率。这将使您对流行词(例如“and”、“or”、“the”)给予较低的重要性,而对出现较少的单词给予更多的重视,因此这是一个更好的区分因素。例如,如果您有两个句子:

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

这两个句子共享单词“smith-waterman”和单词“algorithms”(不像“and”、“or”等常见)这一事实将使您可以说这两个句子确实可能正在谈论同一个话题。

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

希望这可以帮助。

于 2010-07-04T17:55:31.533 回答
2

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

于 2013-01-17T16:51:33.473 回答
1

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

于 2008-09-15T12:31:32.843 回答
0

看看http://mkusner.github.io/publications/WMD.pdf这篇论文描述了一种名为 Word Mover distance 的算法,它试图揭示语义相似性。它依赖于 word2vec 规定的相似度分数。将此与 GoogleNews-vectors-negative300 集成会产生理想的结果。

于 2017-04-04T17:07:21.160 回答