4

次のような word2vec C コードから生成されたバイナリ ファイルから事前トレーニング済みのベクトルをロードしています。

model_1 = Word2Vec.load_word2vec_format('vectors.bin', binary=True)

これらのベクトルを使用して、 にまだベクトルが存在しない可能性のある単語を含む文のベクトル表現を生成していますvectors.bin。たとえば、vectors.bin「ヨーグルト」という単語に関連付けられたベクトルがない場合、試してみます

yogurt_vector = model_1['yogurt']

これは理にKeyError: 'yogurt'かなっています。私が望むのは、対応するベクトルを持たない文の単語を取り、それらの表現を に追加できるようにすることmodel_1です。この投稿から、C ベクトルのトレーニングを続けることができないことを認識しています。では、新しいモデルをトレーニングする方法はありますか?たとえばmodel_2、ベクトルのない単語に対して とマージmodel_2model_1ますか?

あるいは、少なくとも KeyError を回避できるように、実際に単語を取得しようとする前に、モデルに単語が含まれているかどうかをテストする方法はありますか?

4

4 に答える 4

5

キー エラーを回避するのは簡単です。

[x for x in 'this model hus everything'.split() if x in model_1.vocab]

より難しい問題は、新しい単語を既存のモデルにマージすることです。問題は、word2vec が 2 つの単語が隣り合っている可能性を計算することです。「yogurt」という単語が、モデルがトレーニングされた最初の本文にない場合、これらの単語のいずれにも隣接していないため、2 番目のモデルは最初のものとは相関しません。

モデルが保存されたとき (numpy.save を使用) に内部構造を見ることができます。ボキャブラリーを追加できるようにするコードを考え出すために、あなたと協力したいと思います。

于 2015-04-14T23:34:38.273 に答える
0

これは素晴らしい質問です。残念ながら、コードの内部を変更せずに語彙を追加する方法はありません。このディスカッションをチェックしてください: https://groups.google.com/forum/#!searchin/word2vec-toolkit/online $20word2vec/word2vec-toolkit/L9zoczopPUQ/_Zmy57TzxUQJ

ボキャブラリにない単語は無視して、ボキャブラリにある単語だけを使用することをお勧めします。Python を使用している場合は、次の方法でこれを行うことができます。

for word in wordlist:
    if word in model.vocab:
       present.append(word)
    else:
       # this is all the words that are absent for your model
       # might be useful for debugging. Ignore if you dont need this info
       absent.append(word)

<Do whatever you want with the words in the list 'present'>    
于 2015-05-12T21:45:38.227 に答える
0

存在しない/欠落している単語を処理するための可能な代替手段は、「文分類のための畳み込みニューラル ネットワーク」で YoonKim によって提案されています。

そのコード: https://github.com/yoonkim/CNN_sentence/blob/master/process_data.py#L88

def add_unknown_words(word_vecs, vocab, min_df=1, k=300):
    """
    For words that occur in at least min_df documents, create a separate word vector.    
    0.25 is chosen so the unknown vectors have (approximately) same variance as pre-trained ones
    """
    for word in vocab:
        if word not in word_vecs and vocab[word] >= min_df:
            word_vecs[word] = np.random.uniform(-0.25,0.25,k)  

しかし、これは bcoz で機能します。モデルを使用して find 対応するベクトルを見つけます。類似性などの機能が失われる

于 2016-01-04T09:08:09.510 に答える