有没有一种算法可以告诉两个短语的语义相似度
题
输入:短语 1、短语 2
输出:语义相似度值(0 到 1 之间),或者这两个短语谈论同一件事的概率
解决方案
您可能想查看这篇论文:
我已经实现了所描述的算法。我们的背景非常笼统(实际上是任何两个英语句子),我们发现所采取的方法太慢,结果虽然有希望,但不够好(或者没有相当大的额外努力就可能如此)。
您没有提供太多背景信息,所以我不一定推荐这样做,但阅读这篇论文可能对您了解如何解决问题很有用。
问候,
马特。
其他提示
对此有一个简短的和一个长的答案。
简短的回答:
使用 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 个单词序列散列到一个向量中。将向量归一化为单位长度,然后采用不同向量的点积来检测相似性。
我会研究考虑每个单词出现在句子中的概率的统计技术。这将使您不太重视“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 集成会产生理想的结果。