web-dev-qa-db-ja.com

Word2VecでWordリストのベクターをフェッチする方法は?

本質的に辞書であるテキストファイルを作成したいと思います。各Wordは、Word2vecを介してそのベクトル表現とペアになっています。最初にWord2vecをトレーニングしてから、リストから各Wordを検索し、その表現を見つける(そして、新しいテキストファイルに保存する)プロセスだと思いますか?

私はWord2vecを初めて使用しますが、これを行う方法がわかりません。私はいくつかの主要なサイトとStackに関するいくつかの質問を読みましたが、まだ良いチュートリアルを見つけていません。

11
jonbon

直接アクセスmodel[Word]は非推奨であり、トレーニングと埋め込みを分離するためにGensim4.0.0で削除されます。コマンドは、単にmodel.wv[Word]に置き換える必要があります。

PythonでGensimを使用すると、ボーカブが作成され、モデルがトレーニングされた後、model.wv.vocabにすでにマップされている単語数とサンプリング情報を見つけることができます。ここでmodelWord2Vecの変数名です。オブジェクト。

したがって、ディクショナリオブジェクトを作成するには、次のようにします。

my_dict = dict({})
for idx, key in enumerate(model.wv.vocab):
    my_dict[key] = model.wv[key]
    # Or my_dict[key] = model.wv.get_vector(key)
    # Or my_dict[key] = model.wv.Word_vec(key, use_norm=False)

辞書ができたので、好きな方法でファイルに書き込むことができます。たとえば、 pickleライブラリ を使用できます。または、Jupyter Notebookを使用している場合は、便利な「魔法のコマンド」%store my_dict > filename.txtがあります。 filename.txtは次のようになります。

{'one': array([-0.06590105,  0.01573388,  0.00682817,  0.53970253, -0.20303348,
   -0.24792041,  0.08682659, -0.45504045,  0.89248925,  0.0655603 ,
   ......
   -0.8175681 ,  0.27659689,  0.22305458,  0.39095637,  0.43375066,
    0.36215973,  0.4040089 , -0.72396156,  0.3385369 , -0.600869  ],
  dtype=float32),
 'two': array([ 0.04694849,  0.13303463, -0.12208422,  0.02010536,  0.05969441,
   -0.04734801, -0.08465996,  0.10344813,  0.03990637,  0.07126121,
    ......
    0.31673026,  0.22282903, -0.18084198, -0.07555179,  0.22873943,
   -0.72985399, -0.05103955, -0.10911274, -0.27275378,  0.01439812],
  dtype=float32),
 'three': array([-0.21048863,  0.4945509 , -0.15050395, -0.29089224, -0.29454648,
    0.3420335 , -0.3419629 ,  0.87303966,  0.21656844, -0.07530259,
    ......
   -0.80034876,  0.02006451,  0.5299498 , -0.6286509 , -0.6182588 ,
   -1.0569025 ,  0.4557548 ,  0.4697938 ,  0.8928275 , -0.7877308 ],
  dtype=float32),
  'four': ......
}

GensimのWord2vecのネイティブ save / load メソッドを調べることもできます。

12
Moobie

Gensimチュートリアル それを非常に明確に説明しています。

まず、Word2vecモデルを作成する必要があります-テキストでトレーニングすることによって、たとえば.

 model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)

または、事前にトレーニングされたモデルをロードすることによって(たとえば、それらを見つけることができます ここ )。

次に、すべての単語を繰り返し処理し、モデル内のそれらのベクトルを確認します。

for Word in words:
  vector = model[Word]

それができたら、Wordとベクターを好きなようにフォーマットしてください。

10

あなたは直接ベクトルを取得することができます

model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
model.wv.vectors

と言葉を通して

model.wv.vocab.keys()

それが役に立てば幸い !

1
Vivek Ananthan

pythonパッケージでgensimを希望する場合は、 この回答 および Gensim Word2Vecドキュメント に基づいて構築することができます。

from gensim.models import Word2Vec

# Take some sample sentences
tokenized_sentences = [["here","is","one"],["and","here","is","another"]]

# Initialise model, for more information, please check the Gensim Word2vec documentation
model = Word2Vec(tokenized_sentences, size=100, window=2, min_count=0)

# Get a list of words in the vocabulary
words = model.wv.vocab.keys()

# Make a dictionary
we_dict = {Word:model.wv[Word] for Word in words}
0
Mitali Cyrus