gensimmost_similar有正负,它是如何工作的?

Pey*_*man 4 python nlp gensim word2vec

我正在阅读这个关于 Gensim 的答案most_similar

它执行向量算术:添加正向量,减去负向量,然后从结果位置列出最接近该角度的已知向量。

但当我测试时,情况并非如此。我使用 Gensim 数据集训练了 Word2Vec"text8"并测试了这两个:

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

>>> [('queen', 0.7131118178367615), ('prince', 0.6359186768531799),...]
Run Code Online (Sandbox Code Playgroud)
model.wv.most_similar([model["king"] + model["woman"] - model["man"]])

>>> [('king', 0.84305739402771), ('queen', 0.7326322793960571),...]
Run Code Online (Sandbox Code Playgroud)

它们显然不一样。0.713甚至第一个和第二个中的皇后得分0.732也不相同。

所以我再次问这个问题,Gensim 是如何most_similar工作的?为什么上面两者的结果不同呢?

goj*_*omo 6

加法和减法并不是它的全部作用;要获得准确的描述,您应该查看源代码:

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

您将看到,加法和减法是通过访问器对每个向量的单位范数get_vector(key, use_norm=True)版本进行的。

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