输入:短语 1、短语 2

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

有帮助吗?

解决方案


您可能想查看这篇论文:

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

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

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

问候,

马特。

其他提示

对此有一个简短的和一个长的答案。

简短的回答:

使用 WordNet::相似性 Perl 包. 。如果 Perl 不是您选择的语言,请检查 WordNet 项目页面 在普林斯顿大学,或者谷歌寻找包装库。

长答案:

确定单词相似度是一个复杂的问题,该领域的研究仍然很热门。要计算相似度,您需要适当的表示 意义 一句话。但是,比如说“椅子”的含义是什么?事实上,什么 “椅子”的确切含义?如果你认真思考这个问题,它会扭曲你的思想,你会有点疯狂,并最终从事哲学或计算语言学的研究生涯以找到真相™。几千年来,哲学家和语言学家都在试图找到答案,而且看不到尽头。

因此,如果您有兴趣更深入地探讨这个问题,我强烈建议您阅读第 20.7 章 语音和语言处理 作者:Jurafsky 和 ​​Martin,其中一些可通过 谷歌图书. 。它很好地概述了最先进的分布方法,该方法使用单词共现统计来定义单词相似性的度量。然而,您不太可能找到实现这些的库。

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

抱歉,这是相当高水平的。我显然从未尝试过这个。只是一个快速的想法。

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

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

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

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

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

一种简单的解决方案是使用字符 n 元语法向量的点积。这对于排序更改(许多编辑距离度量不是)来说是稳健的,并且捕获了有关词干的许多问题。它还可以防止人工智能完全语义理解的问题。

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

这种方法已在J。米切尔和 M.Lapata,“语义分布模型的组成”,认知科学,卷。34、没有。第 8 页。1388–1429,十一月2010.,DOI 10.1111/j.1551-6709.2010.01106.x

我会研究考虑每个单词出现在句子中的概率的统计技术。这将使您不太重视“and”、“or”、“the”等流行单词,而更加重视那些不那么频繁出现的单词,因此它们是更好的区分因素。例如,如果你有两个句子:

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

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

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

希望这可以帮助。

尝试 模拟服务, ,提供计算top-n相似词和短语相似度的服务。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top