web-dev-qa-db-ja.com

gensim Word2vecモデルを更新する

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"
_

これは、「冷たい」という言葉が、私がそのことを訓練した語彙の一部ではないことを示しています(私は正しいです)?

質問は次のとおりです:モデルを更新して、指定された新しい文のすべての可能な類似性を提供する方法は?

29
user2480542
  1. train()は、one文ではなく、入力時にsequenceの文が必要です。

  2. train()のみ 重みの更新 既存の語彙に基づく既存の特徴ベクトルの場合。 train()を使用して、新しい語彙(=新しい特徴ベクトル)を追加することはできません。

23
Radim

gensim 0.13. 現在、gensimを使用してWord2Vecのオンライントレーニングを行うことができます。

model.build_vocab(new_sentences, update=True)
model.train(new_sentences)
15
ksindi

モデルがCツールload_Word2vec_formatを使用して生成された場合、そのモデルを更新することはできません。オンライントレーニングのWord2vecチュートリアルセクションを参照してください Word2Vecチュートリアル

Cツールload_Word2vec_format()で生成されたモデルでトレーニングを再開することはできません。クエリ/類似性には引き続き使用できますが、トレーニングに不可欠な情報(語彙ツリー)はそこにありません。

8
fjxx

問題は、新しい文章でWord2vecモデルを再トレーニングできないことです。 doc2vecのみが許可します。 doc2vecモデルを試してください。

2

まず第一に、事前学習済みのモデルに新しい単語を追加することはできません。

ただし、2014年に公開された「新しい」doc2vecモデルはすべての要件を満たしています。 Wordベクトルのセットを取得してからそれらを結合する代わりに、ドキュメントベクトルのトレーニングに使用できます。最良の部分は、doc2vecがトレーニング後に見えない文を推測できることです。モデルはまだ変更できませんが、私の実験に基づいてかなり良い推論結果を得ることができます。

2
fyraimar