如何使用gensim KeyedVectors对向量进行减法和加法运算



对于使用gensim.models.KeyedVectors(来自word2vec-google-news-300模型(的项目,我需要加减单词向量

不幸的是,我已经试过了,但没能做到正确。

让我们来看看poullar的例子女王~=国王-男人+女人
当我想从国王中减去男人并添加女人时,
我可以通过使用gensim

# model is loaded using gensim.models.KeyedVectors.load()
model.wv.most_similar(positive=["king", "woman"], negative=["man"])[0]

正如预期的那样,它为我使用的模型返回('queen', 0.7118192911148071)

现在,为了通过加法和减法向量(所有向量都是单位赋范的(实现相同的效果,我尝试了以下代码:

vec_king, vec_man, vec_woman = model.wv["king"], model.wv["man"], model.wv["woman"]
result = model.similar_by_vector(vec_king - vec_man + vec_woman)[0]

上面代码中的result('king', 0.7992597222328186),这不是我所期望的。

我犯了什么错

您通常都在做正确的事情,但请注意:

  • most_similar()方法也会从其结果中取消所提供的任何命名单词的资格,因此即使'king'(仍然(是与结果最接近的单词,它也会被忽略。在忽略输入单词后,你的公式很可能会将'queen'作为下一个最接近的单词——这就是"类比"测试所需要的。

  • most_similar()方法还对归一化为单位长度的向量版本进行向量运算,这可能导致略有不同的答案。如果将model.wv['king']的用途更改为model.get_vector('king', norm=True),则会得到单位赋范向量。

另请参阅前面的类似回答:https://stackoverflow.com/a/65065084/130288

最新更新