web-dev-qa-db-ja.com

Word2vecでトレーニングされたモデルにキーが存在するかどうかを確認する方法

Gensimでドキュメントのコーパスを使用してWord2vecモデルをトレーニングしました。モデルがトレーニングされたら、次のコードを書いて、Wordの生の特徴ベクトル「ビュー」を取得します。

myModel["view"]

ただし、WordのKeyErrorが表示されます。これは、おそらくWord2vecによってインデックス付けされたキーのリストにキーとして存在しないためです。生の特徴ベクトルを取得する前に、インデックスにキーが存在するかどうかを確認するにはどうすればよいですか?

28
London guy

モデルをベクトルに変換する

Word_vectors = model.wv

その後、我々は使用することができます

if 'Word' in Word_vectors.vocab
19
rakaT

Word2Vecには「vocab」メンバーも用意されており、直接アクセスできます。

Pythonisticアプローチの使用:

if Word in w2v_model.vocab:
    # Do something

[〜#〜] edit [〜#〜] gensimリリース2.0以降、Word2VecのAPIが変更されました。語彙にアクセスするには、これを使用する必要があります。

if Word in w2v_model.wv.vocab:
    # Do something

EDIT 2属性「wv」は廃止予定であり、gensim 4.0.0で完全に削除されます。これで、OPによる元の答えに戻ります。

if Word in w2v_model.vocab:
    # Do something
32
Matt Fortier

ここで自分の質問に答えます。

Word2Vecには、対応するWordがインデックス付けされているかどうかに基づいてTrueまたはFalseを返すcontains( 'view')という名前のメソッドが用意されています。

2
London guy

私は一般的にフィルターを使用します:

for doc in labeled_corpus:
    words = filter(lambda x: x in model.vocab, doc.words)

これは、目に見えない単語でKeyErrorを通過するための簡単な方法の1つです。

1
Prakhar Agarwal

この投稿が遅れていることは知っていますが、この問題をうまく処理できるコードを以下に示します。私は自分のコードでそれを使用しており、魅力のように機能します:)

   size = 300 #Word vector size
   Word = 'food' #Word token

   try:
        wordVector = model[Word].reshape((1, size))
   except KeyError:
        print "not found! ",  Word

注:私はpython Word2vecモデル用のGensimライブラリを使用しています

0
Nomiluks