gensim most_similarは正と負ですが、どのように機能しますか?

Nov 29 2020

私はこの答えを読んでいましたそれはGensimについて言っていますmost_similar

ベクトル演算を実行します。正のベクトルを加算し、負のベクトルを減算し、その結果の位置から、その角度に最も近い既知のベクトルをリストします。

しかし、私がそれをテストしたとき、そうではありません。Gensim"text8"データセットを使用してWord2Vecをトレーニングし、次の2つをテストしました。

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ますか?上記の2つの結果が異なるのはなぜですか?

回答

1 gojomo Nov 29 2020 at 20:55

加減はないが、すべてのそれがないこと。正確な説明については、ソースコードを参照してください。

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]にはmodel.get_vector(key, use_norm=True)、あなたは対象の、あなたの外法の計算を参照してくださいベクトル方法は、結合させるのと同じ結果が得られなければならないpositivenegativeのベクトル。