Gensim Word2vec:语义相似度
Posted
技术标签:
【中文标题】Gensim Word2vec:语义相似度【英文标题】:Gensim Word2vec : Semantic Similarity 【发布时间】:2015-10-10 01:43:08 【问题描述】:我想知道 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), ...]
【问题讨论】:
【参考方案1】:从 Levy 和 Goldberg 的论文中,如果您试图找到类比(或组合/比较超过 2 个词向量),第一种方法(3CosAdd 或论文的 eq.3)更与第二种方法(3CosMul 或纸的 eq.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)
【讨论】:
以上是关于Gensim Word2vec:语义相似度的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 gensim 的 word2vec 模型与 python 计算句子相似度
gensim加载word2vec训练结果(bin文件)并进行相似度实验