УДК 004.8
Применение языковых моделей нейронных сетей для распознавания эмоциональной тональности сообщений
Гель Андрей Юрьевич – студент магистратуры Балтийского федерального университета имени Иммануила Канта.
Аннотация: В статье рассматривается применение языковых моделей для задачи классификации сообщений по эмоциональной тональности: положительная и отрицательная. Также рассматривается применение к готовой модели токенизации и стоп-слов и дается оценка эффективности влияния данных средств на результат классификации.
Ключевые слова: логистическая регрессия, n-грамма, классификация, токенизация.
Введение
Язык – один из ключевых инструментов для выражения наших мыслей и эмоций. В современном мире огромное количество информации осыпает нас со всех сторон, передаваясь не только в устной, но и в письменной форме. Однако, как узнать эмоциональную окраску текста? Как определить, что за ними скрывается – радость, гнев, грусть или любовь? Здесь на сцену выходит применение языковых моделей нейронных сетей, которые позволяют распознавать и анализировать эмоциональную тональность сообщений. В данной статье будет рассмотрено, как эти модели работают и возможности их применения.
Основная часть
Обработка текстов на естественном языке (Natural Language Processing, NLP) – общее направление искусственного интеллекта и математической лингвистики. Оно изучает проблемы компьютерного анализа и синтеза текстов на естественных языках [1].
Целью подобной обработки является научить компьютер «понимать» естественный язык (в виде аудио или текста) для дальнейшего перевода или ответа на вопросы. NLP это, прежде всего, автоматические переводы с одного языка на другой, анализ и обработка текстовой информации, голосовые ассистенты и чат-боты.
Далее рассмотрим задачу определения эмоциональной окраски сообщения. Рассмотрим датасет твитов, в котором сообщения заранее размечены по своей эмоциональной тональности. Нам известна эмоциональная окраска каждого твита из выборки: положительная или отрицательная. Задача состоит в построении модели, которая по тексту твита предсказывает его эмоциональную окраску. Классификацию по тональности используют в рекомендательных системах, чтобы понять, понравилось ли людям кафе, кино и так далее.
Рисунок 1. Пример исходных данных.
Для создания и обучения модели, а также обработки данных будет использован язык программирования Python. А также библиотеки:
- scikit-learn – библиотека, предназначенная для машинного обучения, написанная на языке программирования Python и распространяемая в виде свободного программного обеспечения. [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. Пример работы векторизатора CountVectorizer.
Теперь, когда все готово для построения модели, произведем обучение используя разделение через унигарммы.
Инициализируем 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 |
Теперь попробуем сделать то же самое, но с использованием триграмм.
Таблица 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.
Рисунок 3. Примеры стоп-слов для русского языка из библиотеки nltp.
Знаки пунктуации лучше импортировать из модуля String. В нем хранятся различные наборы констант для работы со строками (пунктуация, алфавит и др.).
Теперь нужно обучить модель с учетом токенизации и стоп-слов. Для этого можно собрать новый векторизатор, передав ему на вход:
- какие n-граммы нужны, параметр ngram_range;
- какой токенизатор будет использован, параметр tokenizer;
- какие применяются стоп-слова, параметр stop_words.
Таблица 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-граммы, а также использовать токенизацию и стоп-слова, которые включают в себя пунктуацию. Наиболее эффективным оказалось применение униграмм.
Список литературы
- Обработка естественного языка. – Текст : электронный // Wikipedia : [сайт]. – URL: https://ru.wikipedia.org/wiki/Обработка_естественного_языка (дата обращения: 20.12.2023).
- Scikit-learn. – Текст : электронный // Wikipedia : [сайт]. – URL: https://ru.wikipedia.org/wiki/Scikit-learn (дата обращения: 21.12.2023).
- Natural Language Toolkit. – Текст : электронный // Wikipedia : [сайт]. – URL: https://ru.wikipedia.org/wiki/Natural_Language_Toolkit (дата обращения: 21.12.2023).
- N-грамма. – Текст : электронный // Wikipedia : [сайт]. – URL: https://ru.wikipedia.org/wiki/N-грамма (дата обращения: 20.12.2023).
- Токенизация в обработке естественного языка. – Текст : электронный // fineproxy : [сайт]. – URL: https://fineproxy.org/ru/wiki/tokenization-in-natural-language-processing (дата обращения: 21.12.2023)..