УДК 004.8

Применение языковых моделей нейронных сетей для распознавания эмоциональной тональности сообщений

Гель Андрей Юрьевич – студент магистратуры Балтийского федерального университета имени Иммануила Канта.

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

Ключевые слова: логистическая регрессия, n-грамма, классификация, токенизация.

Введение

Язык – один из ключевых инструментов для выражения наших мыслей и эмоций. В современном мире огромное количество информации осыпает нас со всех сторон, передаваясь не только в устной, но и в письменной форме. Однако, как узнать эмоциональную окраску текста? Как определить, что за ними скрывается – радость, гнев, грусть или любовь? Здесь на сцену выходит применение языковых моделей нейронных сетей, которые позволяют распознавать и анализировать эмоциональную тональность сообщений. В данной статье будет рассмотрено, как эти модели работают и возможности их применения.

Основная часть

Обработка текстов на естественном языке (Natural Language Processing, NLP) – общее направление искусственного интеллекта и математической лингвистики. Оно изучает проблемы компьютерного анализа и синтеза текстов на естественных языках [1].

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

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

1

Рисунок 1. Пример исходных данных.

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

  1. scikit-learn – библиотека, предназначенная для машинного обучения, написанная на языке программирования Python и распространяемая в виде свободного программного обеспечения. [2]
  2. nltk – пакет библиотек и программ для символьной и статистической обработки естественного языка, написанных на языке программирования Python. [3]

Для начала необходимо разделить исходные данные на тестовою и обучающие выборки. Разбиваем данные на обучающую и тестовую выборки с помощью функции train_test_split() из sklearn.

Далее попробуем получить преобразование предложений в численный вектор, с которым может работать стандартный алгоритм машинного обучения, например логистическая регрессия. Для этого можно использовать n-граммы.

N-грамма – последовательность из n элементов. С семантической точки зрения это может быть последовательность звуков, слогов, слов или букв [4]. У n-грамм есть параметр n − количество слов, которые попадают в такое представление текста. Для работы с n-граммами применяется библиотека nltk.

Векторизатор преобразует слово или набор слов в числовой вектор, понятный алгоритму машинного обучения, который привык работать с числовыми табличными данными. На начальном этапе будет достаточно тех инструментов, которые библиотеке sklearn. Самый простой способ извлечь признаки из текстовых данных векторизаторы: CountVectorizer и TfidfVectorizer.

Объект CountVectorizer делает следующее:

  • строит для каждого документа (каждой пришедшей ему строки) вектор размерности n, где n -- количество слов или n-грамм во всём корпусе.
  • заполняет каждый i-тый элемент количеством вхождений слова в данный документ.

2

Рисунок 2. Пример работы векторизатора CountVectorizer.

Теперь, когда все готово для построения модели, произведем обучение используя разделение через унигарммы.

3

Инициализируем CountVectorizer, указав в качестве признаков униграммы. После инициализации vectorizer можно обучить на наших данных.

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

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

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

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

У нас уже есть обученный векторизатор vectorizer, поэтому используем метод transform() (просто применить его), а не fit_transform (обучить и применить).

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

Таблица 1. Метрики для классификации с использованием униграмм.

 

precision

recall

f1-score

support

negative

0.76

0.76

0.76

27833

positive

0.77

0.77

0.77

28876

accuracy

   

0.77

56709

macro avg

0.77

0.77

0.77

56709

weighted avg

0.77

0.77

0.77

56709

Теперь попробуем сделать то же самое, но с использованием триграмм.

4

Таблица 2. Метрики для классификации с использованием триграмм.

 

precision

recall

f1-score

support

negative

0.57

0.85

0.68

27833

positive

0.72

0.38

0.50

28876

accuracy

   

0.61

56709

macro avg

0.65

0.61

0.59

56709

weighted avg

0.65

0.61

0.59

56709

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

Далее рассмотрим применение токенизации и стоп-слов. Токенизация в обработке естественного языка – это процесс, используемый для разделения заданного фрагмента текста на более мелкие отдельные единицы, которые могут быть использованы для разбора и оценки текста. [5]

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

Стоп-слова – это слова, которые часто встречаются практически в любом тексте и ничего интересного не говорят о конретном документе. Для модели это просто шум. А шум нужно убирать. По аналогичной причине убирают и пунктуацию.

Возьмем алгоритм токенизации и заготовленный набор стоп-слов из библиотеки nltp.

5

Рисунок 3. Примеры стоп-слов для русского языка из библиотеки nltp.

Знаки пунктуации лучше импортировать из модуля String. В нем хранятся различные наборы констант для работы со строками (пунктуация, алфавит и др.).

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

  • какие n-граммы нужны, параметр ngram_range;
  • какой токенизатор будет использован, параметр tokenizer;
  • какие применяются стоп-слова, параметр stop_words.

6

Таблица 3. Метрики для классификации с использованием униграмм и использованием стоп-слов.

 

precision

recall

f1-score

support

negative

0.76

0.80

0.78

27833

positive

0.80

0.76

0.78

28876

accuracy

   

0.78

56709

macro avg

0.78

0.78

0.78

56709

weighted avg

0.78

0.78

0.78

56709

Результат стал немного лучше: accuracy выше, а также заметно подрос recall у негативного класса.

Заключение

В ходе статьи были рассмотрены языковые модели нейронных сетей и обучены для задачи классификации твитов по различной тональности. Были рассмотрены различные вариации n-грамм и применение стоп-слов. В целом модель показала неплохой результат классификации. Для улучшения результата необходимо подбирать различные n-граммы, а также использовать токенизацию и стоп-слова, которые включают в себя пунктуацию. Наиболее эффективным оказалось применение униграмм.

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

  1. Обработка естественного языка. – Текст : электронный // Wikipedia : [сайт]. – URL: https://ru.wikipedia.org/wiki/Обработка_естественного_языка (дата обращения: 20.12.2023).
  2. Scikit-learn. – Текст : электронный // Wikipedia : [сайт]. – URL: https://ru.wikipedia.org/wiki/Scikit-learn (дата обращения: 21.12.2023).
  3. Natural Language Toolkit. – Текст : электронный // Wikipedia : [сайт]. – URL: https://ru.wikipedia.org/wiki/Natural_Language_Toolkit (дата обращения: 21.12.2023).
  4. N-грамма. – Текст : электронный // Wikipedia : [сайт]. – URL: https://ru.wikipedia.org/wiki/N-грамма (дата обращения: 20.12.2023).
  5. Токенизация в обработке естественного языка. – Текст : электронный // fineproxy : [сайт]. – URL: https://fineproxy.org/ru/wiki/tokenization-in-natural-language-processing (дата обращения: 21.12.2023)..

Интересная статья? Поделись ей с другими: