gensim most_similarは正と負ですが、どのように機能しますか?
私はこの答えを読んでいましたそれは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つの結果が異なるのはなぜですか?
回答
加減はないが、すべてのそれがないこと。正確な説明については、ソースコードを参照してください。
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)
、あなたは対象の、あなたの外法の計算を参照してくださいベクトル方法は、結合させるのと同じ結果が得られなければならないpositive
とnegative
のベクトル。