首页 > 解决方案 > 理解 gensim word2vec 的 most_similar

问题描述

我不确定我应该如何使用 gensim 的 Word2Vec 的 most_similar 方法。假设您想测试一个久经考验的例子:男人站在国王面前,女人站在 X 面前;找到 X。我认为这是你可以用这种方法做的,但从我得到的结果来看,我认为这不是真的。

文档内容如下:

找出前 N 个最相似的词。正面词对相似度有正面贡献,负面词负面。

该方法计算给定单词的投影权重向量的简单平均值与模型中每个单词的向量之间的余弦相似度。该方法对应于原始 word2vec 实现中的词类比和距离脚本。

然后,我假设most_similar采用正样本和负样本,并尝试在向量空间中找到尽可能接近正向量和尽可能远离负向量的点。那是对的吗?

此外,是否有一种方法可以让我们将两点之间的关系映射到另一点并获得结果(参见 man-king woman-X 示例)?

标签: pythonpython-3.xnlpgensimword2vec

解决方案


您可以准确查看most_similar()其源代码中的功能:

https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/models/keyedvectors.py#L485

这并不是“在向量空间中找到尽可能接近正向量并尽可能远离负向量的点”。相反,如原始 word2vec 论文中所述,它执行向量算术:添加正向量,减去负向量,然后从结果位置,列出最接近该角度的已知向量。

这足以解决man : king :: woman :: ?- 风格的类比,通过如下调用:

sims = wordvecs.most_similar(positive=['king', 'woman'], 
                             negative=['man'])

(你可以把它想象成,“从'king'-vector开始,添加'woman'-vector,减去'man'-vector,从你结束的地方,报告最接近那个点的排名词向量(同时省略3 个查询向量中的任何一个)。”)


推荐阅读