В статье рассмотрено применения машинного обучения для классификации комментариев в рамках курсового проекта по дисциплине «Machine Learning. Обучающиеся технические системы», научный руководитель – д.ф.-м.н., профессор Воронова Л.И. [1].
Автоматическое определение эмоциональной окраски (позитивный, негативный) текстовых данных, называется анализом тональности. Цель этой задачи состоит в определении, является ли данный текст (например, обзор фильма или комментарии) положительным, либо отрицательным по своему влиянию на репутацию конкретного объекта. Трудность анализа тональности заключается в присутствии эмоционально обогащенного языка — сленг, многозначность, неопределенность, сарказм, все эти факторы вводят в заблуждение не только людей, но и компьютеры[2].
Актуальность исследования определяется развитием сети Интернет и необходимостью систематизации и обработки больших объёмов текстовой информации. Обработка тональности текстов позволяет упростить анализ эффективности рекламной и PR деятельности, а также может способствовать спецслужбам в поиске преступников в интернете и социальных сетях.
Целью работы является параметризация нейронной сети[3] для проведения анализа тональности текстов. Для обучения данной сети необходимо иметь данные для составления обучающей выборки.
В качестве данных для обучения были выбраны тексты, полученные в результате сбора большого количества комментариев, отсортированных на положительные и отрицательные.
В социальной сети для публичного обмена сообщениями twitter.com [4] под публичными сообщениями присутствуют комментарии. Данные комментарии были выгружены и сохранены в файл для проведения анализа. Таким образом, было собрано и проанализировано более 500,000 комментариев и на основе представленного анализа авторами статьи был составлен обучающий набор данных.
Пример полученных в процессе анализа данных представлен на рисунке 1.
Рис.1- Структура csv файла с комментариями
Проводя анализ данных, можно заметить, что тексты, на основе которых производится обучение нейронной сети не имеют четких разделений на хорошее и плохое. Данный фактор не позволяет очень четко разграничить классы полученных комментариев и решать данную задачу исключительно аналитически. Поэтому решение данной задачи было простроено на основе применения нейронной сети.
Для чтения и обработки полученных данных использовалась библиотека pandas[5]. Программная реализация показана на рисунке 2. Функция read_csv считать csv как data frame. Функция dropna() позволяет удалять пустые записи.
Рис.2 -Программный код использования библиотеки pandas
В качестве инструмента машинного обучения использовалась библиотека scikit-learn. Данная библиотека не позволяет обрабатывать категориальные признаки, поэтому для реализации модели необходимо перевести их в числовые признаки [6]. Программный код использования данной библиотеки для перевода показан на рисунке 3.
Рис.3 - Программный код перевода категориальных признаков в числовые
Для анализа текстовых признаков было использовано 3 алгорита: Bags of words, n-grams, tf-idf, программный код которых представлен на рисунке 4
Рис.4- Программный код анализа текстовых признаков
Bags of words или мешок слов — представляет собой неупорядоченный набор слов, входящих в обрабатываемый текст. Модель представляют в виде матрицы, в которой строки соответствуют отдельному тексту, а столбцы — входящим в него словам. Ячейки на пересечении являются числом вхождения данного слова в соответствующий документ.
N-grams— последовательность из n элементов. С семантической точки зрения, это может быть последовательность звуков, слогов, слов или букв. На практике чаще встречается N-грамма как ряд слов, устойчивые словосочетания называют коллокацией.,
tf-idf— статистическая мера, используемая для оценки важности слова в контексте документа, являющегося частью коллекции документов или корпуса. Вес некоторого слова пропорционален частоте употребления этого слова в документе и обратно пропорционален частоте употребления слова во всех документах коллекции.
В работе было выбрано несколько алгоритмов классификации: RandomForest, ADAboost, Bernoulli, Perceptron.
RandomForest- множество решающих деревьев. В задаче регрессии их ответы усредняются, в задаче классификации принимается решение голосованием по большинству.
AdaBoost- алгоритм адаптивного бустинга, что каждый следующий классификатор строится по объектам, которые плохо классифицируются предыдущими классификаторами. AdaBoost вызывает слабый классификатор в цикле. После каждого вызова обновляется распределение весов, которые отвечают важности каждого из объектов обучающего множества для классификации
Bernoulli (распределение Бернулли для Наивного Байесовского классификатора). Используется в случае двоичных дискретных признаков (могут принимать только два значения: 0 и 1).
Perceptron, который имеет множество слоев: входной слой для получения данных, скрытые слои и выходной слой для вывода данных[7].
Для реализации поставленной задачи была выбрана нейронная сеть, в которой будет 4 скрытых нейронных слоя. В связи с тем, что набор данных содержит большое количество разных слов, а количество входных нейронов должно быть равно словарю (около 290 000 слов) было принято решение сократить набор слов до оптимального для данной задачи - 5000 нейронов, на каждом скрытом слое расположено по 100 нейронов, а на выходном - 2. Структура нейронной сети показана на рисунке 5[8].
Рис.5- Нейронная сеть для классификации комментариев
Здесь n – число входных нейронов, а m – количество скрытых слоев.
Для тестирования обученной нейронной сети была использована вторая часть данных, которую мы выбрали в тот момент, когда производили считывание данных из файла с расширением “csv”. Объем данных для тестирования составляет 30% и представляет из себя 200000 комментариев, которые, так же как и в процессе обучения подаются на вход нейронной сети, но уже при возникновении несоответствия выхода нейронной сети и ожидаемого ответа, не происходит изменения весов нейронной сети, а данное наблюдение засчитывается как неверно определенное.
В результате работы мы получаем оценку комментария по настроению (негативный или позитивный). На рисунке 6 показана работа нейронной сети для классификации случайного текста, в данном случае мы получили оценку "негативный" для данного предложения, что является правильным.
Рис. 6- Результат работы классификатора
В ходе работы при классификации положительный/отрицательный комментарий наиболее точным оказался алгоритм random forest, что говорит о том, что для поставленной задачи нейронная сеть может применяться и вполне успешно классифицировать комментарии, но не всегда будет являться наиболее точной. На рисунке 7 представлено сравнение точности классификации различными методами.
1. RandomForest- множество решающих деревьев. В задаче регрессии их ответы усредняются, в задаче классификации принимается решение голосованием по большинству.
2. Bernoulli — использование распределения Бернулли для простого вероятностного классификатора, основанный на применении теоремы Байеса со строгими (наивными) предположениями о независимости.
3. AdaBoost вызывает слабый классификатор в цикле. После каждого вызова обновляется распределение весов, которые отвечают важности каждого из объектов обучающего множества для классификации. На каждой итерации веса каждого неверно классифицированного объекта возрастают, таким образом новый классификатор «фокусирует своё внимание» на этих объектах.
4. Perceptron, который имеет множество слоев: входной слой для получения данных, скрытые слои и выходной слой для вывода данных.[7]
В данном случае для классификации тональности текста алгоритм случайный лес показал себя лучше, чем другие алгоритмы классификации.:
• Accuracy случайного леса= 0.972;
• Accuracy распределения Бернулли= 0.8961;
• Accuracy тестовой выборки Adaptive Boost: 0.676;
• Accuracy тестовой выборки персептрона= 0.832;
Рис. 7- Сравнение алгоритмов классификации тестовой выборки
Выводы
В статье была описана параметризация нейронной сети, которая определяет настроение текста при помощи словаря, полученного из тренировочных данных. Реализованы выбранные алгоритмы, проведено тестирование, а также было произведено сравнение методов машинного обучения. Также проведено тестирование нейронной сети, которое показало, что точность нейронной сети составляет 85%, что является достаточно хорошим результатом.
Список литературы.
Л.И. Воронова, В.И. Воронов. Machine Learning: Регрессионные методы интеллектуального анализа данных: учебное пособие – МТУСИ, 2017 – 81 с.
А. Жармагамбетов. Автоматическое определение тональности текста [Электронный ресурс] (Sentiment Analysis) Режим доступа: https://habr.com/ru (дата обращения: 01.12.2018)
Д. Мескита. Общий взгляд на машинное обучение: классификации текста при помощи нейронных сетей [Электронный ресурс] Режим доступа: https://tproger.ru (дата обращения: 01.12.2018)
Twitter.com [Электронный ресурс]
Библиотека Анализа Данных Python. [Электронный ресурс]. – Режим доступа: https://pandas.pydata.org (дата обращения: 17.12.2018)
Открытая библиотека машинного обучения scikit-learn [Электронный ресурс]. – Режим доступа: http://scikit-learn.org/ (дата обращения: 17.12.2018)
Л.И. Воронова. Методические указанию по подготовке и оформлению курсовых работ по дисциплине Machine Learning. Обучающиеся технические системы. 2018.
Курс машинного обучения Andrew Ng Machine Learning [Электронный ресурс]. – Режим доступа: https://www.coursera.org/learn/machinelearning (дата обращения: 01.12.2018)