/text_classification

Text Classification problem to identify author

Primary LanguageJupyter Notebook

Классификация отрывков текста

Программа, которая по отрывку текста говорит, принадлежит ли он перу Льва Толстого или Ильи Ильфа и Евгения Петрова.

Подготовка данных

Было скачано 4MB книг Ильи Ильфа и Евгения Петрова и 6MB книг Льва Толстого. Далее все тексты были разбиты на отрывки по 100 слов в каждом. Понятно, что чем больше слов в отрывке, тем проще определить автора. Были попробованы модели, обученные на отрывках различной длины. Оптимальным с точки зрения качества классификации и здравого смысла значением длины отрывка оказалось 100 слов.

Также все данные были поделены на обучающую, валидационную и тестовую выборки в соотношении 70/15/15. Отдельно валидационная и тестовая выборки необходимы для того, чтобы не переобучаться на валидационную выборку при подборе гиперпараметров модели, и оценивать итоговое качество модели по тестовой выборке.

Векторные представления текстовых данных

Для того, чтобы обучать модели, необходимо было представить текстовые данные в числовом виде. Для этого использовалась модель gensim.models.doc2vec, переводящая текстовые документы в вектора. Модель обучалась на двух текстах - книги Ильфа и Петрова и книги Толстого.

Метрика качества

Так как хотелось предсказывать вероятность принадлежности отрывка к одному из классов, то использовалась метрика AUC ROC.

Обучение моделей классификации

Было попробовано три модели: градиентный бустинг XGBoost, логистическая регрессия и метод опорных векторов.

Градиентный бустинг показал качество 0.87444 на тестовых данных. Логистическая регрессия: 0.88488. SVM: 0.88509. Три решения были скомбинированы ансамблем, итоговое качество на тестовых данных получилось 0.88686.