В gensim
есть пример использования Doc2Vec
для классификации настроений, очень близкой к вашей потребности. См .:
https://github.com/RaRe-Technologies/gensim/blob/bcee414663bdcbdf6a58684531ee69c6949550bf/docs/src/gallery/howtos/run_doc2vec_imdb.py
(Вероятно, это лучшая модель, чем другие учебники, на которые вы ссылаетесь. В частности, второй учебник, который вы связали, в настоящее время имеет оченьошибочное неправильное управление alpha
в его неправильном цикле, вызывающем train()
несколько раз.)
Специально в отношении ваших вопросов:
(1) Тренируйтесь с таким большим количеством данных, как внутри, так и снаружижелаемый класс, насколько это возможно. Модель, в которой видны только «положительные» примеры, вряд ли будет генерировать значимые векторы из документов, совершенно отличных от тех, на которых она обучалась. (В частности, с такой моделью, как Doc2Vec
, он знает только те слова, которые видел во время обучения, и если позже вы попытаетесь определить векторы для новых документов с неизвестными словами, эти слова будут полностью проигнорированы.)
(2) Да, классификатор (любого алгоритма) снабжается функциями и known-label. Затем он учится выводить эти метки из этих функций.
(3) Традиционно, Doc2Vec
обучается с одним уникальным идентификатором 'tag' на документ - и никакой информацией об известных ярлыках. Таким образом, каждый документ получает свой собственный вектор, и процесс полностью «без присмотра». Вместо этого можно присвоить документам несколько тегов или использовать один и тот же тег в нескольких документах. И вы можете сделать так, чтобы эти теги соответствовали известным меткам - поэтому все «спортивные» документы имеют тег 'sports'
(либо в дополнение к своему уникальному идентификатору, либо вместо него). Но выполнение этого добавляет ряд других сложностей по сравнению с простым делом «один идентификатор тега на документ». Поэтому я бы не советовал что-либо предпринимать в этом направлении, пока у вас не получится более простой пример. (Я видел несколько случаев, когда смешивание известных меток в качестве дополнительных тегов может немного помочь, особенно в вопросах классификации с несколькими классами, когда такие дополнительные метки применяются только к небольшому подмножеству всех документов. Но это не гарантировано - итаким образом, имеет смысл возиться с этим только после того, как у вас есть работающая прямая базовая линия и повторяемый способ оценки альтернативных моделей друг против друга.)