2016-08-04 6 views
0

Gensim Doc2vecモデルを使用して文書ベクトルを訓練します。 私は「良い」という言葉の表現を印刷しましたが、私はすべての時代を見つけました。私はid '3'の文書の表現を印刷していましたが、すべての時代が異なります!Doc2vec Gensim:各エポック中に単語埋め込みが更新されない

私のコードは以下の通りです。何が起こっているのかわかりません。

model = gensim.models.Doc2Vec(dm = 0, alpha=0.1, size= 20, min_alpha=0.025) 

model.build_vocab(documents) 

print ('Building model....',(time4-time3)) 
for epoch in range(10): 
    model.train(documents) 

    print('Now training epoch %s' % epoch) 
    print(model['good']) 
    print(model.docvecs[str(3)]) 

答えて

1

これは、更新ごとに表現を確認する正しい方法ではありません。 Gensim doc2vecは、次のループで何が起こっているのか、そのdefault値は基本的に5

である、(docsを参照)エポックの数はどうあるべきかを定義するためにiterパラメータを使用しています。

for epoch in range(10): 
    model.train(documents) 

あなたが訓練していますあなたのモデル10回、ゼロから5エポック

Gensimは、現在のところ、すべてのエポック後に表現をチェックすることはできません。それは次のようになり行う一つの、粗方法:最初の単語ベクトルのためのランダムな値を使用して、モデルを訓練するために開始gensimすべてのエポックで

0

。 doc2vec(またはword2vec)では、単語(exp。 'good')のすべての最終単語ベクトルは同じではありませんが、類似単語は類似した単語ベクトルです。例えば1つのエポックで:

model['good'] = [0.22 0.52 0.36] 
model['better'] = [0.24 0.50 0.39] 

、別のエポック中:

model['good'] = [0.58 0.96 0.24] 
model['better'] = [0.59 0.90 0.21] 
+1

私はあなたが暗示しているものを得られませんでした。 (1)各エポックにおいて、単語ベクトルはランダムに開始するのではなく、単語ベクトルの前の値から開始する。第1のエポックにおいてのみ、ワードベクトルはランダムから始まる。 – kampta

+0

"train"関数を呼び出すたびに、単語ベクトルは単語ベクトルのランダム値を取得します。言い換えれば、 "train"関数は、最初からトレーニングモデルを開始し、単語ベクトルはランダムな値を得る。 –

+0

それは正しいです。 'train'関数は最初からトレーニングモデルを開始します。 'train'関数の' seed'パラメータのデフォルト値は0に固定されているので、トレーニングを開始するたびに単語ベクトルは同じランダム値に初期化され、 'n epochs 'の後には同じベクトルが得られます実験は再現可能です。 – kampta

2

純粋なPV-DBOWモデル(dm=0は)全くワードベクターの使用やトレーニングを必要としません。 (Word2Vecの共有コードのアーティファクトで、割り当てられてランダムに初期化されます)

インターリーブされた方法でワードベクトルを訓練するには、デフォルト以外dbow_words=1パラメータ。 (あるいは、PV-DMモードに切り替え、dm=1、ワードベクトルが本質的に関与します)

関連する問題