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文件)并进行相似度实验

Word2Vec 计算词语之间的余弦相似度

word2vec词向量训练及中文文本相似度计算

python gensim使用word2vec词向量处理英文语料

python gensim使用word2vec词向量处理中文语料