web-dev-qa-db-fra.com

Mettre à jour le 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'est-à-dire l'ensemble sur lequel j'ai formé le modèle), je dois mettre à jour le modèle avec cette phrase afin que l'interroger la prochaine fois donne des résultats. Je le fais comme ça:

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

et son impression sous forme de 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, lorsque je recherche avec new_sentence similaire pour la plupart des positifs (comme model.most_similar(positive=new_sentence)), cela donne une 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 j'ai entraîné la chose (ai-je raison)?

La question est donc la suivante: comment mettre à jour le modèle afin qu'il donne toutes les similitudes possibles pour la nouvelle phrase donnée?

29
user2480542
  1. train() attend une séquence de phrases en entrée, pas une phrase.

  2. train() uniquement met à jour les poids pour les vecteurs d'entités existants basés sur le vocabulaire existant. Vous ne pouvez pas ajouter de nouveau vocabulaire (= nouveaux vecteurs d'entités) à l'aide de train().

23
Radim

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

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

Si votre modèle a été généré à l'aide de l'outil C load_Word2vec_format, il n'est pas possible de mettre à jour ce modèle. Voir la section du didacticiel Word2vec sur la formation en ligne Word2Vec Tutorial :

Notez qu'il n'est pas possible de reprendre la formation avec des modèles générés par l'outil C, load_Word2vec_format (). Vous pouvez toujours les utiliser pour les requêtes/similitudes, mais les informations vitales pour la formation (l'arbre de vocabulaire) y manquent.

8
fjxx

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
Nurul Akter Towhid

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

Cependant, il existe 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 vecteurs Word, puis les combiner. La meilleure partie est que doc2vec peut déduire des phrases invisibles après la formation. Bien que le modèle soit toujours immuable, vous pouvez obtenir un assez bon résultat d'inférence basé sur mon expérience.

2
fyraimar