Методы машинного обучения для анализа тональности коротких текстов

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.12.2019
Размер файла 2,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ

«ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»

Факультет Бизнеса и менеджмента

Выпускная квалификационная работа

по направлению подготовки 38.03.05 Бизнес-информатика

Методы машинного обучения для анализа тональности коротких текстов

Шахов Дмитрий Михайлович

Научный руководитель

Старший преподаватель

Голов Н. И.

Содержание

  • Введение
  • Постановка задачи
  • Глава 1. Методы машинного обучения для классификации текстов
    • 1.1 Линейные методы
      • 1.1.1 Наивный байесовский классификатор
      • 1.1.2 Логистическая регрессия
    • 1.2 Нейронные сети
      • 1.2.1 Рекуррентные нейронные сети (RNN)
      • 1.2.2 Архитектура LSTM (Long short-term memory)
      • 1.2.3 Архитектура GRU (Gated Recurrent Units)
      • 1.2.4 Свёрточные нейронные сети (CNN)
      • 1.2.5 Модель внимания (Attention)
  • Глава 2. Практическая часть
    • 2.1 Обзор данных
    • 2.2 Предобработка данных
    • 2.3 Применение методов машинного обучения
      • 2.3.1 Линейные модели
      • 2.3.2 Нейронные сети
    • 2.4 Анализ результатов и выводы
  • Заключение
  • Список литературы

Введение

Сентимент-анализ(анализ тональности) или же Opinion Mining/emotion AI - это одна из наиболее важных областей внутри более общего направления NLP(обработка естественного языка), занимающаяся поиском и извлечением мнений из текстов. Обычно, помимо идентификации мнения, выявляются и некоторые атрибуты текста: тональность - эмоциональный окрас текста, предмет - о чём идёт речь в тексте, держатель мнения - физическое или юридическое лицо, выражающее мнение.

В настоящее время, область сентимент-анализа является предметом большого интереса и динамично развивается в связи с большим спектром её возможных применений на практике. Некоторые прикладные use-cases:

· Мониторинг социальных медиа крупными компаниями в поисках упоминания своего бренда или бренда конкурентов. Так, при обнаружении отрицательного отзыва, появляется возможность быстро предпринять какие-либо действия и повысить лояльность клиента [1].

· Замена опросов и фокус-групп, упрощение маркетинговых исследований рынка за счёт автоматизации процесса сбора мнений в сети (блогах, соц.сетях, сайтах типа Маркет.Яндекс, TripAdvisor) и их классификации по типу эмоциональной окраски [2].

· Инструмент для выявления настроений народных масс, который используется в политике для гос.разведки, прогнозирования результатов выборов за счёт оценки мнений избирателей о потенциальных кандидатах [3].

· Рекомендательные системы, сконструированные на основе анализа рецензий реальных пользователей на какие-либо продукты. Объект-кандидат будет рекомендован юзеру, если он имеет множество общих характеристик с ранее предпочитаемыми этим юзером объектами, а также если объект-кандидат получает в рецензиях положительную оценку по наиболее предпочитаемым таргет-пользователем характеристикам [4].

· Эффективное размещение баннеров, при котором избегаются нежелательные сочетания. К примеру, методы сентимент-анализа могут помочь избежать появления баннера «Бургер-кинг» на сайте о вреде фаст-фуда [5].

· Сентимент-анализ можно применять для совсем экзотичных вещей, например, для торгов на бирже. А именно, производится анализ оценок экспертов, и с их помощью делается предсказание валютных курсов/котировок акций [6].

В связи с ростом числа пользователей Интернета [7], постоянным выпуском новых гаджетов и развитием технологий в целом, растёт и количество общедоступной и частной информации в сети [8]. Соответственно, всё больше и число текстов, выражающих мнения, доступных на обзорных сайтах, форумах, в блогах и социальных сетях. Люди всё чаще предпочитают онлайн-общение живому, и в силу вышеперечисленных причин делать это становится всё удобнее. Хотя данный тренд имеет свои очевидные плюсы, обеспечивая быструю и простую коммуникацию людей на расстоянии, он также и несёт в себе некоторые опасности. А именно, коммуникация в сети обеспечивает участников определённой степенью анонимности, что может способствовать ощущению безнаказанности и свободы от ответственности за ненадлежащее поведение в Интернете. Именно поэтому, к сожалению, на форумах и в различных социальных сетях можно увидеть немало агрессивных комментариев с оскорбительным или уничижительным содержанием от так называемых «интернет-троллей» в адрес обычных пользователей и их близких [9]. Разумеется, это отпугивает пользователей, оказывает негативное влияние на людей, а в некоторых случаях это может перерасти в кибербуллинг(Интернет-травлю), которая в свою очередь может привести к депрессии или даже самоубийству [10].

Для автоматического распознавания и предотвращения кибербуллинга могут использоваться методы машинного обучения, что подтверждается наличием большого числа исследований, посвящённых этой теме [11, 12, 13, 14, 15].

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

Постановка задачи

Целью данного дипломного проекта является разработка и анализ работы алгоритмов для анализа тональности агрессивных комментариев, т.е. для автоматического определения их эмоционального окраса. По сути, решается задача многоклассовой классификации коротких текстов, которая как никогда актуальна в наше время и обладает специфическими особенностями, накладывающими дополнительные сложности при решении [16].

Для достижения поставленной цели необходимо выполнить следующие этапы:

1. Исследовать существующие практики решения задачи классификации текстов.

2. Найти необходимые для исследования данные комментариев и выбрать метрику качества.

3. Учитывая специфику поставленной задачи, извлечь первичные признаки и выполнить предобработку данных.

4. Реализовать несколько классифицирующих моделей машинного обучения, оценить их качество и сравнить их эффективность.

5. Cделать выводы об особенностях решения поставленной задачи.

Для применения алгоритмов машинного обучения будет использоваться среда разработки Python 3 со стандартным набором библиотек для использования линейных моделей машинного обучения, глубинного обучения и работы с текстовыми данными.

Основные методы для решения задачи, применённые в исследовании, освещаются в главе 1. В главе 2 описывается процесс обучения моделей, приводятся основные результаты и выводы. В конце документа содержится заключение и планы на будущую работу.

Глава 1. Методы машинного обучения для классификации текстов

1.1 Линейные методы

Чаще всего на текстовых данных используются линейные модели. Они хорошо масштабируются, могут работать с большим количеством признаков, на очень больших выборках. Более того, они достаточно просты в имплементации и их обучение, как правило, занимает относительно небольшое время [17]. Рассмотрим несколько таких алгоритмов, например, наивный байесовский классификатор и логистическую регрессию.

1.1.1 Наивный байесовский классификатор

Используя данный классификатор, мы отбираем из множества всех возможных классов тот класс , условная вероятность принадлежности к которому документа максимальна. Более аккуратно это можно записать так:

Используя теорему Байеса, далее можно преобразовать выражение (1) к такому виду (2), при этом учитывается, что величина , будучи одинаковой для всех документов, не влияет на задачу максимизации.

Следующим шагом является векторное представление текста на основе модели Bag of Words - мешка слов, характерной особенностью которой является то, что порядок «токенов» в документе не имеет значения. Пусть всего в выборке есть различных слов: . В этом случае каждый текст кодируется с помощью признаков, причём признак - это доля вхождений слова среди всех вхождений слов в данном документе, или же его TF-IDF [20]. Сформировав вектора признаков для документов, делается «наивное» предположение о том, что все эти признаки независимы внутри класса. Следовательно, условную вероятность можно представить в виде произведения условных вероятностей вида :

Осталось вычислить вероятности классов и условные вероятности в равенстве (3). Первые вычисляются по формуле: - это просто доля документов в обучающей выборке, принадлежащих классу . Для подсчёта условных вероятностей применяется аддитивное сглаживание (так называемое сглаживание Лапласа):

где в числителе - есть число документов, принадлежащих к классу , в которых встретилось слово, соответствующее признаку , а в знаменателе - есть сумма всех слов из признакового пространства, встречающихся в документах класса . -- размерность признакового пространства, а -- параметр сглаживания.

Мы как бы искусственно добавляем к частотам появления каждого «токена» параметр , что позволяет делать предикт на данных, в тексте которых встречаются слова, которых нет в обучающей выборке. В противном случае для неизвестного слова мы бы получили , и, соответственно, вероятность для всех классов равнялась бы нулю, что, очевидно, не всегда верно. Сглаживание Лапласа позволяет приписать к неизвестным словам некоторую весьма маленькую вероятность и тем самым определить текст в какой-то класс.

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

1.1.2 Логистическая регрессия

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

Обучается модель достаточно просто. Во-первых, нетрудно заметить, что для обоих классов верно:

Далее максимизируется правдоподобие выборки в предположении, что объекты в выборке независимы и одинаково распределены:

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

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

где -- веса регрессии, соответствующие классу . Эти веса подбираются, как и в бинарном случае, методом максимального правдоподобия, здесь мы приходим к более сложному виду функции потерь:

где сумма берется по всем парам объект-ответ из обучающей выборки: -- -ый объект из обучающей выборки, -- соответствующий ему класс.

Линейные модели склонны к переобучению при работе с признаковыми пространствами большой размерности, что зачастую выражается в больших значениях весовых коэффициентов. Отсюда вытекает идея добавления к функционалу качества так называемого / - регуляризатора, «штрафующего» модель за излишне большие веса. К функционалу потерь прибавляется величина или , т.е. или -норма вектора весов, умноженная на - коэффициент регуляризации. Чем больше гиперпараметр , тем больше штраф и, интуитивно, тем «проще» модель.

1.2 Нейронные сети

Нередко для задачи классификации текстов используются различные типы нейронных сетей. Они достаточно сложны, но позволяют строить «state of art» модели, способные обнаруживать нетривиальные зависимости слов в тексте, тем самым обеспечивая наиболее высокое качество предсказаний. Рассмотрим некоторые их типы.

1.2.1 Рекуррентные нейронные сети (RNN)

Недостатком рассмотренных ранее линейных методов применительно к работе с текстами, является то, что в них не учитывается порядок слов в тексте, различные связи слов друг с другом. Эту проблему можно решить, применив рекуррентные нейронные сети, нашедшие широкое применение в задачах, связанных с обработкой так называемой «sequentional data» - видео, аудио, временных рядов и, конечно, текста [18].

У сетей RNN довольно необычная архитектура, отличающаяся от сетей прямого распространения. За счёт неё в рекуррентных сетях реализуется концепция памяти. Именно, в них имеется один скрытый слой (см. Рис.1), который, получив в момент на входе векторное представление слова , обновляется, при этом учитывая и своё предыдущее состояние, и полученное на входе слово. Таким образом, мы наблюдаем некий цикл, в результате действия которого каждому слову в тексте ставится в соответствие выход , зависящий от информации, полученной от последовательности предыдущих слов. Это позволяет учесть в модели контекстуальные связи между словами, а также их порядок.

Рисунок 1. Архитектура простейшей RNN

Более формально, прямой проход сети можно описать двумя формулами. Сначала обновляется скрытое состояние с помощью некоторого усреднения текущего входа и предыдущего состояния:

где - векторное представление слова, - матрицы весов соответствующих размеров, - вектор сдвига, также содержащий параметры модели, - нелинейная функция активации, зачастую - функция ReLU, т.к. с ней «меньше всего проблем», о которых речь пойдёт далее. Стоит отметить, что, разумеется, необходимо также задать начальное состояние , например, нулевым вектором.

По второй формуле рассчитывается выход сети , иначе говоря, предсказание нашей модели. При этом используется значение скрытого состояния, полученное на предыдущем шаге:

где - матрица выходных весов, - вектор сдвига, а - нелинейная функция активации, уже зависящая от решаемой задачи, т.к. по ней мы вычисляем интересующие нас выходы (безусловно, лишь при условии, что над слоем в сети нет других слоёв). Например, для многоклассовой классификации текстов разумно было бы воспользоваться функцией Softmax.

Важно отметить, что вышеперечисленные матрицы весов и векторы сдвига, содержащие параметры сети, постоянны для всех , что отражается на градиентах в виде их зависимости как от текущих, так и от всех предыдущих состояний сети. Обучение сети происходит за счёт минимизации функционала потерь методом Backpropagation Through Time [19], который отличается от стандартного «бэкпропа» тем, что мы дифференцируем не только «по слоям» в вертикальном направлении, но и по «времени» - в горизонтальном направлении, так как работаем с последовательностями слов:

Конечный вид градиентов по параметрам сети достаточно сложен, поэтому приводиться не будет. Но хотелось бы отметить, что именно с их видом связаны две очень часто встречающиеся проблемы, получившие название «затухающих» (vanished) и «взрывающихся» (exploding) градиентов.

Наличие первой проблемы грозит нам тем, что веса с «далёких» timestamp'ов затухают и не влияют на процесс обучения, поэтому отыскание зависимостей между словами, расположенными относительно далеко друг от друга, значительно затрудняется [20]. Наличие проблемы «взрывающиеся» градиентов приводит к тому, что при достаточно большой длине текста градиент может перестать быть числом и принять значение NaN. Слишком большие значения градиентов сложной мультимодальной функции также могут привести к тому, что, используя стохастические методы оптимизации (например, стохастический или усреднённый градиентный спуск), решения задачи оптимизации будет неправильными, и качество модели будет нестабильным по мере увеличения числа эпох.

Обнаружить проблему «взрывающихся» градиентов достаточно просто, критерий был обозначен выше, а решать же её можно установлением верхнего порога для -норм градиентов. С «затухающими градиентами» ситуация сложнее, обнаружить эту проблему достаточно тяжело, т.к. слабое качество модели не обязательно связано с затуханием градиентов. Возможно, задача просто слишком сложна. Частично c этой проблемой можно бороться применением в качестве функции активации - функции ReLU, производная которой равна на положительных значениях аргумента. Тем не менее, на отрицательных значениях риск получить «затухающий» градиент всё же остаётся. Гораздо более осмысленным видится подход c использованием несколько модифицированных архитектур рекуррентных нейронных сетей, созданных для предотвращения проблемы «затухающих» градиентов - LSTM [21] и GRU [22].

1.2.2 Архитектура LSTM (Long short-term memory)

Нейронные сети с архитектурой LSTM отличаются от стандартной RNN тем, что запоминание информации на долгое время для них - естественный процесс, не требующий «аккуратного» обучения. Наряду с этим, в LSTM информация проще «проходит» через скрытые слои. Эти два свойства и позволяют эффективно отыскивать долгосрочные зависимости между словами [23].

Архитектурно, в LSTM-блоке уже будет содержаться не один скрытый слой, а четыре. Следовательно, и число параметров возрастает в четыре раза по сравнению с RNN, что делает обучение LSTM довольно ресурсоёмким. На рисунке 2 можно увидеть развёрнутую структуру LSTM-блока, на которой слоям соответствуют жёлтые прямоугольники. Отметим, что для поступления информации в сеть уже есть два пути - стандартно, через скрытое состояние, а также через так называемую ячейку памяти (memory cell), которая и обеспечивает долговременное запоминание информации (см. также Рис.3, на котором ячейка памяти выделена отдельно).

На рисунках 2, 3 также видно, что слои LSTM-блока не имеют доступа к ячейке памяти, и что в каждый момент времени сеть возвращает не только вектор , но и вектор ячейки памяти .

Рисунок 2. Архитектура сети типа LSTM

Рисунок 3. Ячейка памяти (memory cell) внутри LSTM-блока

Собственно, вся внутренняя структура LSTM-блока создана для использования ячейки памяти. Объём информации в сети регулируется с помощью нескольких фильтров, рассмотрим их более подробно.

· Фильтр забывания (forget gate)

Мы хотим, чтобы сеть могла при необходимости забывать ненужную информацию, за это отвечает фильтр забывания. Он выделен на рисунке 4.

Более строго, получая на шаге входной вектор и вектор c предыдущего шага, фильтр забывания выдаёт вектор , значения которого означают, какую информацию следует выбросить из ячейки памяти:

где , - соответствующие вектору матрицы весов, - вектор сдвига, а - сигмоидальная функция активации.

Рисунок 4. Фильтр забывания (forget gate)

анализ тональность агрессивный комментарий

· Входной фильтр (input gate)

Далее, нужно определить объём новой информации, который следует поместить в ячейку памяти. Эту функцию выполняет входной фильтр (см. Рис.5). Получив на входе те же значения, что и фильтр забывания, входной фильтр подсчитывает значения векторов и . Первый говорит о том, какую информацию в ячейке памяти следует обновить, второй же несёт в себе уже новую информацию для хранения в ячейке памяти:

где - гиперболический тангенс или же иная другая нелинейная функция активации.

Рисунок 5. Входной фильтр (input gate)

· Обновление ячейки памяти

На первых двух шагах получена вся информация, необходимая для обновления значения для ячейки состояния:

Здесь для расчёта мы воспользовались произведением Адамара (поэлементное умножение векторов) [24, гл. 2], первое произведение - это та информация, которую необходимо забыть, второе произведение - та информация, которую необходимо добавить в ячейку памяти (см. Рис.6).

Рисунок 6. Обновление ячейки памяти

· Выходной фильтр (output gate)

Наконец, мы можем определить выходы (предсказания) сети (см. Рис.7). Для этого нам понадобится значение выходного слоя - вектор , вычисляющийся по формуле:

По сути, этот вектор означает объём информации, которую мы хотим вывести из ячейки памяти. Кроме того, нам нужно применить нелинейное преобразование ячейки памяти в зависимости от поставленной задачи. Например, если целевая переменная имеет значения в диапазоне , то в можно использовать гиперболический тангенс:

Рисунок 7. Выходной фильтр (output gate)

Таким образом, за счёт специфичной архитектуры LSTM, в модели появился хотя бы одни короткий путь для информации и, соответственно, градиентов - путь от значения ячейки памяти до значения . Именно его наличие и позволяет избежать проблемы затухающих градиентов. Более того, при использовании LSTM, информация о предыдущих словах забывается не постепенно с течением времени, как это происходит в обычных RNN, а под управлением фильтра забывания, когда это нужно.

1.2.3 Архитектура GRU (Gated Recurrent Units)

Альтернативой сетям LSTM может быть архитектура управляемых рекуррентных блоков (GRU), в которой число параметров больше всего в три раза по сравнению с простейшей RNN, что даёт значительный прирост скорости обучения в сравнении с сетями LSTM практически без потерь качества моделей [25].

Архитектурное отличие от LSTM заключается в том, что в сетях GRU уже нет ячейки памяти и число слоёв и фильтров, соответственно, уменьшено до трёх и двух (см. Рис.8). Рассмотрим внутреннюю структуру GRU-блока.

Рисунок 8. Архитектура сети типа GRU

· Фильтр сброса (reset gate)

Данный фильтр контролирует то, какой объём информации из предыдущего состояния поступит в информационный вектор .

Более строго, получая на шаге входной вектор и вектор c предыдущего шага, фильтр сброса выдаёт вектор , который далее используется при расчёте так называемого информационного вектора :

где , - соответствующие вектору матрицы весов, - вектор сдвига, а - сигмоидальная функция активации.

где, - несёт в себе новую информацию, а вместо гиперболического тангенса может использоваться иная другая нелинейная функция активации в зависимости от поставленной задачи. Таким образом, фильтр сброса действует похоже на входной фильтр в архитектуре LSTM.

· Фильтр обновления (update gate)

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

где мы вновь использовали произведение Адамара. Первое произведение в последней формуле - есть доли информации с предыдущего шага, которую необходимо сохранить, а второе произведение - есть доли новой информации для записи.

Данная архитектура, аналогично LSTM, упрощает запись градиентов, и при грамотном подборе инициализирующих параметров позволяет избежать проблемы их «затухания».

Для того, чтобы оценивать контекст с обоих сторон от подающегося на вход сети слова, можно строить модели BiLSTM и BiGRU [26], внутри которых будет по две сети, считывающих слова в одном и том же тексте, но в противоположных порядках. В итоге получится два результирующих вектора для одного и того же текста, их можно объединить посредством конкатенации, это и будет конечным выходом для модели.

1.2.4 Свёрточные нейронные сети (CNN)

Можно сказать, что в 2012 году данный вид нейронных сетей произвёл революцию в области компьютерного зрения, когда с их помощью исследователям удалось обновить рекорд по качеству классификации картинок в соревновании ImageNet на 10% [27]. Получив мировое признание, они стали повсеместно применяться для решения разнообразных задач компьютерного зрения, но их также можно использовать их для некоторых задач анализа текстов. Удачный кейс применения CNN в этой области можно увидеть в работе Y.Kim [28], далее более подробно поясним предложенную автором архитектуру для решения задачи многоклассовой классификации текстов (см. Рис.9).

Рисунок 9. Архитектура сети типа CNN

На вход сети поступает векторное представление текста - это могут быть заранее обученные word2vec - представления слов [29], векторы GloVe [30], или же выходы предшествующих слоёв, например, блока GRU. Пусть в тексте присутствует слов, каждому из которых соответствует вектор , тогда на вход сети подаётся некий «общий» вектор размерности :

где - есть обозначение для конкатенации. Здесь, как и в дальнейшем, очевидно, наблюдается аналогия с пиксельным представлением изображений.

Характерная особенность CNN - это наличие в них свёрточного слоя, применяющего операцию свёртки к входному вектору с использованием определённого фильтра ( - число подряд идущих слов). Аккуратно в нашем случае её можно записать так (визуальную интерпретацию можно увидеть на Рис.9):

где - есть выход свёрточного слоя для -й подпоследовательности последовательно идущих слов (всего таких подпоследовательностей будет - следовательно, таким будет и размерность «выходного» вектора свёрточного слоя), - вещественное число или сдвиг, - нелинейная функция активации, такая как, например, гиперболический тангенс.

Таким образом, мы проходим фильтром по всем «окнам» - подпоследовательностям слов определённой длины, и получаем выход свёрточного слоя, который может быть интерпретирован как идентификатор какого-то свойства, например, агрессии в тексте:

Можно использовать несколько фильтров, изменяя его ширину, формируя много векторов признаков. Далее, чтобы выделить наиболее важные признаки к каждому фильтру применяется процедура max-пулинга:

получается вектор размерности, равной числу использованных фильтров. Наконец, этот вектор подаётся в качестве входа на полносвязный слой, использующий процедуру dropout'a (обнуление некоторых выходов предыдущего слоя как средство регуляризации). Ко входу в задаче многоклассовой классификации применяется нелинейное преобразование. Например, для задачи многоклассовой классификации можно использовать активационную функцию Softmax.

1.2.5 Модель внимания (Attention)

Достаточно новая модель «Внимания» [31], получившая популярность в задачах машинного перевода и классификации документов может быть применена и к анализу тональности комментариев. В частности, в работе L.Gao и R.Huang 2017 года, посвящённой распознаванию голоса, утверждается: «Механизмы внимания пригодны для отыскания малых участков ненависти в длинных комментариях» [32].

Действительно, не каждое слово оказывает одно и то же влияние на формирование того самого «смысла», семантического значения комментария. Следовательно, мы вводим механизм под названием «Внимание» для того, чтобы извлечь те слова, которые важны для определения значения текста, а затем агрегировать информацию именно из этих информативных слов, сформировав тем самым вектор целого комментария. Архитектурно модель выглядит так:

Рисунок 10. Архитектура модели «Внимание»

Более аккуратно этот процесс можно расписать таким образом [33]:

где к входному вектору применяется нелинейное преобразование для получения нового представления слова - вектора . Затем вычисляется «важность» конкретного слова как его сходство с неким контекстным вектором . Далее вычисляется нормированный «вес» данного слова с помощью функции Softmax:

Наконец, на выходе получаем вектор комментария как взвешенную сумму «важности» весов на их представления:

Под вектором контекста можно понимать как абстрактное представление запроса «какое слово можно считать информативным?» среди заданного множества слов. Вектор контекста инициализируется случайным образом и обучается совместно с другими параметрами.

Понятно, что в данной работе представлена модель «Внимания» на уровне слов, но она легко обобщается и на случай целых документов.

Глава 2. Практическая часть

2.1 Обзор данных

Для разработки решения поставленной в работе задачи использовались материалы соревнования с платформы Kaggle, посвящённому многоклассовой классификации токсичных комментариев из Википедии [34]. Необходимо каждому комментарию сопоставить вектор вероятностей принадлежности к тому или иному типу токсичности. Таких типов всего шесть: toxic, severe_toxic, obscene, threat, identity_hate. Соответственно, комментарии могут принадлежать к токсичным, сильнотоксичным, неприличным, угрозам, оскорблениям, расистским или же принадлежать сразу к нескольким классам. Ввиду последнего обстоятельства мы приходим к задаче многоклассовой классификации с пересекающимися классами, следовательно, наша цель - построить наилучший алгоритм вида:

Применительно к этой задаче предлагается использовать метрику качества ROC-AUC, но её также нужно брать на макро-уровне, т.е. её необходимо усреднить по шести задачам бинарной классификации принадлежности комментария к одному определённому классу токсичности.

Данные уже разделены на тестовую и обучающую выборки, состоящие, соответственно, из 63978 и 159571 комментариев. Отметим их ключевые особенности.

Прежде всего посмотрим на распределение по классам в train'е. При этом добавим в датафрейм ещё один столбец - класс «Clean», отвечающий за разметку тех комментариев, что не были отнесены ни к одному типу токсичности. Из рисунка 11 видно, что подавляющее число комментариев в выборке не были помечены как токсичные, и возможно, их окрас является нейтральным или же положительным. В целом можно сказать, что распределение по классам несбалансированное.

Также стоит отметить, что один и тот же комментарий может принадлежать сразу нескольким классам. Это и понятно, ведь любой комментарий, отмеченный как «высокотоксичный» также наверняка попадёт и в класс «токсичных». Мы можем подсчитать число комментариев, относящихся к никакому, одному, двум, или всем 6 классам одновременно (см. Рис. 12). Имеет смысл посмотреть на то, не коррелируют ли классы между собой. Для этого была построена соответствующая матрица (см. Рис. 13)

Рисунок 11. Распределение комментариев по классам токсичности

Рисунок 12. Число комментариев, отмеченных данным числом тэгов

Рисунок 13. Корреляционная матрица

В целом, все коэффициенты достаточно низкие, можно отметить лишь общий паттерн между классами «toxic» и «obscene» - токсичные сообщения действительно зачастую являются непристойными, но, скорее всего, зависимость вызвана тем, что это наиболее крупные классы в выборке.

2.2 Предобработка данных

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

В контексте работы с короткими комментариями из социальных сетей большой вес приобретает извлечение первичных признаков. Нам хочется извлечь как можно больше «внешних факторов», указывающих на тот или иной эмоциональный окрас комментария. Ясно, например, что комментарий с большим количеством восклицательных и вопросительных знаков несёт в себе какую-то эмоцию автора, можно с большой вероятностью утверждать, что он не нейтральный. Можно также предположить, что наиболее длинные комментарии с меньшей вероятностью будут являться токсичным. Таким образом, первичные признаки могут нести в себе много информации о текстах, которая зачастую будет потеряна в результате очистки данных, поэтому мы их и извлекаем. Первичные признаки для обучения линейных моделей были выбраны достаточно стандартно:

Рисунок 14. Первичные признаки для обучения линейных моделей

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

В качестве первого шага тексты были приведены к нижнему регистру, из данных были удалены переносы строк, IP-адреса, никнеймы пользователей. Затем, используя TweetTokenizer, тексты были разбиты на слова. Также при токенизации использовался словарь английских слов, пишущихся с апострофом, типа «you're». Такие слова были разбиты на два новых слова.

Стемминг, как известно, просто «обрезает» слова с конца по определённым правилам, что делает его простым и быстрым методом нормализации. Можно применять так называемый SnowballStemmer или же стеммер, разработанный М.Портером. Мы же в работе воспользовались другим подходом - лемматизацией, основанной на словарях. Если же слова нет в словаре, то по определённому алгоритму оно изменяется, и делается вывод о его начальной форме. В работе был использован WordNetLemmatizer.

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

2.3 Применение методов машинного обучения

2.3.1 Линейные модели

После предобработки текстов с помощью функции TfidfVectorizer библиотеки sklearn из очищенных данных были извлечены признаки, основанные на модели мешка слов и рассчитываемые по формуле:

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

На полученном пространстве признаков обучались рассмотренные в главе 1 линейные методы машинного обучения. Для проверки качества и настройки моделей использовалась кросс-валидация с пятью фолдами. Стоит отметить, что признаков всего было извлечено 70014, что заняло большое количество времени. Как для логистической регрессии, так и для наивного байесовского классификатора изменение гиперпараметра(обратного коэффициента регуляризации и параметра сглаживания, соответственно) практически не оказывало никакого влияния на итоговый результат по метрике качества, поэтому в итоговых вариантах моделей они взяты стандартными: , . Код реализации наивного байесовского классификатора представлен на рисунке 15.

Рисунок 15. Обучение наивного байесовского классификатора

2.3.2 Нейронные сети

Работа по обучению нейронных сетей производилась с помощью модуля keras, обладающим очень удобными методами для обработки текстов. В частности, в keras встроен класс Tokenizer. С его помощью можно создать словарь всех встречающихся в нашей выборке слов и сопоставить им индекс - место слова в «иерархии» относительно встречаемости в текстах. Ясно, что начальные индексы принадлежат стоп-словам. Затем комментарии кодируются индексами входящих в них слов. На деле это выглядит так:

Рисунок 16. Методы fit_on_texts и texts_to_sequences

На вход нейронной сети комментарии должны подаваться в виде векторов фиксированной размерности, но как выбрать эту размерность? Посмотрим на распределение числа слов в обучающей и тестовой выборках (см. Рис.17):

Рисунок 17. Распределение числа слов в комментариях обучающей и тестовой выборок

Понятно, что комментарии действительно короткие, медианой для обучающей выборки служит значение в 36 слов, а для тестовой - 32 слова. Разумно будет выбрать фиксированное значение числа возможных слов в комментарии равным 100. Далее все комментарии «режутся» и «дополняются» до фиксированной длины методом pad_sequences, при этом мы параллельно избавляемся от стоп-слов за счёт верхнего порога встречаемости, как бы исключая их из процедуры кодирования комментария. Собственно, данный массив закодированных комментариев и будет подаваться нами на слой Embedding'а нейронной сети.

Далее необходимо закодировать слова в каждом комментарии и сопоставить каждому вектор фиксированной размерности. Для этого существует много подходов, о них вскользь уже упоминалось в разделе 1.2.4. Суть их в том, чтобы передать компьютеру семантические свойства слов (такой возможности не предоставляет подход Bag of Words) и, желательно, сохранить при этом свойства векторной алгебры. Наиболее часто используется подход word2vec, но, на самом деле, появляется всё больше новых, более комплексных вероятностных подходов учёта контекста слов посредством их векторного представления. В данной работе решено было воспользоваться Стэнфордской моделью GloVe, обученной на корпусе данных из Википедии и GigaWord 5 ёмкостью в 6 млрд. токенов на английском языке [35].

Итак, по сути, на слое эмбеддинга слова проецируются в определённое векторное пространство в зависимости от контекста, «расстояния» от близлежащих слов. Для этого заготавливается матрица весов эмбеддинга, сопоставляющая каждому уникальному слову в выборке вектор из модели GloVe размерности 50, если, конечно же, это слово есть в словаре GloVe. Если же мы кодируем, например, смайлик, то ему будет сопоставлен случайный вектор размерности 50, значения которого обладают тем же математическим ожиданием и среднеквадратичным отклонением. В коде это выглядит так:

Рисунок 18. Создание матрицы весов для слоя Embedding

На этих векторных представлениях были обучены модели рекуррентных нейронных сетей с долгой краткосрочной памятью (BiLSTM) и сеть с архитектурой управляемых рекуррентных блоков (BiGRU). Следует иметь в виду ранее отмечавшуюся особенность, связанную с тем, что при использовании двусторонних версий этих архитектур выход рекуррентного слоя будет иметь в два раза большую размерность в силу конкатенации. Обе сети имеют идентичное строение, отличаются лишь, собственно, типом архитектуры рекуррентного блока (см. Рис.19).

Рисунок 19. Строение сети типа BiLSTM(BiGRU)

В сети шесть слоёв. Во-первых, ранее рассмотренные слои «Embedding» и слой «LSTM/GRU). Стоит отметить, что модель быстро переобучалась, поэтому на рекуррентном слое решено было использовать как обычный дропаут, так и рекуррентный дропаут скрытых состояний внутри LSTM-блока, после чего результаты заметно улучшились. При этом параметр обнуления для обоих видов дропаута составил .

Далее идёт слой max-пулинга, т.е., получая векторов размерности 100 на входе, этот слой возвращает вектор размерности 100 с максимальными значениями по всем входящим векторам. Затем этот новый полученный вектор проходит через полносвязный слой «Dense» с 50-ю нейронами (активационная функция - ReLU), слой «Dropout» с параметром обнуления и, наконец, через ещё один полносвязный слой с сигмоидальной функцией активации. Модель возвращает вектор размерности 6 для каждого комментария на входе - вероятности его попадания в той или иной класс токсичности.

Оптимизация производилась методом Adam[36], штрафная функция - binary_crossentropy, метрика - accuracy. Для модели BiLSTM: batch_size = 32 число эпох - 2. Для модели BiGRU: batch_size = 32 число эпох - 2. При большем числе эпох модели сильно переобучалась. Все гиперпараметры подбирались с помощью валидационной подвыборки. Результат прохода моделей можно увидеть на рисунках 20, 21.

Рисунок 20. Обучение сети с архитектурой типа BiLSTM

Рисунок 21. Обучение сети с архитектурой типа BiGRU

Результат хороший, но возникает вопрос, а можем ли мы ещё улучшить качество модели. Для этого необходимо её несколько усложнить, изменить строение. С этой целью был добавлен дополнительный свёрточный слой поверх рекуррентного слоя, возвращающий 32 вектора, соответствующих применённым 32 фильтрам с размером окна, равным трём (см. пункт 1.2.4, посвящённый CNN). Далее идёт слой max-пулинга и слой «Dense», имеющий уже не 50 нейронов, а 32. Следующие слои повторяют ранее рассмотренную архитектуру. Результат прохода моделей можно увидеть на рисунках 22, 23.

Рисунок 22. Обучение сети с архитектурой типа BiLSTM+Свёрточный слой

Рисунок 23. Обучение сети с архитектурой типа BiGRU+Свёрточный слой

Ещё одним способом модификации модели в сторону её усложнения была ранее рассмотренная (см. пункт 1.2.5) модель «Внимания». Теперь уже выходы рекуррентного слоя посылаются в слой «Attention» с функцией активации Softmax. Необходимость в наличии слоя max-пулинга при этом пропадает, и мы сразу переходим в полносвязный слой с 70 нейронами. Стоит отметить, что модель внимания не реализована в keras, поэтому код для слоя был позаимствован у исследователей проекта DeepMoji [37], который они публично публикуют. В остальном же модель архитектурно очень похожа на построенную изначально LSTM-сеть. Дропаут внутри рекуррентного блока было решено не использовать, вместо этого перед рекуррентным слоем был добавлен целый новый слой дропаута.

Хотя модель со слоем «внимания» и дополнительным слоем дропаута не переобучалась, тем не менее ей стало не хватать accuracy вне зависимости от перебираемых гиперпараметров. Поэтому было решено увеличить признаковое пространство за счёт кодирования большего числа слов в комментариях (будем меньше ошибаться на длинных текстах) и использования большего корпуса векторов из GloVe размерности 300(сможем придать разумную GloVe-форму большему числу токенов). Гиперпараметры: batch_size = 128, число эпох = 40. Результат прохода модели можно увидеть на рисунке 24.

Рисунок 23. Обучение сети с архитектурой типа BiLSTM+модель «Внимания»

2.4 Анализ результатов и выводы

В таблице 1 приведены метрики качества по разработанным моделям:

Таблица 1. Результаты обучения моделей

Выводы касательно практической части исследования:

· Традиционно популярные в задачах классификации линейные методы машинного обучения оказались неэффективны при решении поставленной задачи в силу того, что они основаны на модели мешка слов. Значения TF-IDF-признаков для этих моделей долго рассчитываются CPU и крайне малы, ведь длина комментариев в среднем невелика: 30-40 символов, одни и те же слова встречаются редко. Поэтому признаковое пространство принимает вид очень разреженной матрицы, что сильно снижает качество модели.

· Первым делом приходящие на ум Baseline-решения в виде архитектуры BiLSTM, BiGRU - т.е. простые модели глубинного обучения, относительно быстро обучающиеся на векторных представлениях слов GloVe маленькой длины, продемонстрировали очень высокие результаты (при этом у моделей с архитектурой LSTM практически всегда качество чуть выше за счёт большего числа параметров, принимающих участие в обучении). С их помощью удаётся избегать проблемы «затухающих» градиентов; «замечать» зависимости слов, расположенных на большом расстоянии друг от друга; учитывать контекст слова с двух сторон, а также его семантику.

· Добавление свёрточного слоя, как ни странно, снизило качество baseline-моделей. Возможно, это связано с тем, что для baseline-моделей извлечение некой общей информации из комментариев посредством операции свёртки по-просту не понадобилось, т.к. эти baseline-модели обучались на коротких текстах. Добавление ещё одного слоя, учитывающего общие закономерности текстов, могло стать излишним (можно сказать «overkill»).

· Модель «Внимания» действительно хорошо показала себя применительно к поставленной задаче. Особенно после увеличения числа возможных слов (в одном комментарии) для кодирования. После увеличения размерности входного вектора в модель стали попадать длинные комментарии, внутри которых слой «Внимания» определял наиболее важные слова и маленькие участки агрессии, увеличивая тем самым качество моделей.

· Лучший результат по метрике ROC-AUC показала наиболее сложная из построенных моделей - сочетание двухсторонней LSTM рекуррентной нейронной сети с добавлением слоя «Внимание» и использованием векторов модели GloVe с большей размерностью (300). Минусом этой модели является крайне высокий срок обучения, требующий больших вычислительных мощностей.

Заключение

В данной работе было проведено исследование существующих техник машинного обучения для решения задачи анализа тональности текстов небольшой длины, как с теоретической точки зрения, так и на корпусе реальных данных. Поставленная в работе задача разработки наиболее эффективного пайплайна решения оказалась нетривиальной в силу характерных особенностей коротких текстов. К ним можно отнести частую встречаемость грамматических ошибок, сарказма и иронии, к тому же токсичность может проявляться не только за счёт непристойных выражений, но и в более деликатной форме. В практической части работы было показано, что линейные методы, основанные на модели мешка слов, в силу небольшой длины комментариев, не могут обеспечить высокое качество классификации. По той же причине дополнительные свёрточные слои не дают прироста качества базовым моделям, основанным на рекуррентных нейронных сетях. Несмотря на высокую прогнозную точность базовых моделей на основе архитектур LSTM и GRU, их метрики удалось ещё улучшить за счёт включения в модель слоя «Внимание», выделяющего наиболее важные для модели слова в тексте, а также за счёт использования векторов модели GloVe с большей размерностью.

В дальнейшем хотелось бы сравнить качество построенных моделей по различным векторным представлениям слов (FastText, word2vec, GloVe), а также провести процедуру ансамблинга. Безусловно, хорошей апробацией для разработанных архитектур моделей и общего пайплайна решения может стать их применение на корпусе русскоязычных текстов из социальных медиа, после чего, в случае успеха, можно будет попытаться автоматически детектировать наиболее токсичные сообщества, а также чрезмерно агрессивно настроенных пользователей в сети.

Все использованные в работе Jupyter-ноутбуки вместе с данными и комментариями (за исключением корпуса GloVe - он слишком велик по объёму [35]) доступны для скачивания в архиве по ссылке dropbox.com/s/ayxwd3vp43bbpb2/Notebooks_data_final.rar.

Вы также можете посмотреть ноутбуки онлайн в репозитории ГИТа github.com/hoshinoyutaka/Diploma_practice/nbviewer'е nbviewer.jupyter.org (необходимо будет вставлять ссылки с ГИТа), но, надо сказать, работают эти сервисы довольно нестабильно.

Список литературы

Размещено на Allbest.ru


Подобные документы

  • Описание ДСМ-метода автоматического порождения гипотез. Исследование результатов влияния компонентов ДСМ-метода на качество определения тональности текстов. Алгоритм поиска пересечений. N-кратный скользящий контроль. Программная реализация ДСМ-метода.

    курсовая работа [727,0 K], добавлен 12.01.2014

  • Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.

    дипломная работа [1,8 M], добавлен 08.02.2017

  • Анализ проблем, возникающих при применении методов и алгоритмов кластеризации. Основные алгоритмы разбиения на кластеры. Программа RapidMiner как среда для машинного обучения и анализа данных. Оценка качества кластеризации с помощью методов Data Mining.

    курсовая работа [3,9 M], добавлен 22.10.2012

  • Популярность алгоритмов машинного обучения для компьютерных игр. Основные техники обучения с подкреплением в динамической среде (компьютерная игра "Snake") с экспериментальным сравнением алгоритмов. Обучение с подкреплением как тип обучения без учителя.

    курсовая работа [1020,6 K], добавлен 30.11.2016

  • Методы машинного обучения в задачах рубрикации, положительные и отрицательные примеры. Отсечение по центрам тяжести и ближайшим соседям. Оптимальный линейный сепаратор Support Vector Machines. Особенности применения тезауруса. Расчет веса конъюнкции.

    лекция [405,0 K], добавлен 01.09.2013

  • Создание системы предобработки данных; разработка системы классификации на базе методов и алгоритмов машинного обучения, их реализация в программной системе. Предобработка информации, инструкция пользователя, система классификации, машинный эксперимент.

    дипломная работа [917,1 K], добавлен 31.01.2015

  • Разработка программного продукта для психолингвистического анализа текстов. Предметная область, основные требования. Анализ рабочих процессов отдела рекламно-выставочной и издательской деятельности. Оценка эффективности проекта и стоимости владения.

    дипломная работа [3,1 M], добавлен 12.10.2015

  • Использование классификаторов машинного обучения для анализа данных. Создание модели, которая на основании параметров, влияющих на течение диабета, выявляет показатель возвращения больного в ухудшенное состояния после оказанного лечения (реадмиссию).

    дипломная работа [625,2 K], добавлен 10.06.2017

  • Machine Learning как процесс обучения машины без участия человека, основные требования, предъявляемые к нему в сфере медицины. Экономическое обоснование эффективности данной технологии. Используемое программное обеспечение, его функции и возможности.

    статья [16,1 K], добавлен 16.05.2016

  • Морфологические анализаторы (морфологизаторы) на различных языках программирования. Анализ методов и технологий автоматической обработки ЕЯ-текстов. Разработка модуля графематического анализа и создания таблицы лексем. Программная реализация классов.

    дипломная работа [3,0 M], добавлен 06.03.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.