Обучение Doc2ve c с новыми данными - PullRequest
0 голосов
/ 09 июля 2020

У меня есть модель doc2ve c, обученная на документах с метками. Я пытаюсь продолжить обучение своей модели с помощью model.train (). Новые данные также имеют новые метки, но, когда я тренирую их на большем количестве документов, новые метки не записываются ... Кто-нибудь знает, в чем может быть моя проблема?

1 Ответ

0 голосов
/ 09 июля 2020

Gensim's Doc2Vec изучает только свой набор tags, в то же время он изучает основной словарь уникальных слов - во время первого вызова .build_vocab() в исходном корпусе.

Когда вы тренируетесь с дополнительными примерами, которые содержат слова или теги, которые еще не известны модели, эти слова или теги просто игнорируются.

(опция .build_vocab(…, update=True), доступная на Word2Vec для расширения словарного запаса никогда не применялся полностью к Doc2Vec, ни в отношении tags, ни в отношении давней ошибки сбоя . Поэтому он не поддерживается в Doc2Vec.)

Обратите внимание, что если ваша цель - создать векторы документов, которые помогают в некоторых задачах последующей классификации, вы можете не захотеть указывать свои известные метки как tags или, по крайней мере, не как тег документа only .

tags, которые вы передаете в Doc2Vec, - это единицы, для которых он изучает векторы. Если у вас есть миллион текстовых примеров, но только 5 разных меток, если вы вводите эти миллионы примеров в обучение, каждый из которых имеет только метку в качестве тега, модель изучает только 5 do c -векторов. По сути, это похоже на то, как будто вы тренируетесь только на 5 мега-документах (передаваемых по частям) - и, таким образом, `` суммируете '' каждую метку до одной точки в векторном пространстве, когда было бы гораздо полезнее подумать о метка, покрывающая «облако точек» неправильной формы.

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

И в этом случае поступление документов с новыми этикетками может не потребовать полной переподготовки Doc2Vec. Вместо этого, если новые документы по-прежнему получают полезные векторы из логического вывода по старой модели Doc2Vec, эти векторы per-do c могут достаточно отражать документы новой метки, чтобы последующие классификаторы могли научиться их распознавать.

Однако в конечном итоге, если вы приобретете гораздо больше обучающих данных, отражающих все новые словари и смыслы слов, самый безопасный подход - переобучить модель Doc2Vec с нуля, используя все данные. Простое инкрементное обучение, даже если оно имеет официальную поддержку, может привести к тому, что те слова / теги, которые появляются в новых данных, будут произвольно несопоставимы со словами / тегами, которые были обучены только в исходном наборе данных. Это совместное обучение с чередованием, наряду с всеми другими примерами в равной степени, которое подталкивает и вытягивает все векторы в модели в полезные относительные расположения.

...