лучшие методы обучения для классификации двоичного текста с использованием doc2vec gensim - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь использовать doc2vec для классификации текста на основе темы документа, например, я хочу классифицировать все документы о спорте как 1, а все остальные документы как 0. Я хочу сделать это, сначала тренируя модель doc2vec собучающие данные, а затем используйте классификационную модель, такую ​​как логистическая регрессия, чтобы классифицировать тексты как положительные или отрицательные.

Я видел различные примеры онлайн, чтобы сделать это [ 1 , 2 ], в которых используются различные методы, и мне неясно, какие детали они используют, и почему этот метод является наилучшим для классификации текста.

  1. Во-первых, использованиеПример выше, лучше тренировать модель, используя только документы, связанные со спортом или документы по всем предметам. Я думал о том, что, тренируясь только на спортивных документах, вы могли классифицировать документы на основе сходства документов (хотя это не привело бы к созданию векторов для не спортивных документов, которые можно использовать для обучения следующей модели). Кроме того, я чувствую, что если для обучения модели на всех документах вам понадобится огромное количество документов, чтобы представить все, кроме спорта, чтобы получить хорошую классификацию.

  2. Во-вторых, какие функции фактически используются для обучения модели логистической регрессии. Если при обучении модели для всех документов я предполагаю, что вы будете отслеживать документы с использованием какого-либо индекса, а затем обучать модель логистической регрессии, используя векторы с меткой класса, это правильно?

  3. В-третьих, я видел различные применения TaggedDocument, где уникальный идентификатор ставится для каждого документа, а также где общий идентификатор используется для представления одного и того же класса, например, 1 = спорт0 = не спорт. Из того, что я прочитал, общий идентификатор означает, что модель имеет один вектор, представляющий каждый класс, а использование уникального идентификатора обеспечивает уникальные векторы для каждого документа, это правильно? Если это так, при условии, что мне нужны уникальные маркированные векторы для обучения модели логистической регрессии, какой смысл использовать общий идентификатор? Не приведет ли это к ужасным результатам классификации?

Если кто-нибудь может помочь мне с вопросами, приведенными выше, и в целом, каков наилучший способ классификации текста с использованием векторов doc2vec, это было бы очень полезно.

1 Ответ

0 голосов
/ 22 октября 2019

В 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' (либо в дополнение к своему уникальному идентификатору, либо вместо него). Но выполнение этого добавляет ряд других сложностей по сравнению с простым делом «один идентификатор тега на документ». Поэтому я бы не советовал что-либо предпринимать в этом направлении, пока у вас не получится более простой пример. (Я видел несколько случаев, когда смешивание известных меток в качестве дополнительных тегов может немного помочь, особенно в вопросах классификации с несколькими классами, когда такие дополнительные метки применяются только к небольшому подмножеству всех документов. Но это не гарантировано - итаким образом, имеет смысл возиться с этим только после того, как у вас есть работающая прямая базовая линия и повторяемый способ оценки альтернативных моделей друг против друга.)

...