Введение

Встраивание слов — это недавно открытый способ представления слова в низкоразмерном пространстве. Они обеспечивают векторное представление слов с любой семантикой или синтаксисом.

В этой статье обсуждается использование векторов doc2vec и логистической регрессии для классификации документов. Эта история взята из отчета о назначении НЛП, данного Неква Бёлюкю.

Чтение входного файла

Данный набор данных сюжетов фильмов был прочитан с помощью встроенного модуля csv. После пропуска первой строки, описывающей столбцы, первые 2000 жанров фильмов сохраняются в качестве обучающего набора, а остальные жанры фильмов сохраняются для использования в качестве тестового набора при классификации сюжетов. Все входные линии сохраняются для последующего создания векторов.

Очистка сюжетов фильмов

Все сюжеты фильмов очищаются перед обучением модели созданию векторов документов с использованием следующих методов:

  1. Графики токенизируются с использованием метода .word_tokenize() модуля nltk.
  2. Стоп-слова удаляются с графика с помощью слегка измененного списка стоп-слов. (Подробности см. в разделе ссылок)
  3. С графиков удалены знаки препинания и цифры.

После этой операции графики преобразуются в TaggedDocuments для использования при создании модели.

Обучение модели

Модель Doc2Vec создается с использованием следующих параметров:

  • Размер вектора: 300
  • Эпохи: 50
  • Размер окна: 5
  • Минимальная частота: 5
  • Алгоритм обучения: Распределенный мешок слов

Каждое из этих значений определяется методом проб и ошибок, чтобы получить более высокую оценку точности.

После создания экземпляра модель обучается (с использованием методов .build_vocab() и .train() модели) с использованием помеченных документов, созданных на основе заданных сюжетов фильма и сохраненных в виде файла (с помощью метода .save() класса модель) для будущего использования.

Классификатор логистической регрессии

Классификатор логистической регрессии (модуля sklearn) создается с использованием следующих параметров:

  • решатель: lbfgs
  • мульти_класс: авто
  • макс_итер: 1000
  • Тол: 0,5

Эти параметры изменены по умолчанию из-за предупреждений классификатора, за исключением параметра tol. Каждое из этих значений определяется методом проб и ошибок, чтобы получить более высокую оценку точности.

Используя векторы сюжетов фильма, полученные из ранее обученной модели, и правильные категории этих графиков, классификатор логистической регрессии обучается (с использованием метода .fit() классификатора).

Расчет точности

После операции обучения прогнозируются категории тестовых векторов (с использованием метода .predict() классификатора), а точность модели рассчитывается по следующей формуле:

Результаты

Используя формулу, упомянутую в предыдущем разделе, были выбраны и оценены 7 созданных моделей. Как видно из приведенного выше графика, их значения точности различаются. Это связано с тем, что Doc2Vec использует рандомизацию при создании векторов документов. Чтобы получить более достоверный результат, было рассчитано среднее значение полученных значений точности, как показано на рисунке ниже.

Помимо этих образцов, максимальное значение точности 54,46% достигается при многократном создании модели.

Исходный код

Исходный код всего задания, включая эту историю и другую, можно найти на Github:



использованная литература

Набор данных:



Документация Doc2Vec:



Документация по логистической регрессии:



Демонстрация логистической регрессии:



Список стоп-слов английского языка:

Учебное пособие по очистке текста: