word2vecを使用して、2つの単語を指定して類似距離を計算するにはどうすればよいですか?



How Use Word2vec Calculate Similarity Distance Giving 2 Words



解決:

gensimにはWord2VecのPython実装があり、ユーザーが入力した2つの単語間の類似性を見つけるためのユーティリティが組み込まれています。以下を参照できます。

  1. イントロ:http://radimrehurek.com/gensim/models/word2vec.html
  2. チュートリアル:http://radimrehurek.com/2014/02/word2vec-tutorial/

2つの単語間の類似性を見つけるためのPythonの構文は次のようになります。



>> gensim.modelsからインポートWord2Vec >> model = Word2Vec.load(path / to / your / model)>> model.similarity( 'france'、 'spain') 

あなたが知っているようにword2vecは、単語を数学的なベクトルとして表すことができます。したがって、モデルをトレーニングすると、単語のベクトルを取得できます。スペインとフランスとコサイン距離を計算します(内積)。

これを行う簡単な方法は、word2vecのこのPythonラッパーを使用することです。これを使用してベクトルを取得できます。



>>> model ['computer']#単語配列の生のnumpyベクトル([-0.00449447、-0.00310097、0.02421786、...]、dtype = float32)

2つの単語間の距離を計算するには、次のようにします。

>>> import numpy >>> cosine_similarity = numpy.dot(model ['spain']、model ['france'])/(numpy.linalg.norm(model ['spain'])* numpy.linalg.norm(モデル['フランス'])) 

gensimのような別のライブラリを使用するのではなく、元のdistance.cバージョンを変更してこれを行う方法を探しているときに、これに遭遇しました。

答えが見つからなかったので、いくつか調査を行いました。元の実装でそれを行う方法を知りたい他の人のために、ここでそれを共有しています。



Cソースを調べると、「bi」がインデックスの配列であることがわかります。 2つの単語を指定すると、word1のインデックスはbi [0]になり、word2のインデックスはbi [1]になります。

モデル「M」はベクトルの配列です。各単語は、次元「サイズ」のベクトルとして表されます。

これらの2つのインデックスとベクトルのモデルを使用して、それらを検索し、次のようにコサイン距離(内積と同じ)を計算します。

dist = 0; for(a = 0; aこれが完了した後、値 'dist'は2つの単語間のコサイン類似度です。