Я не понимаю, как векторы слов вообще участвуют в процессе обучения с doc2vec gensim в режиме DBOW (dm=0
). Я знаю, что по умолчанию он отключен с помощью dbow_words=0
. Но что произойдет, если мы установим dbow_words
на 1?
В моем понимании DBOW слова контекста предсказываются непосредственно из векторов абзаца. Таким образом, единственными параметрами модели являются N
p
-мерные векторы абзаца плюс параметры классификатора.
Но несколько источников намекают, что в режиме DBOW возможно совместное обучение векторов слов и документов. Например:
Итак, как это делается? Любые разъяснения будут высоко оценены!
Примечание: для DM векторы абзацев усредняются/объединяются с векторами слов для предсказания целевых слов. В этом случае понятно, что векторы слов обучаются одновременно с векторами документов. И есть N*p + M*q + classifier
параметры (где M
размер словарного запаса и q
размер пространства вектора слова).
Если вы установите dbow_words=1
, то обучение вектору слов с пропуском грамма будет добавлено к циклу обучения, чередующемуся с обычным обучением PV-DBOW.
Таким образом, для заданного целевого слова в тексте сначала используется doc-vector-кандидат (отдельно), чтобы попытаться предсказать это слово, а затем в модель и doc-vector вносятся корректировки обратного распространения. Затем каждый из окружающих слов используется по одному в стиле пропуска грамм, чтобы попытаться предсказать одно и то же целевое слово с последующими корректировками.
Затем следующее целевое слово в тексте получает ту же обработку PV-DBOW плюс пропуск грамматики, и так далее, и так далее.
Как некоторые логические следствия этого:
тренировка занимает больше времени, чем обычный PV-DBOW - примерно в множитель, равный параметру window
Word-векторы в целом получают больше общего внимания при обучении, чем doc-векторы, опять же с коэффициентом, равным параметру window
.
развивая (1): я, вероятно, что-то неправильно понял, но разве ваше объяснение того, что векторы слов и документов обучаются одновременно, но без взаимодействия, не противоречит результатам, представленным в этом бумага (раздел 5), что предварительное обучение векторов слов улучшает качество dbow doc векторы? Если между двумя задачами нет утечки, это ничего не должно изменить, не так ли?
В случае dbow_words=0
нет поддерживаемого способа отбросить выделенные необученные векторы слов. Если вы закончили как обучение, так и вывод (что также является своего рода обучением), и Только необходимо получить доступ к обученным doc-векторам, вы, возможно, могли бы del
связанное d2v_model.wv
свойство, но это мощь предотвращает другие операции save()
/load()
от работы, я не уверен.
В режиме dbow_words=1
слова-векторы обучаются с некоторыми парами (context_word-> target_word), затем doc-векторы обучаются с парами (doc_tag-> target_word), затем это повторяется в чередующемся режиме. Таким образом, ни один отдельный пример микрообучения не включает и то, и другое. Но то же самое происходит и со многими словами при обычном обучении слов, но слова все равно оказываются в полезных относительных позициях. Это потому, что все обучающие примеры используют один и тот же скрытый->выходной слой нейронной сети. Таким образом, каждый из контрастирующих примеров изменяет некоторые общие параметры, а косвенно влияет друг на друга.
Будет ли добавление dbow_words
полезным или вредным, будет зависеть от ваших данных, целей и метапараметров. Поможет ли заполнение модели Doc2Vec
предварительно обученными векторами слов — вариант, для которого нет официальной поддержки gensim
— будет зависеть от того, насколько хорошо этот предварительно обученный словарь подходит вашим документам и режиму модели. А в режиме dbow_words=0
предварительно загруженные слова-векторы не могу имеют какое-либо прямое или косвенное влияние на док-векторы - в той мере, в какой это предполагает статья, она запутана. (Я также отмечаю это по адресу: groups.google.com/d/msg/gensim/4-pd0iA_xW4/UzpuvBOPAwAJ )
Вы можете найти больше моих опасений по поводу конкретных утверждений/тестов/пробелов в этом документе в некоторых обсуждениях в выпуске проекта на github — начиная с github.com/RaRe-Technologies/gensim/issues/… — и в других ссылках на группы обсуждения из этого выпуска.
Большое спасибо за то, что уделили время таким подробным объяснениям и полезным ссылкам, это очень ценно. Действительно, вы правы насчет косвенного влияния. Я не учел тот факт, что матрица проекции-> вывода является общей как для векторов слов, так и для векторов документов. Спасибо еще раз!
большое спасибо за быстрый и полезный ответ! (1) Я понимаю, что в этой настройке векторы слов и документов действительно обучаются одновременно, но они не взаимодействуют. Следовательно, с точки зрения качества, вероятно, нет улучшения по сравнению с обучением векторов слов и документов по отдельности? (2) Я пришел к выводу, что когда
dm=0
иdbow_words=0
, векторы слов все еще создаются, но никогда не используются/обучаются. Вы случайно не знаете, как избавиться от них, чтобы уменьшить размер модели на диске и в оперативной памяти?