Есть ли способ загрузить предварительно обученные векторы слов перед тренировкой модели doc2vec? - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь построить модель doc2vec с более или менее 10 тыс. Предложений, после чего я буду использовать модель, чтобы найти наиболее похожее предложение в модели некоторых новых предложений.

Я обучил модель gensim doc2vec, используя корпус (10k предложений), который у меня есть.Эта модель может в некоторой степени сказать мне, если новое предложение похоже на некоторые из предложений в корпусе.Но есть проблема: может случиться так, что в новых предложениях есть слова, которых нет в корпусе, а это означает, что в них нет встраивания слов.Если это произойдет, результат прогноза не будет хорошим.Насколько я знаю, обученная модель doc2vec имеет матрицу векторов doc, а также матрицу векторов слов.Итак, я подумал о том, чтобы загрузить набор предварительно обученных векторов слов, который содержит большое количество слов, а затем обучить модель получению векторов документов.Имеет ли это смысл?Это возможно с Gensim?Или есть другой способ сделать это?

1 Ответ

0 голосов
/ 12 июля 2019

В отличие от того, что вы можете догадаться, типичная Doc2Vec тренировка не сначала обучает словосочетания, а затем составляет векторы документов, используя эти словосочетания.Скорее, в режимах, в которых используются векторы слов, векторы слов обучались одновременно и чередовались вместе с векторами документов, причем обе изменялись вместе.И в одном быстром и хорошо работающем режиме, PV-DBOW (dm=0 в gensim), векторы слов не обучаются или не используются вообще.

Таким образом, gensim Doc2Vec не поддерживает предварительную загрузку состояния из другого места, и даже если бы он это сделал, он, вероятно, не обеспечил бы ожидаемого эффекта.(Вы можете копаться в исходном коде и, возможно, форсировать его, выполнив несколько шагов инициализации самостоятельно. Но тогда, если слова были в предварительно загруженном наборе, но не в ваших обучающих данных, обучая остальныеиз активных слов будет корректировать всю модель в направлении, несовместимом с импортированными, но необученными «иностранными» словами. Это только чередованное, совместное обучение перетягиванию каната состояния модели, которое делает различные векторы значимыми по отношению кдруг друга.)

Самая простая и надежная стратегия - попытаться расширить свой учебный корпус, найдя больше документов в аналогичном / совместимом домене, чтобы включить несколько различных примеров любых слов, с которыми вы можете столкнуться позже.(Если вы подумали, что некоторые другие словарные векторы были достаточно подходящими для вашей области, возможно, тексты, которые использовались для обучения этих словесных векторов, могут быть смешаны с вашим учебным корпусом. Это разумный способ поместить данные слова / документа из этогодругой источник в вашей модели на равных.)

И, по мере поступления новых документов, вы также можете время от времени переучивать модель с нуля, с теперь расширенным корпусом, позволяя новым документам вносить одинаковый вклад в модель.словарный запас и моделирование силы.

...