Обработка естественного языка (NLP)

Анализ настроений с помощью VADER и Twitter-roBERTa

Сравнительный анализ двух разных алгоритмов для краткого анализа текста в социальных сетях

Краткое введение в анализ настроений

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

  • На основе правил (на основе лексики): у таких моделей есть собственные словари (лексиконы) слов или смайликов с положительным или отрицательным весом. Эти алгоритмы подсчитывают количество положительных и отрицательных слов в заданном тексте. Если положительных отзывов больше, чем отрицательных, они возвращают положительное настроение. Если оба равны, они возвращают нейтральное отношение. Правила или словари слов могут быть настроены. И такие алгоритмы не требуют обучения моделей.
  • Контролируемое машинное обучение. Эти алгоритмы получают большое количество размеченных текстовых данных до тех пор, пока они не смогут изучить шаблоны или суть утверждения вместо четко определенных правил. Однако для этого подхода требуются размеченные данные, что обычно дорого для практических приложений!
  • Неконтролируемое глубокое обучение. Алгоритмы такого типа способны изучать шаблоны через несколько уровней из неструктурированных и немаркированных данных для выполнения анализа настроений с использованием различных механизмов обучения, например. внимание к себе.

Выбранные модели и данные

Одним из известных алгоритмов на основе правил является пакет VADER from the NLTK. По словам разработчиков, она специально адаптирована к настроениям, выраженным в социальных сетях. Эту модель довольно легко реализовать, но она очень эффективна. Еще один алгоритм, о котором я расскажу, это алгоритм, основанный на глубоком обучении — Twitter-roBERTa из пакета TRANSFORMERS. Эта модель была предварительно обучена 124 миллионам твитов и настроена для анализа настроений. Обе модели не требуют никакого обучения, а значит, их можно прямо из коробки применять к текстовым данным.

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

Поскольку мировая экономика находится на грани рецессии, и сегодня все об этом говорят, Twitter является одной из наиболее часто используемых платформ социальных сетей, с помощью Twitter API мы собрали соответствующие данные для нашего анализа. Я выбрал твиты, используя поисковый запрос экономика. Мы проанализируем 1000 таких твитов, опубликованных в период с 01.10.2022 по 11.10.2022. (читатели могут найти информацию о сборе данных с помощью Twitter API в другом месте, например, здесь). Верхние 5 строк моего фрейма данных, как на следующем изображении (вы можете найти весь набор данных в моем репозитории GitHub):

ВЕЙДЕР Реализация

Для VADER максимально очистите свои данные, то есть удалите упоминания (имена пользователей), URL-адреса, символы хэштегов и так далее. Как я уже сказал, это довольно легко реализовать, взгляните на следующий фрагмент кода:

После применения вышеуказанных операций к нашему набору данных Twitter наш фрейм данных становится следующим с предварительно обработанным контентом для модели VADER и соответствующей оценкой полярности и меткой настроений:

Оценка полярности находится в диапазоне от -1 до 1, где -1 означает наиболее отрицательное значение, а 1 — наиболее положительное. Ярлыки тональности назначаются в соответствии с показателем полярности: от -1 до -0,25 =› отрицательный; -0,25 и 0,25 => нейтраль; и от 0,25 до 1 положительного.

Внедрение roBERTa

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

В результате наш набор данных примет следующий вид:

Бенчмаркинг

Как я упоминал ранее, наше сравнение будет основано на 1000 твитов, связанных с «экономикой», и с минимальным объемом предварительной обработки данных (как реализовано выше).

  1. Распределение полярностей

Глубокое обучение удивительно, не так ли?! Да, мы можем создавать очень сложные правила, но ничто не может сравниться с шаблонами, извлеченными из больших объемов данных. Как показано на рисунке ниже, обычно VADER присваивает полярность 0 баллов. Это означает, что он не смог найти много положительных или отрицательных слов в твитах. С другой стороны, roBERTa, которая на самом деле улавливает глубокий смысл текста, а не отдельных слов, обнаружила, что большинство твитов пахнет негативом. Как выяснила roBERTa, особенно во времена, когда все настроены пессимистично, а ситуация в экономике не столь обнадеживающая, мы все ожидаем больше негативных твитов.

2. Доля ярлыков тональности

Несмотря на то, что приведенное выше распределение полярностей достаточно красиво для описания результатов, круговая диаграмма ниже показывает разницу более наглядно. На диаграмме показано, сколько из 1000 твитов помечены как негативные, нейтральные и позитивные. Согласно модели VADER, основанной на правилах, положительных и нейтральных твитов равное количество, тогда как отрицательных твитов немного больше. С другой стороны, согласно модели Twitter roBERTa, основанной на глубоком обучении, почти две трети твитов являются негативными, и очень немногие — позитивными. Последние прогнозы звучат сегодня более реалистично.

3. Время, необходимое для прогнозов

В двух предыдущих разделах мы видели, что точность roBERTa намного выше и отражает больше реальности. Но в мире науки о данных точность является не единственным определяющим фактором. Поскольку вычислительные ресурсы ограничены, одним из требований к модели является то, что она должна быть максимально легкой в ​​вычислительном отношении, особенно для производства.
Уже из фрагментов кода реализации было очевидно, что VADER намного проще в применении по сравнению с к роБЕРТе. Более того, на следующем рисунке видно, насколько VADER быстрее, чем roBERTa. На моем личном ноутбуке VADER предсказал тональность 1000 твитов всего за 0,31 секунды. Напротив, roBERTa выполнил ту же задачу за 42,6 секунды (примерно в 130 раз медленнее).

Заключение

Серебряной пули нет, но в зависимости от задачи и доступных вычислительных ресурсов можно выбрать VADER или roBERTa. Однако с минимальным объемом предварительной обработки данных и невероятной точностью Twitter-roBERTa кажется более перспективным, особенно если объем данных не такой большой.

Блокнот Jupyter доступен на мой GitHub, включая коды для создания фигурок!