如何衡量单词的语义相似性?


20

找出单词语义相似性的最佳方法是什么?Word2Vec可以,但不理想:

# Using the 840B word Common Crawl GloVe vectors with gensim:

# 'hot' is closer to 'cold' than 'warm'
In [7]: model.similarity('hot', 'cold')
Out[7]: 0.59720456121072973

In [8]: model.similarity('hot', 'warm')
Out[8]: 0.56784095376659627

# Cold is much closer to 'hot' than 'popular'
In [9]: model.similarity('hot', 'popular')
Out[9]: 0.33708479049537632

NLTK的Wordnet方法似乎只是放弃:

In [25]: print wn.synset('hot.a.01').path_similarity(wn.synset('warm.a.01'))
None

还有哪些其他选择?


1
你能说出word2vec为什么不理想吗?Word2vec旨在捕获单词的语义相似性,那么为什么它不是理想的呢?
SHASHANK GUPTA

3
是的,这就是为什么我提供问题中的示例。重申一下:“ hot”和“ cold”是反义词,但它们(根据word2vec)比“ hot”和“ warm”更相似,后者更接近同义词。“ hot”也可以表示“ popular”(例如“ hot item”),但是“ hot”和“ cold”比“ hot”和“ popular”彼此更靠近。 (在语义上是对立的)比在同义词上(语义上是对等的)更相似
Thomas Johnson

Answers:


11

Word2vec不会基于反义词和同义词捕获相似性。如果两个单词具有相似的上下文,则Word2vec的相似度更高。例如,加利福尼亚的天气是_____。可以通过冷热填充空白,因此相似性会更高。这个概念称为范式关系。

如果您有兴趣捕获上位词,下位词,同义词,反义词等关系,则必须使用任何基于词网的相似性度量。基于词网的相似性度量有很多。您可以检查此链接http://ws4jdemo.appspot.com/


7

在“ 用于语义相似度的文本分析工具”中,他们开发了一种算法来查找2个句子之间的相似度。但是,如果您仔细阅读,他们会在矩阵中找到单词的相似性,并将它们加在一起以找出句子之间的相似性。因此,检查单词相似性可能是一个尝试。

同样在《SimLex-999:使用(真实)相似度估计来评估语义模型》中,他们解释了之间的差异associationsimilarity这也可能也是您进行观察的原因。例如,咖啡和一杯。它们不相似,但具有关联性。因此,仅考虑相似性将得出不同的结果。作者建议使用各种模型进行估算。


链接断开,“用于语义相似性的文本分析工具”。
xtian

2

对于大多数情况,Word2vec是一个很好的起点。它确实使用CBOW方法通过预测来捕获语义。它允许翻译(作为我在此可以重复的最重复的示例),V(国王)-V(女王)~~ V(男)-V(女)等等。

那是什么问题呢?问题在于词义上的歧义。每当单词本身在两个不同的上下文中具有两个不同的含义时,单词向量将趋向于实际上远离任一上下文。Python〜Boa(两种蛇)和Python-Java(两种编程语言)..

还有其他选择吗?

对于“同义词”的非常特定的目的,如果您希望Wordnet将是理想的选择。它捕获两个单词的显式关系,而不是基于用法和出现情况的隐式关系。

Wordnet主要是作为字典制作的-word2vec是通过使用来挖掘的。


0

在上下文无关的语法中,我认为确定单词的接近程度确实是不可能的。您可以做的是使用词典向量,然后,如果单词在两个词典之间的值接近,则该值应接近。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.