Подтвердить что ты не робот

Обновите модель 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"

Что означает, что слово "холод" не является частью словаря, над которым я тренировал предмет (я прав)?

Итак, вопрос: как обновить модель, чтобы она выдавала все возможные сходства для данного нового предложения?

4b9b3361

Ответ 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).