Doc2Vec Хуже среднего или суммы векторов Word2Vec

Я тренирую Word2Vec модель, например:

model = Word2Vec(documents, size=200, window=5, min_count=0, workers=4, iter=5, sg=1)

и Doc2Vec модель вроде:

doc2vec_model = Doc2Vec(size=200, window=5, min_count=0, iter=5, workers=4, dm=1)
doc2vec_model.build_vocab(doc2vec_tagged_documents)
doc2vec_model.train(doc2vec_tagged_documents, total_examples=doc2vec_model.corpus_count, epochs=doc2vec_model.iter)

с теми же данными и сопоставимыми параметрами.

После этого я использую эти модели для своей задачи классификации. И я обнаружил, что простое усреднение или суммирование word2vec вложений документа работает значительно лучше, чем использование doc2vec векторов. Я также пробовал с гораздо большим количеством doc2vec итераций (25, 80 и 150 - без разницы).

Есть какие-нибудь советы или идеи, почему и как улучшить doc2vec результаты?

Обновление. Вот как создается doc2vec_tagged_documents:

doc2vec_tagged_documents = list()
counter = 0
for document in documents:
    doc2vec_tagged_documents.append(TaggedDocument(document, [counter]))
    counter += 1

Еще несколько фактов о моих данных:

  • Мои данные по обучению содержат 4000 документов
  • в среднем 900 слов.
  • Мой словарный запас составляет около 1000 слов.
  • Мои данные для задачи классификации в среднем намного меньше (в среднем 12 слов), но я также пытался разбить обучающие данные на строки и обучить модель doc2vec таким образом, но это почти тот же результат.
  • Мои данные не относятся к естественному языку, имейте это в виду.

person ScientiaEtVeritas    schedule 21.07.2017    source источник


Ответы (1)


Суммирование / усреднение векторов word2vec часто бывает неплохим!

Более типично использовать 10 или 20 итераций с Doc2Vec, а не 5 по умолчанию, унаследованных от Word2Vec. (Я вижу, что вы это пробовали.)

Если вас больше всего интересуют doc-векторы, а не векторы-слова, которые совместно обучаются в некоторых режимах Doc2Vec, обязательно попробуйте также режим PV-DBOW (dm=0). Он будет тренироваться быстрее и часто показывает лучшие результаты.

Если ваш корпус очень мал или документы очень короткие, может быть трудно для doc-векторов стать общими значимыми. (В некоторых случаях может помочь уменьшение вектора size.) Но особенно, если window составляет большую часть среднего размера документа, то, что изучается с помощью слов-векторов, и что изучается с помощью векторов документов, будет очень и очень похоже. А поскольку слова могут быть обучены больше раз в более разнообразных контекстах, они могут иметь более обобщенное значение - если у вас нет больших коллекций более длинных документов.

Другие вещи, которые иногда помогают улучшить векторы Doc2Vec для целей классификации:

  • повторный вывод всех векторов документов в конце обучения, возможно, даже с использованием параметров, отличных от infer_vector() значений по умолчанию, таких как infer_vector(tokens, steps=50, alpha=0.025) - хотя и довольно медленно, это означает, что все документы получают векторы из одного и того же конечного состояния модели, а не из того, что осталось от массовая тренировка

  • где классификационные метки известны, добавляя их как обученные теги документов, используя возможность TaggedDocument tags быть списком тегов

  • редкие слова по сути являются просто помехой для Word2Vec или Doc2Vec, поэтому часто помогает min_count выше 1, возможно, значительно выше. (Смешанные одноэлементные слова могут быть особенно опасны для отдельных doc-ID doc-векторов, которые также по своему замыслу являются одиночными. Процесс обучения также конкурирует с doc-vector, пытаясь сделать эти отдельные слова-векторы предсказывающими их окрестности одного документа ... когда на самом деле для ваших целей вы просто хотите, чтобы doc-vector был наиболее наглядным. Итак, это предлагает как попробовать PV-DBOW, так и увеличить min_count.)

Надеюсь это поможет.

person gojomo    schedule 21.07.2017
comment
В чем преимущество doc2vec перед усреднением векторов слов? Учитывает ли doc2vec окружение слова в предложении при построении вектора из тестового предложения? Потому что это то место, где word2vec не помогает. - person John Strood; 04.10.2018
comment
Будет ли Doc2Vec работать лучше, чем просто усреднение векторов слов, может зависеть от вашего корпуса и целей. Он использует аналогичные входные данные (совпадение слов в контекстных окнах или документах) и прогнозирующую модель аналогичного размера (которая генерирует векторы слов или документов) и текстовые представления аналогичного размера (такое же количество измерений), поэтому оценки по оценкам, вероятно, будут в одном и том же поле. Делая каждый doc-вектор предсказывающим для всех слов в каждом тексте, doc-vector может моделировать текст лучше, чем средние значения, основанные на других вхождениях всех этих слов. - person gojomo; 05.10.2018
comment
Но имеет смысл попробовать / настроить и то, и другое, тем более что простое среднее (или какое-то средневзвешенное) может быть так легко вычислено в качестве базового. - person gojomo; 05.10.2018