train medium gensim word2vec

gensim - medium - word2vec doc2vec



Actualizar el modelo de gensim word2vec (5)

Tengo un modelo word2vec en gensim entrenado sobre 98892 documentos. Para cualquier oración que no esté presente en la matriz de oraciones (es decir, el conjunto sobre el que entrené el modelo), necesito actualizar el modelo con esa oración para que al consultarla la próxima vez se obtengan algunos resultados. Lo estoy haciendo así:

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

y esta imprimiendo esto como logs:

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

Ahora, cuando pregunto con new_sentence similar para la mayoría de los aspectos positivos (como model.most_similar(positive=new_sentence) ) se model.most_similar(positive=new_sentence) un error:

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"

¿Lo que indica que la palabra ''frío'' no es parte del vocabulario sobre el que entrené la cosa (tengo razón)?

Entonces, la pregunta es: ¿Cómo actualizar el modelo para que ofrezca todas las similitudes posibles para la nueva oración dada?


  1. train() espera una secuencia de oraciones en la entrada, no una oración.

  2. train() solo actualiza los pesos de los vectores de características existentes según el vocabulario existente. No puede agregar vocabulario nuevo (= nuevos vectores de características) usando train() .


A partir de gensim 0.13.3 es posible realizar entrenamiento en línea de Word2Vec con gensim.

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


El problema es que no puedes volver a entrenar el modelo de word2vec con nuevas oraciones. Solo doc2vec lo permite. Prueba el modelo doc2vec.


En primer lugar, no puede agregar nuevas palabras a un modelo pre-entrenado.

Sin embargo, hay un "nuevo" modelo doc2vec publicado en 2014 que cumple con todos sus requisitos. Puede usarlo para entrenar un vector de documento en lugar de obtener un conjunto de vectores de palabras y luego combinarlos. La mejor parte es que doc2vec puede inferir oraciones invisibles después del entrenamiento. Aunque el modelo aún no se puede cambiar, puede obtener un buen resultado de inferencia basado en mi experimento.


Si su modelo se generó utilizando la herramienta C load_word2vec_format, no es posible actualizar ese modelo. Consulte la sección de tutoriales de word2vec en Tutorial de Word2Vec de capacitación en línea:

Tenga en cuenta que no es posible reanudar el entrenamiento con modelos generados por la herramienta C, load_word2vec_format (). Puede seguir utilizándolos para consultas / similitudes, pero falta información vital para el entrenamiento (el árbol de vocabulario).