Я тренирую 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
таким образом, но это почти тот же результат. - Мои данные не относятся к естественному языку, имейте это в виду.