Обновите модель gensim word2vec
У меня есть модель word2vec в gensim, подготовленная над 98892 документами. Для любого данного предложения, отсутствующего в массиве предложений (т.е. Набора, над которым я обучал модель), мне нужно обновить модель этим предложением, чтобы запрос в следующий раз выдавал некоторые результаты. Я делаю это так:
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
Теперь, когда я запрашиваю с похожим new_sentence для большинства положительных элементов (как model.most_similar(positive=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"
Что означает, что слово "холод" не является частью словаря, над которым я тренировал предмет (я прав)?
Итак, вопрос: как обновить модель, чтобы она выдавала все возможные сходства для данного нового предложения?
Ответы
Ответ 1
-
train()
ожидает последовательность предложений при вводе, а не одно предложение.
-
train()
только обновляет веса для существующих векторов функций на основе существующего словаря. Вы не можете добавить новый словарь (= новые векторы функций) с помощью train()
.
Ответ 2
От gensim 0.13.3 можно сделать онлайн-обучение Word2Vec с помощью gensim.
model.build_vocab(new_sentences, update=True)
model.train(new_sentences)
Ответ 3
Если ваша модель была сгенерирована с помощью инструмента C load_word2vec_format, обновление этой модели невозможно. См. Раздел учебного раздела word2vec по онлайн-обучению Учебное пособие по Word2Vec:
Обратите внимание, что его невозможно возобновить с помощью сгенерированных моделей инструментом C, load_word2vec_format(). Вы можете использовать их для опрос/сходство, но важная для обучения информация (vocab дерево) отсутствует.
Ответ 4
Прежде всего, вы не можете добавлять новые слова к предварительно подготовленной модели.
Тем не менее, существует "новая" модель doc2vec, опубликованная в 2014 году, которая отвечает всем вашим требованиям. Вы можете использовать его для обучения вектору вектора вместо того, чтобы получить набор векторных слов, а затем объединить их.
Лучшая часть - doc2vec может вывести невидимые предложения после обучения. Хотя модель по-прежнему не может быть изменена, вы можете получить хороший результат вывода, основанный на моем эксперименте.
Ответ 5
Проблема в том, что вы не можете перепрограммировать модель word2vec с новыми предложениями. Это разрешает только doc2vec. Попробуйте модель doc2vec.
Ответ 6
Вы можете добавить в словарь модели и добавить встраивание, используя FastText.
from gensim.models import FastText
Здесь вы можете увидеть несколько примеров FastText. Здесь вы можете увидеть, как использовать FastText для оценки случаев отсутствия словарного запаса (OOV).