Mise à jour du modèle gensim word2vec

j'ai un modèle word2vec dans gensim formé sur 98892 documents. Pour toute phrase donnée qui n'est pas présente dans le tableau de phrases (c.-à-d. l'ensemble sur lequel j'ai formé le modèle), je dois mettre à jour le modèle avec cette phrase de sorte que la question la prochaine fois donne des résultats. Je fais comme ceci:

new_sentence = ['moscow', 'weather', 'cold']
model.train(new_sentence)

et son impression de ce que les journaux:

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

maintenant, quand je demande avec new_sentence similaire pour la plupart des positifs (comme model.most_similar(positive=new_sentence)) il donne erreur:

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"

ce qui indique que le mot "froid" ne fait pas partie du vocabulaire sur lequel je me suis entraîné (ai-je raison)?

Donc la question est: Comment mettre à jour le modèle de sorte qu'il donne toutes les similitudes possibles pour la nouvelle phrase?

26
demandé sur user2480542 2014-03-02 02:08:11

5 réponses

  1. train() attend un ordre de phrases à l'Entrée, pas phrase.

  2. train()mises à jour des poids pour les vecteurs de fonctionnalités existants basés sur le vocabulaire existant. Vous ne pouvez pas ajouter de nouveau vocabulaire (=nouveaux vecteurs de fonctionnalités) en utilisant train().

22
répondu Radim 2014-05-31 10:23:59

gensim 0.13.3 il est possible de faire de la formation en ligne de Word2Vec avec gensim.

model.build_vocab(new_sentences, update=True)
model.train(new_sentences)
11
répondu ksindi 2016-12-02 16:07:33

si votre modèle a été généré en utilisant l'outil c load_word2vec_format, il n'est pas possible de mettre à jour ce modèle. Voir la section tutoriel word2vec sur la formation en ligne Tutorial Word2Vec:

Notez qu'il n'est pas possible de reprendre l'entraînement avec les modèles générés par l'outil C, load_word2vec_format (). Vous pouvez toujours les utiliser pour questionnement / similitude, mais information essentielle pour la formation (le vocab de l'arbre) est manquante.

8
répondu fjxx 2015-03-16 13:18:34

tout d'abord, vous ne pouvez pas ajouter de nouveaux mots à un modèle pré-formé.

cependant, il y a un" nouveau " modèle doc2vec publié en 2014 qui répond à toutes vos exigences. Vous pouvez l'utiliser pour former un vecteur de document au lieu d'obtenir un ensemble de vecteur de mot puis les combiner. La meilleure partie est doc2vec peut déduire des phrases invisibles après la formation. Bien que le modèle soit toujours immuable, vous pouvez obtenir une assez bonne inférence résultat basé sur mon expérience.

2
répondu fyraimar 2016-08-19 23:52:10

le problème est que vous ne pouvez pas recycler le modèle word2vec avec de nouvelles phrases. Seul doc2vec le permet. Essayez le modèle doc2vec.

2
répondu Nurul Akter Towhid 2016-10-13 00:10:35