测量两个短语之间的语义相似性[关闭]

Posted

技术标签:

【中文标题】测量两个短语之间的语义相似性[关闭]【英文标题】:Measuring semantic similarity between two phrases [closed] 【发布时间】:2013-04-18 18:33:30 【问题描述】:

我想测量两个短语/句子之间的语义相似度。有没有我可以直接可靠使用的框架?

我已经查看了this question,但它已经很老了,我在那里找不到真正有用的答案。有one link,但我发现这不可靠。

例如: 我有一句话:感觉被压垮了 我有几种选择:向内强行,粉碎,情感破坏,重塑等。 我想找到与第一个相似度最高的术语/短语。 这里的答案是:情感上的毁灭。

更大的图景是:我想根据它在句子中的用法来识别 FrameNet 中的哪个帧与给定动词匹配。

更新:我发现this library 对于测量两个词之间的相似度非常有用。另外ConceptNet的相似性机制也很好。

和this library 用于测量句子之间的语义相似度

如果有人有任何见解,请分享。

【问题讨论】:

查看语义度量库:http://www.semantic-measures-library.org 【参考方案1】:

这是一个非常复杂的问题。

我能想到的主要技术(在进入更复杂的 NLP 过程之前)是对每对短语应用余弦(或任何其他度量)相似度。显然,由于不匹配的问题,这个解决方案目前效率很低:句子可能用不同的词指代相同的概念。

要解决此问题,您应该将每个短语的初始表示转换为更“概念”的含义。一种选择是使用其同义词扩展每个单词(即使用WordNet,另一种选择是应用诸如分布式语义DS(http://liawww.epfl.ch/Publications/Archive/Besanconetal2001.pdf)之类的度量标准,该指标使用更可能出现的单词来扩展每个术语的表示.

示例: 文档的表示:"car","race" 将转换为具有同义词的 "car","automobile","race"。而对于 DS,它会类似于:"car","wheel","road","pilot", ...

显然,这种转换不会是二元的。每个术语都有一些相关的权重。

我希望这会有所帮助。

【讨论】:

感谢您的回复,但我的主要问题是我需要一些东西来评估相似性作为一个组合词,而不是我在示例中提到的单个词。 您根据术语-术语相似性修改短语表示。示例,给定两个句子: S1: "car", "race" S2: "motorbike, "speed" 使用标准余弦相似度,您得到 0.0 相似度(因为没有常见的术语)。但是您可以扩展它使用基于DS的“相关术语”表示,然后短语变为:S1:“car”,“race”,“vehicle”,“automobile”,“fast” S2:“motorbike,“speed” , "bike", "vehicle", "fast" 现在你有了一些相似性,基于 "fast" 和 "vehicle"。【参考方案2】:

也许cortical.io API 可以帮助您解决问题。这里的方法是将每个单词转换成一个语义指纹,用 16K 语义特征来表征它的含义。短语、句子或更长的文本通过 ORing 单词指纹一起转换为指纹。在转换为(数字)二进制向量表示之后,可以使用距离度量(如欧几里得距离或余弦相似度)轻松计算语义距离。 所有必要的转换和比较功能都由 api 提供。

【讨论】:

以上是关于测量两个短语之间的语义相似性[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何测量预训练模型(例如 vgg、resnet...)提取的图像特征之间的语义相似度?

LSA 或 BERT 变压器?哪一个更适合用于短句的实时语义相似性和语义聚类? [关闭]

用于两个“单词”之间语义相似性/相关性的 Java API

如何度量两个词之间的语义相似度

混合语言的语义相似性

在python中测量两个rgb图像之间的相似度