Вам следует обратиться к doc2vec-
ноутбукам Jupyter, поставляемым с gensim, в каталоге docs/notebooks
(или для просмотра в сети ), чтобы найти больше примеров правильного использования. Просмотр существующих ответов SO по тегу doc2vec
(и, возможно, особенно мои ответы ) также может дать вам представление об общих ошибках.)
Чтобы настроить модель в неконтролируемой обстановке, вам, по сути, нужен определенный повторяющийся оценочный балл для конкретного домена. Это может потребовать прохождения всей вашей кластеризации и конечного приложения, а затем рассчитывать его успех на определенные результаты, которые он «должен» дать для созданного вручную подмножества ваших данных.
Для сравнения, если вы посмотрите на оригинальную статью «Вектор абзаца», она использовала существующие партии из 10 лучших фрагментов результатов поиска из существующей поисковой системы в качестве учебных документов, но затем оценила любую модель по тому, насколько хорошо она поставлена. фрагменты, которые были в общей топ-10 ближе друг к другу, чем к случайным третьим документам. В последующем документе «Внедрение документов с векторами абзацев» обучались статьям Википедии или документам Arxiv и настраивали их модель на основе того, насколько хорошо полученная модель помещает документы в те же предварительно отобранные категории, которые существуют в этих системах.
Вы можете использовать любые алгоритмы кластеризации для векторов для каждого документа. Вывод Doc2Vec
, как документ на вектор, может стать вводом нисходящих алгоритмов. (Я не уверен, что вы имеете в виду под «отдельными моделями классификации слов и документов». Вы описали только конечные потребности на уровне документов, вам могут вообще не понадобиться векторы слов ... хотя некоторые режимы Doc2Vec
создадут такие векторы.)
Вы используете метод infer_vector()
для создания векторов для новых документов после того, как модель была обучена и заморожена.
Глядя на специфику ваших данных / кода, некоторые наблюдения:
- непонятно, какие у вас несколько столбцов, или что они должны быть отдельными документами (в отличие от объединения в один документ). Просмотр некоторых полных строк может помочь прояснить суть ваших данных.
- это крошечный набор данных - большинство опубликованных работ
Doc2Vec
работают с десятками тысяч и миллионами документов. Этот алгоритм лучше всего работает с большим количеством данных.
- оригинальная работа дала каждому документу только один тег уникального идентификатора. В то время как gensim
Doc2Vec
поддерживает присвоение документам нескольких тегов, как вы сделали здесь, это лучше всего считать продвинутой техникой. По сути, это уменьшает то, что можно узнать из документа, через несколько тегов, что может ослабить результаты, особенно в небольших наборах данных.
- 10-20 эпох обучения наиболее распространены в опубликованных работах, хотя больше может быть особенно полезно для небольших наборов данных. Также лучше установить эпохи при инициализации модели, так как это значение будет также использоваться по умолчанию для будущих операций
infer_vector()
(если только другое значение явно не передается туда).
- структура ваших двух методов немного странная - сохранение неподготовленной модели, но затем, возможно, обучение и перезапись ее сразу? (Или вы просто пытаетесь повторно использовать сохраненную модель со встроенным словарем для нескольких тренировочных заездов с разными данными?)
Word2Vec
и Doc2Vec
часто лучше отбрасывают редкие слова (по умолчанию min_count=5
или больше, когда это практически возможно), чем пытаться их тренировать. Слова, которые появляются только один или несколько раз, часто носят характерный характер по сравнению с «истинным» значением этого слова в большом мире. Их сохранение делает модели более крупными, медленнее обучаемыми и с большей вероятностью отражает особенности данных, чем обобщаемые шаблоны.