gensim most_similar 有positive和negative,怎么用?

gensim most_similar with positive and negative, how does it work?

我正在阅读 关于 Gensim 的内容 most_similar:

it performs vector arithmetic: adding the positive vectors, subtracting the negative, then from that resulting position, listing the known-vectors closest to that angle.

但是我测试的时候,并不是这样的。我用 Gensim "text8" 数据集训练了一个 Word2Vec 并测试了这两个:

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

>>> [('queen', 0.7131118178367615), ('prince', 0.6359186768531799),...]

model.wv.most_similar([model["king"] + model["woman"] - model["man"]])

>>> [('king', 0.84305739402771), ('queen', 0.7326322793960571),...]

它们显然不一样。即使是第一个中的女王分数是 0.713 而第二个中的 0.732 也不相同。

所以我再问一遍,Gensim most_similar是如何工作的?为什么上面两个的结果不一样?

加法和减法不是所有它做的;具体描述请看源码:

https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/models/keyedvectors.py#LC690:~:text=def%20most_similar,self%2C

你会看到加法和减法是在每个向量的 unit-normed 版本上,通过 get_vector(key, use_norm=True) 访问器。

如果您将 model[key] 的使用更改为 model.get_vector(key, use_norm=True),您应该会看到目标向量的方法外计算给出与让该方法结合 [=13] 相同的结果=] 和 negative 向量。