我想测量两个短语/句子之间的语义相似度。有没有我可以直接可靠地使用的框架?
我已经检查了this question,但它很老了,我找不到真正有用的答案。有one link,但我发现这不可靠。
例如为:
我有一句话:感觉被压碎了
我有几个选择:强制内向,粉碎,情感破坏,重塑等
我想找到与第一个相似度最高的词/短语
这里的答案是:在情感上被摧毁。
更大的图景是:我想根据句子中的用法确定FrameNet中哪个帧与给定动词匹配。
更新:我发现this library对于测量两个单词之间的相似性非常有用。此外,ConceptNet相似机制非常好。
和this library用于衡量句子之间的语义相似性
如果有人有任何见解,请分享。
答案 0 :(得分:8)
这是一个非常复杂的问题。
我能想到的主要技术(在进入更复杂的NLP过程之前)将是对每对短语应用余弦(或任何其他度量)相似性。显然,由于不匹配的问题,这个解决方案目前效率很低:句子可能用不同的词来表示相同的概念。
要解决此问题,您应该将每个短语的初始表示形式转换为更具“概念性”的含义。一种选择是使用其同义词扩展每个单词(即使用WordNet,另一个选项是应用分布式语义DS(http://liawww.epfl.ch/Publications/Archive/Besanconetal2001.pdf)等指标,这些指标扩展每个术语的表示形式,使用更可能的单词与它一起出现。
实施例: 文件的表示:{“car”,“race”}将变为{“car”,“automobile”,“race”}与同义词。虽然,DS会像:{“car”,“wheel”,“road”,“pilot”,...}
显然这种转变不是二元的。每个术语都有一些相关的权重。
我希望这会有所帮助。
答案 1 :(得分:0)
也许cortical.io API可以帮助解决您的问题。这里的方法是将每个单词转换为语义指纹,用16K语义特征表征它的含义。通过将单词指纹“或”在一起,将短语,句子或更长的文本转换为指纹。在转换成(数字)二进制矢量表示之后,可以使用诸如欧几里德距离或余弦相似度的距离度量来容易地计算语义距离。 所有必要的转换和比较函数都由api提供。