Привет, меня зовут Лиза — в Naumen я занимаюсь задачами обработки естественного языка (NLP). До этого я работала с компьютерным зрением, поэтому, перейдя в Naumen, сменила не только компанию, но и специализацию. Мой первый проект в Naumen стал настоящим вызовом — нужно было реализовать систему аспектно‑ориентированного анализа тональности (ABSA) на русском языке.

Лиза Талынкова

ML-инженер отдела анализа данных и машинного обучения

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

Почему ABSA вообще важен?

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

Вот, например, отзыв: «Еда вкусная, но столы грязные. Нормальный в целом ресторан».

Традиционная система сказала бы: «нейтрально». Но для бизнеса это неинформативно — нужно понять, что понравилось, а что нет. Именно этим и занимается ABSA: не дает общую оценку всему тексту, а выделяет отдельные аспекты и определяет тональность мнений о каждом.

Например
  • «еда вкусная» → позитивная тональность

  • «столы грязные» → негативная тональность

  • «нормальный ресторан» → нейтральная тональность

ABSA помогает:

  • автоматически анализировать отзывы,

  • персонализировать ответы поддержки,

  • находить проблемные зоны в продуктах.

Как работает ABSA?

С технической точки зрения ABSA извлекает четыре вида сущностей:

  • Аспект — сущность, о которой высказано мнение, например, «каша».

  • Мнение — что сказано об аспекте, например, «вкусная».

  • Полярность — оценка мнения, например, в данном случае позитивная тональность.

  • Категория аспекта — общая группа аспекта, например, «Еда».

На практике чаще решаются такие подзадачи:

  • извлечение пар аспект‑мнение об аспекте,

  • извлечение пар аспект‑полярность мнения,

  • извлечение триплетов аспект‑мнение об аспекте‑полярность мнения,

  • извлечение квартетов аспект‑мнение об аспекте‑полярность мнения — категория аспекта.

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

Какие датасеты и решения уже существуют?

Большинство решений по извлечению триплетов в качестве бенчмарков используют датасеты SemEval 2014 (Laptop, Restaurant), SemEval 2015 (Laptop, Restaurant), SemEval 2016 (Laptop, Restaurant). Но даже они не размечены полностью — например, нет сущностей, выражающих мнение об аспектах, только аспекты и полярности мнения об аспектах. Поэтому приходится доразмечать данные самостоятельно.

Современные подходы к ABSA можно разделить на две группы:

  • BERT‑подобные модели — эмбеддинги + нейросети, извлекающими триплеты.

  • LLM (GPT, T5, LLaMA) — использование промптов или файнтьюнинг LLM.

Плюсы BERT-моделей
  • меньше галлюцинаций,

  • умеренные требования к ресурсам для локального инференса.

Плюсы LLM
  • часто не требуют обучения и большого количества данных благодаря промптингу,

  • в ближайшее время будут активно пополняться новыми инструментами.

Но LLM требуют больше ресурсов или доступа к API, что не всегда возможно при работе с персональными данными. Кроме того, LLM могут быть подвержены галлюцинациям.

Что выбрали мы?

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

В итоге остановились на этих подходах:

  1. A Span‑level Bidirectional Network for Aspect Sentiment Triplet Extraction (SBN).
    Эта модель показывает на бенчмарках результаты, близкие к SOTA, при этом требует умеренные вычислительные ресурсы и является архитектурно более простой, если сравнивать с другими SOTA‑решениями. Ее ключевая особенность — извлечение всех возможных сочетаний слов с заданной максимальной длиной в предложении, которые рассматриваются как кандидаты на извлечение пары аспект‑мнение. После извлечения эмбеддингов, модель с двумя декодерами формирует сами пары: один декодер сначала ищет аспект, затем соответствующее мнение; второй — наоборот. Такая двунаправленная стратегия позволяет повысить полноту и точность извлечения.

  2. Файнтьюнинг LLaMA 3 с 8 миллиардами параметров.
    Мы выбрали эту модель как одну из наиболее популярных опенсорсных моделей, имеющую успешные кейсы применения в задачах ABSA для извлечения пар аспект‑полярность мнения об аспекте. Она показалась нам интересной для оценки применимости LLM к более сложной задаче извлечения триплетов.

Русскоязычные датасеты

В большинстве популярных ABSA‑решений используются англоязычные датасеты, поэтому для русскоязычного текста таких ресурсов гораздо меньше. Ниже — обзор существующих датасетов для задачи ABSA:

Название датасета

Описание датасета

Выделенные сущности

Количество сэмплов

Ссылка на статью

Aspect-Based Sentiment Analysis of Russian Hotel Reviews

Отзывы об отелях в формате Excel, 7 категорий, оценка по пятибалльной шкале

Аспектная категория + оценка категории

50 329

CEUR-WS 2018

RuSentNE-2023

Выдержки из новостей, csv‑таблица. В каждой строке указаны предложение, сущность, ее тип, метка тональности (1, 0, -1), символы начала и конца сущности

Аспект + полярность мнения об аспекте

9 501

Диалог 2023

SentiRuEval-2016

XML‑файлы для банков и телекома, аспектами выступают названия компаний, отмеченные метками тональности (-1, 0, 1)

Аспект (название компании) + полярность мнения об аспекте

4 894 для телеком домена, 

6 980 — для банковского

SentiRuEval-2015

XML‑файлы о ресторанах и машинах. Каждому тексту соответствует список сущностей, каждой из сущностей соответствует аспект и метка (pos, neg, neutral), а также индексы начала и конца слова в тексте

Аспектная категория + аспект + полярность мнения об аспекте

406 о ресторанах,

420 — о машинах

RuOpinionNE-2024

Предложения из новостных источников. Внутри каждого — выделены сущности, выражающие мнение, а также его источник. Каждому мнению соответствует метка тональности (positive, negative, neutral)

Аспект + мнение об аспекте + полярность мнения об аспекте

На момент начала работы единственным открытым русскоязычным датасетом с разметкой триплетов аспект‑мнение‑полярность мнения был RuOpinionNE-2024. Мы выбрали его в качестве эталонного образца: по его структуре и принципам разметки были обработаны другие наборы данных.

Однако у RuOpinionNE-2024 есть важное ограничение: тексты в нем представлены отдельными предложениями без контекста, тогда как наша задача предполагала работу с отзывами большей длины, содержащими несколько аспектов и сложные формулировки.

Поэтому мы доразместили датасет SentiRuEval-2015 — в нем содержатся тексты отзывов о ресторанах и автомобилях, которые включают сразу несколько аспектов в одном тексте. Мы провели его доразметку по следующей схеме:

  1. Автоматическое извлечение мнений по уже размеченным аспектам с использованием LLM (Mistral API).

  2. Ручная валидация полученных результатов с привлечением асессоров.

Другие датасеты не были использованы по следующим причинам:

  • В Aspect‑Based Sentiment Analysis of Russian Hotel Reviews не выделены конкретные аспекты.

  • В SentiRuEval-2016 в качестве аспектов используются специфические названия компаний.

  • RuSentNE-2023 был частично переработан и дополнен в RuOpinionNE-2024, поэтому мы выбрали именно его как актуальную версию.

Все сэмплы в датасетах были приведены к единому формату:

{"id": "0", #номер сэмпла
"text": "Президент Башкирии Муртаза Рахимов в очередной раз решил поменять главу своей администрации.", #текст
"aspects_opinions": # список, состоящий из словарей с парами аспект-мнение с соответствующими атрибутами 
    
    [{"aspect": #список атрибутов аспекта
    [["главу", "своей", "администрации"], #слова, из которых состоит аспект
    [[66, 70], [72, 76], [78, 90]], #индексы в предложении начала и конца слов, из которых состоит аспект     
    [10, 11, 12]], #номера слов в предложении
   
   "opinion": #список атрибута мнения
    [["поменять"], #слова, из которых состоит мнение
    [[57, 64]], #индексы в предложении начала и конца слов, из которых состоит мнение
    [9]], #номера слов в предложении
   "opinion_polarity": "NEG"}] #полярность мнения (NEG, POS)
}

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

Как обучали?

Для обучения обеих моделей использовалась видеокарта NVIDIA A40 48 ГБ.

  • В случае с SBN были сохранены параметры обучения, указанные в оригинальной статье. Единственное изменение — уменьшение размера батча (batch_size = 6), поскольку часть текстов в разработанном датасете значительно превышала по длине тексты в исходных бенчмарках.

  • Модель LLaMA 3 была дообучена с использованием техник Supervised Fine‑Tuning (SFT) и Low‑Rank Adaptation (LoRA). Количество тренируемых параметров составило 66 091 008, что составляет 0.82% от общего числа параметров.

Пример работы модели

Для иллюстрации сравнения моделей мы использовали длинный отзыв, содержащий как положительные, так и отрицательные оценки:

«В прошлую субботу посетили с друзьями это заведение. Начилось все не с очень приятных моментов, т.к когда мы пришли туда, то оказалось что нет свободных столиков и только спустя наверное минут 20 официант все нашел нам подходящий стол. В целом заведение понравилось, и обстановка, и интерьер, и меню. Из плюсов: достаточно быстро обслуживание несмотря на огромное количество людей, хорошая атмосфера(играли диджеи) для субботнего вечера, большой выбор еды и алкогольных напитков(хотя мы так и не поели, но алкоголя было выпито много))). Минусы: показалось, что слишком громко играла музыка; отсутствие подсветки над столом(хотя над некоторыми другими свет все же был), из-за чего пришлось подсвечивать меню телефоном и наверное главный минус для меня-это то, что в таком большом заведении не оказалось место для гардероба, вследствие чего наши куртки постоянно падали на пол с дивана. За наш стол попросили депозит 5 тыс, но для большой компании это не так уж много, мы, например, оставили там 8 тыс. Но несмотря на все минусы, остались вполне довольными этим заведением, думаю что посетим еще не раз. Ну и приятная мелочь в конце, попросили у официанта дисконтную карту и он нам ее дал. Так что будет лишний повод зайти и воспользоваться скидкой»

Эталонные предсказания

"aspects_opinions": [{"aspect": [["официант"], "opinion": [["нашел", "нам", "подходящий", "стол"], "opinion_polarity": "POS"}, {"aspect": [["заведение"], "opinion": [["В", "целом", "понравилось"], "opinion_polarity": "POS"}, {"aspect": [["обстановка"], "opinion": [["понравилось"], "opinion_polarity": "POS"}, {"aspect": [["интерьер"], "opinion": [["понравилось"], "opinion_polarity": "POS"}, {"aspect": [["меню"], "opinion": [["понравилось"], "opinion_polarity": "POS"}, {"aspect": [["обслуживание"], "opinion": [["быстро"], "opinion_polarity": "POS"}, {"aspect": [["атмосфера"], "opinion": [["хорошая", "играли", "диджеи"], "opinion_polarity": "POS"}, {"aspect": [["еды"], "opinion": [["большой", "выбор"], "opinion_polarity": "POS"}, {"aspect": [["алкогольных", "напитков"], "opinion": [["большой", "выбор"], "opinion_polarity": "POS"}, {"aspect": [["музыка"], "opinion": [["слишком", "громко", "играла"], "opinion_polarity": "NEG"}, {"aspect": [["заведении"], "opinion": [["не", "оказалось", "место", "для", "гардероба"], "opinion_polarity":"NEG"}, {"aspect": [["депозит", "5", "тыс"], "opinion": [["для", "большой", "компании", "это", "не", "так", "уж", "много"], "opinion_polarity": "POS"}, {"aspect": [["заведением"], "opinion": [["остались", "вполне", "довольными"], "opinion_polarity": "POS"}, {"aspect": [["официанта"], "opinion": [["попросили", "дисконтную", "карту", "и", "он", "нам", "ее", "дал"], "opinion_polarity":"POS"}]}

Предсказания SBN

[('обстановка', 'понравилось', 'positive'), ('обслуживание', 'быстро', 'positive'), ('еды', 'большои выбор', 'positive'), ('официанта', 'попросили у официанта дисконтную карту и он нам ее дал', 'positive'),('депозит 5 тыс', 'для большои компании это не так уж много', 'positive'),('интерьер', 'понравилось', 'positive'), ('алкогольных напитков', 'большои выбор', 'positive'), ('официант', 'нашел нам подходящии стол', 'positive'), ('заведение', 'в целом заведение понравилось', 'positive'),('атмосфера', 'хорошая атмосфера ( играли диджеи', 'positive'),('заведении', 'не оказалось место для гардероба', 'negative'), ('меню', 'понравилось', 'positive'), ('заведением', 'остались вполне довольными', 'positive'), ('музыка', 'слишком громко играла', 'negative'}]

Предсказания LLaMA

[('официанта', 'попросили дисконтную карту и он нам ее дал', 'Positive'), ('заведение', 'В целом понравилось', 'Positive'), ('заведении', 'не оказалось место для гардероба', 'Negative'), ('официант', 'нашел нам подходящий стол', 'Positive'), ('еды', 'большой выбор', 'Positive'), ('заведением', 'остались вполне довольными', 'Positive'), ('обслуживание', 'быстро', 'Positive'), ('музыка', 'слишком громко играла', 'Negative'), ('интерьер', 'понравилось', 'Positive'), ('обстановка', 'понравилось', 'Positive'), ('атмосфера', 'хорошая играли диджеи', 'Positive'), ('алкогольных напитков', 'большой выбор', 'Positive'), ('меню', 'понравилось', 'Positive')]

Обе модели в целом неплохо справляются с извлечением триплетов, сравнить их можно только замерив метрики на тестовом датасете.

Метрики и сравнение моделей

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

Для оценки качества извлечения триплетов использовались следующие метрики:

  • Aspect Precision / Recall / F1 — качество выделения аспектов;

  • Opinion Precision / Recall / F1 — качество выделения мнений;

  • APCE Precision / Recall / F1 — качество выделения пар аспект‑полярность аспекта;

  • Pair Precision / Recall / F1 — качество выделения пар аспект‑мнение об аспекте;

  • Triple Precision / Recall / F1 — качество выделения триплетов как основная метрика.

Метрики оцениваются по строгим критериям — малейшее отклонение от эталонной разметки влияет на итоговую оценку.

SBN показала более высокие результаты по всем метрикам по сравнению с LLaMA. Это объясняется тем, что BERT‑подобная модель меньше подвержена галлюцинациям. В то же время существует гипотеза, что LLaMA может быть более гибкой и устойчивой при смене домена, так как использует обширные языковые знания, накопленные в процессе обучения.

Что дальше?

Практика показывает, что повышение количества данных с высокой вероятностью приводит к повышению качества ML‑решений. Поэтому следующий шаг — расширение датасета. Мы планируем использовать датасет отзывов от Яндекса, а разметку автоматизировать с помощью LLM.

Если вы хотите внедрить ABSA

Комментарии (0)