Gensimで98892を超えるドキュメントをトレーニングしたWord2vecモデルがあります。センテンス配列に存在しない特定のセンテンス(つまり、モデルをトレーニングしたセット)については、次回クエリを実行して結果が得られるように、そのセンテンスでモデルを更新する必要があります。私はこのようにやっています:
_new_sentence = ['moscow', 'weather', 'cold']
model.train(new_sentence)
_
これをログとして印刷する:
_2014-03-01 16:46:58,061 : INFO : training model with 1 workers on 98892 vocabulary and 100 features
2014-03-01 16:46:58,211 : INFO : reached the end of input; waiting to finish 1 outstanding jobs
2014-03-01 16:46:58,235 : INFO : training on 10 words took 0.1s, 174 words/s
_
今、私はほとんどの正の(model.most_similar(positive=new_sentence)
として)同様のnew_sentenceでクエリするとエラーを出します:
_Traceback (most recent call last):
File "<pyshell#220>", line 1, in <module>
model.most_similar(positive=['moscow', 'weather', 'cold'])
File "/Library/Python/2.7/site-packages/gensim/models/Word2vec.py", line 405, in most_similar
raise KeyError("Word '%s' not in vocabulary" % Word)
KeyError: "Word 'cold' not in vocabulary"
_
これは、「冷たい」という言葉が、私がそのことを訓練した語彙の一部ではないことを示しています(私は正しいです)?
質問は次のとおりです:モデルを更新して、指定された新しい文のすべての可能な類似性を提供する方法は?
train()
は、one文ではなく、入力時にsequenceの文が必要です。
train()
のみ 重みの更新 既存の語彙に基づく既存の特徴ベクトルの場合。 train()
を使用して、新しい語彙(=新しい特徴ベクトル)を追加することはできません。
gensim 0.13. 現在、gensimを使用してWord2Vecのオンライントレーニングを行うことができます。
model.build_vocab(new_sentences, update=True)
model.train(new_sentences)
モデルがCツールload_Word2vec_formatを使用して生成された場合、そのモデルを更新することはできません。オンライントレーニングのWord2vecチュートリアルセクションを参照してください Word2Vecチュートリアル :
Cツールload_Word2vec_format()で生成されたモデルでトレーニングを再開することはできません。クエリ/類似性には引き続き使用できますが、トレーニングに不可欠な情報(語彙ツリー)はそこにありません。
問題は、新しい文章でWord2vecモデルを再トレーニングできないことです。 doc2vecのみが許可します。 doc2vecモデルを試してください。
まず第一に、事前学習済みのモデルに新しい単語を追加することはできません。
ただし、2014年に公開された「新しい」doc2vecモデルはすべての要件を満たしています。 Wordベクトルのセットを取得してからそれらを結合する代わりに、ドキュメントベクトルのトレーニングに使用できます。最良の部分は、doc2vecがトレーニング後に見えない文を推測できることです。モデルはまだ変更できませんが、私の実験に基づいてかなり良い推論結果を得ることができます。