Как векторы слов обучаются совместно с векторами абзацев в doc2vec DBOW?

Я не понимаю, как векторы слов вообще участвуют в процессе обучения с помощью gensim's doc2vec в режиме DBOW (dm=0). Я знаю, что по умолчанию он отключен с помощью dbow_words=0. Но что произойдет, если мы установим dbow_words в 1?

В моем понимании DBOW контекстные слова предсказываются непосредственно из векторов абзацев. Таким образом, единственными параметрами модели являются N p-мерные векторы абзацев плюс параметры классификатора.

Но несколько источников намекают, что в режиме DBOW можно совместно обучать векторы слов и документов. Например:

Итак, как это сделать? Будем признательны за любые разъяснения!

Примечание: для DM векторы абзацев усредняются / объединяются с векторами слов для предсказания целевых слов. В этом случае ясно, что векторы слов обучаются одновременно с векторами документов. И есть N*p + M*q + classifier параметров (где M - размер словаря, а q размер векторного пространства слов).


person Antoine    schedule 09.04.2019    source источник


Ответы (1)


Если вы устанавливаете dbow_words=1, то тренировка слова-вектора с пропуском грамм добавляется в цикл обучения, чередуясь с обычным обучением PV-DBOW.

Итак, для заданного целевого слова в тексте, 1-й документ-кандидат используется (один), чтобы попытаться предсказать это слово, с корректировками обратного распространения, которые затем происходят в модели и векторе документов. Затем каждое из окружающих слов используется, по одному в режиме пропуска грамматики, чтобы попытаться предсказать то же самое целевое слово - с последующими корректировками.

Затем следующее целевое слово в тексте получает ту же обработку PV-DBOW плюс пропуск граммы и так далее, и так далее.

В качестве некоторых логических следствий из этого:

  • обучение занимает больше времени, чем обычный PV-DBOW - примерно в раз, равном параметру window

  • word-векторы в итоге получают больше общего обучающего внимания, чем doc-векторы, опять же с коэффициентом, равным параметру window

person gojomo    schedule 09.04.2019
comment
Большое спасибо за быстрый и полезный ответ! (1) Я понимаю, что в этой настройке векторы word и doc действительно обучаются одновременно, но они не взаимодействуют. Следовательно, с точки зрения качества, вероятно, нет улучшений по сравнению с обучающими векторами word и doc по отдельности? (2) Я прихожу к выводу, что когда dm=0 и dbow_words=0, векторы слов все еще создаются, но никогда не используются / не обучаются. Вы случайно не знаете, как от них избавиться, чтобы уменьшить размер модели на диске и в оперативной памяти? - person Antoine; 10.04.2019
comment
уточняя (1): Я, вероятно, что-то неправильно понял, но разве ваше объяснение, что векторы word и doc обучаются одновременно, но без взаимодействия, не противоречит результатам, представленным в этом paper (раздел 5), что предварительное обучение векторов слов улучшает качество векторов dbow doc? Если между двумя задачами нет утечки, это ничего не должно изменить, не так ли? - person Antoine; 10.04.2019
comment
Не существует поддерживаемого способа отбросить выделенные необученные векторы слов в случае dbow_words=0. Если вы закончили как обучение, так и логический вывод (который также является своего рода обучением), и только требуется доступ к обученным векторам документации, вы могли бы del связанное свойство d2v_model.wv, но это может помешать работе других _4 _ / _ 5_ операций, я не уверен. - person gojomo; 10.04.2019
comment
В режиме dbow_words=1 слово-векторы обучаются с помощью некоторых пар (context_word- ›target_word), затем doc-векторы обучаются парами (doc_tag-› target_word)), затем это повторяется с чередованием. Таким образом, никакие отдельные примеры микротренировок не включают и то, и другое. Но то же самое и со многими словами при обычном обучении словам - но слова все равно оказываются в удобных относительных положениях. Это потому, что все обучающие примеры используют один и тот же скрытый ›выходной слой нейронной сети. Таким образом, каждый из контрастирующих примеров изменяет некоторые общие параметры и косвенно влияет друг на друга. - person gojomo; 10.04.2019
comment
Помогает ли добавление dbow_words или мешает, будет зависеть от ваших данных, целей и мета-параметров. Помогает ли заполнение Doc2Vec модели предварительно обученными векторами слов - вариант, для которого нет официальной gensim поддержки - будет зависеть от того, насколько хорошо этот предварительно обученный словарь соответствует вашим документам, и от режима модели. А в режиме dbow_words=0 предварительно загруженные векторы слов не могут иметь никакого эффекта, прямого или косвенного, на векторы документов - в той степени, в которой это предполагается в статье, это сбивает с толку. (Я также отмечаю это на странице groups.google.com/d/ msg / gensim / 4-pd0iA_xW4 / UzpuvBOPAwAJ) - person gojomo; 10.04.2019
comment
Вы можете найти больше моих опасений по поводу конкретных утверждений / тестов / пробелов в этом документе в некоторых обсуждениях по проблеме github проекта - начиная с github.com/RaRe-Technologies/gensim/issues/ - и в других ссылках на группы обсуждения по этому вопросу. - person gojomo; 10.04.2019
comment
Большое вам спасибо за то, что вы предоставили такие подробные объяснения и полезные ссылки, мы очень признательны. Действительно, насчет косвенного влияния вы правы. Я не принимал во внимание тот факт, что матрица вывода проекции используется как для векторов word, так и для doc-векторов. Спасибо еще раз! - person Antoine; 11.04.2019