我想知道gensim word2vec的两个相似性度量之间的区别:most_similar()和most_similar_cosmul()。我知道第一个使用单词向量的余弦相似性,而另一个使用Omer Levy和Yoav Goldberg提出的乘法组合目标。我想知道它对结果有何影响?哪一个给出语义相似性?等等 例如:
model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
model.most_similar(positive=['woman', 'king'], negative=['man'])
结果:[('queen',0.50882536),...]
model.most_similar_cosmul(positive=['baghdad', 'england'], negative=['london'])
结果:[(u'iraq',0.8488819003105164),...]
答案 0 :(得分:12)
从Levy和Goldberg的论文中,如果你试图找到类比(或组合/比较超过2个单词向量),第一种方法( 3CosAdd 或eq.3的论文)更多与第二种方法( 3CosMul 或论文的第4项)相比,易受1次比较支配。
仅针对2个单词向量之间的语义相似性,此方法不适用。
示例,使用Google News Vectors -
model.similarity('Mosul','England')
0.10051745730111421
model.similarity('Iraq','England')
0.14772211471143404
model.similarity('Mosul','Baghdad')
0.83855779792754492
model.similarity('Iraq','Baghdad')
0.67975755642668911
现在伊拉克比摩苏尔更接近英格兰(两国都是国家),但相似值很小〜0.1。
另一方面,摩苏尔与巴格达的相似程度高于伊拉克(地理/文化方面),其相似度值高于约0.7
现在,类比(英格兰 - 伦敦+巴格达= X) -
作为线性和的3CosAdd 允许一个大的相似性术语支配表达式。它忽略了每个术语反映了相似性的不同方面, 不同的方面有不同的尺度。
另一方面,3CosMul - 放大了小数量之间的差异,减少了较大数量之间的差异。
model.most_similar(positive=['Baghdad', 'England'], negative=['London'])
(u'Mosul', 0.5630180835723877)
(u'Iraq', 0.5184929370880127)
model.most_similar_cosmul(positive=['Baghdad', 'England'], negative=['London'])
(u'Mosul', 0.8537653088569641)
(u'Iraq', 0.8507866263389587)