3,583 papers
arXiv:2509.20953 74 25 сент. 2025 г. FREE

Few-shot Aspect Mining: извлечение фич и sentiment из отзывов через примеры

КЛЮЧЕВАЯ СУТЬ
Парадокс отзывов: клиент ставит 4 звезды, но пишет про критический баг. Или 2 звезды с текстом 'приложение норм'. ~20% отзывов расходятся с оценкой — числовой рейтинг врёт. Метод Few-shot Aspect Mining позволяет извлечь из отзыва конкретные фичи, оценку каждой и рекомендации пользователя. Цепочка из трёх промптов разбивает анализ: первый находит фичи по примерам (few-shot), второй оценивает каждую, третий вытаскивает рекомендации. Вместо 'отзыв негативный' получаешь 'доставка — отлично, интерфейс — ужасно, рекомендация: упростить оформление'.
Адаптировать под запрос

TL;DR

Few-shot Aspect Mining — метод, который извлекает из отзыва конкретные фичи (аспекты), оценку каждой фичи и рекомендации пользователя. Работает через цепочку промптов: первый находит фичи по примерам (few-shot), второй классифицирует sentiment каждой фичи, третий вытаскивает рекомендации. Вместо общего "негативный отзыв" получаешь "доставка — отлично, интерфейс — ужасно, рекомендация: упростить оформление заказа".

Звёздный рейтинг врёт. Исследователи обнаружили: ~20% отзывов расходятся с оценкой. Пользователь ставит 4 звезды, но пишет про критический баг. Или 2 звезды с текстом "приложение норм, но одна функция бесит". Числовая оценка — это эмоция момента. Текст — конкретика. Базовые sentiment-анализаторы (VADER) считают 88% отзывов нейтральными — полная слепота. Модели ошибаются потому что не понимают контекст: "неплохо" воспринимают как негатив, сарказм пролетает мимо, доменная лексика ("лагает", "глючит") не распознаётся.

Few-shot + chaining решает проблему структурно. Даёшь модели 3-5 примеров как выглядят аспекты в твоём домене → модель ловит паттерн и находит все фичи в отзыве. Потом второй промпт берёт каждую фичу и оценивает sentiment. Третий — извлекает что пользователь советует исправить. Получаешь структурированные данные вместо "отзыв негативный".


🔬

Схема метода

ШАГ 1: Few-shot извлечение аспектов
→ список фич упомянутых в отзыве

ШАГ 2: Sentiment каждой фичи (отдельный промпт) 
→ для каждой фичи: positive/negative/neutral

ШАГ 3: Извлечение рекомендаций (отдельный промпт)
→ что пользователь советует исправить

Каждый шаг — отдельный запрос к модели. Можно делать в одном чате последовательно.


🚀

Пример применения

Задача: Ты продакт-менеджер банковского приложения. Клиент написал: "Приложение удобное, перевод по номеру телефона работает быстро. Но блокировка карты через приложение не работает — приходится звонить в поддержку. Добавьте нормальную кнопку блокировки!"

Промпт (Шаг 1 — извлечение аспектов):

Ты анализируешь отзывы на банковское приложение. Извлеки все конкретные фичи/аспекты, которые упоминает пользователь.

Примеры:
- Отзыв: "Интерфейс классный, но постоянно вылетает при оплате" 
 Аспекты: интерфейс, оплата, стабильность
 
- Отзыв: "Перевод денег работает, биометрия тормозит"
 Аспекты: перевод денег, биометрия

Теперь извлеки аспекты из этого отзыва:
"{вставить отзыв клиента}"

Формат ответа: список аспектов через запятую.

Результат (Шаг 1): Модель вернёт: "удобство приложения, перевод по номеру телефона, блокировка карты, техподдержка"

Промпт (Шаг 2 — оценка sentiment):

Для каждого аспекта определи sentiment: positive, negative или neutral.

Отзыв: "{вставить отзыв}"
Аспекты: {вставить список из Шага 1}

Формат ответа:
- аспект 1: sentiment
- аспект 2: sentiment

Результат (Шаг 2):

  • удобство приложения: positive
  • перевод по номеру телефона: positive
  • блокировка карты: negative
  • техподдержка: neutral

Промпт (Шаг 3 — рекомендации):

Извлеки конкретные рекомендации пользователя из отзыва.

Отзыв: "{вставить отзыв}"

Формат: что нужно сделать (императив, действие)

Результат (Шаг 3): "Добавить функцию блокировки карты в приложении"

Итого: Вместо "отзыв смешанный" получил карту: что работает (переводы), что сломано (блокировка), что исправить (добавить кнопку). Масштабируешь на 100 отзывов — видишь топ проблем по фичам.


🧠

Почему это работает

LLM плохо классифицирует sentiment "в целом". Отзыв может содержать одновременно похвалу и критику. Общий sentiment размазывает детали — получается "нейтрально", хотя там конкретная проблема рядом с похвалой. Базовые модели (VADER) вообще считают 88% отзывов нейтральными — слепота на уровне "всё серое".

LLM отлично ловит паттерны по примерам. Дал 3-5 примеров аспектов в твоём домене (для банка: "перевод", "блокировка", "биометрия") — модель сразу понимает что искать. Few-shot работает как калибровка: показал что такое "аспект" в твоей теме → модель ищет похожие сущности в новых текстах.

Разделение на шаги снимает двусмысленность. Один промпт делает одно дело: находит аспекты. Другой — оценивает каждый. Третий — извлекает действия. Чем проще задача в промпте — тем точнее результат. Пытаешься всё в одном запросе — модель путается. Последовательность шагов — это структурирование мышления модели.

Рычаги управления:

  • Количество few-shot примеров: 2-3 для простых доменов, 5-7 для специфичных (медицина, юриспруденция). Больше примеров = точнее паттерн, но дороже токены.
  • Формат вывода: Можешь попросить JSON вместо текста, если нужна автоматизация. Убери "формат ответа" — получишь развёрнутое объяснение (полезно для дебага).
  • Гранулярность аспектов: Можешь попросить детализировать ("разделяй 'интерфейс' на 'дизайн', 'навигацию', 'скорость'") или агрегировать ("объединяй все про оплату в один аспект").

📋

Шаблон промпта

📌

Шаг 1: Извлечение аспектов (few-shot)

Ты анализируешь отзывы на {тип продукта/сервиса}. Извлеки все конкретные фичи/аспекты, которые упоминает пользователь.

Примеры:
- Отзыв: "{пример_отзыва_1}"
 Аспекты: {список_аспектов_1}
 
- Отзыв: "{пример_отзыва_2}"
 Аспекты: {список_аспектов_2}

[добавь ещё 1-3 примера по необходимости]

Теперь извлеки аспекты из этого отзыва:
"{целевой_отзыв}"

Формат ответа: список аспектов через запятую.
📌

Шаг 2: Классификация sentiment

Для каждого аспекта определи sentiment: positive, negative или neutral.

Отзыв: "{целевой_отзыв}"
Аспекты: {список_аспектов_из_шага_1}

Формат ответа:
- аспект 1: sentiment
- аспект 2: sentiment
📌

Шаг 3: Извлечение рекомендаций

Извлеки конкретные рекомендации или пожелания пользователя из отзыва.

Отзыв: "{целевой_отзыв}"

Формат: императив (что нужно сделать). Если рекомендаций нет — напиши "рекомендаций не обнаружено".

Что подставлять:

  • {тип продукта/сервиса} — банковское приложение, доставка еды, маркетплейс
  • {пример_отзыва} — реальные отзывы из твоей темы (2-5 примеров)
  • {список_аспектов} — фичи из твоих примеров
  • {целевой_отзыв} — отзыв который анализируешь

⚠️

Ограничения

⚠️ Few-shot не ловит редкие аспекты: Если в примерах не было упоминаний "тёмной темы", модель может пропустить её в новых отзывах. Расширяй набор примеров или добавляй дополнительный промпт "есть ли ещё аспекты, которые я не указал в примерах?"

⚠️ Короткие отзывы — меньше деталей: "Всё плохо" даст аспект "общее впечатление: negative", но без конкретики. Метод работает лучше на развёрнутых отзывах (2+ предложения).

⚠️ Sentiment субъективен для неоднозначных фраз: "Неплохо" — это positive или neutral? Модель может трактовать по-разному. Если важна точность — добавь в промпт правило: "Неплохо = positive, если нет явного негатива дальше".

⚠️ Три запроса вместо одного: Каждый шаг — отдельный запрос, дороже по токенам. Для массовой обработки можно объединить шаги 1-2 в один промпт (но качество может снизиться).


🔍

Как исследовали

Исследователи взяли 11 тысяч размеченных отзывов из AWARE датасета (приложения из Google Play: игры, соцсети, продуктивность) — каждый отзыв уже содержал hand-labeled аспекты и sentiment от людей. Сравнили LLM-подход (GPT-4 с few-shot промптами) с файн-тюненной DeBERTa-v3-large (трансформер на 847 млн параметров, обученный специально на этой задаче).

Результат: GPT-4 показал F1 = 0.892, файн-тюн модель — 0.841. Прирост +5.1 процентных пункта. Это значит LLM с правильным промптом догоняет (и чуть перегоняет) специализированную обученную модель без обучения вообще — только на примерах в промпте.

Почему LLM выиграла: Few-shot примеры дали модели контекст домена. DeBERTa обучена на статичном датасете и не адаптируется к новым терминам ("глючит", "лагает", "зависает" могут быть синонимами, но модель их не связывает). GPT-4 улавливает семантику на лету.

Но sentiment классификация слабее: Для оценки тональности каждого аспекта взвешенный F1 всего 0.594. Почему? Модель хорошо ловит neutral (F1 = 0.645), но плохо различает positive vs negative в неоднозначных случаях. "Неплохо" — это positive? "Могло быть лучше" — neutral или negative? Контекст размыт. Классические методы (VADER) вообще провалились: 88.2% отзывов посчитали нейтральными (реальность: только 47.9% neutral). LLM балансирует лучше (22.3% positive, 29.8% negative, 47.9% neutral), но всё равно есть куда расти.

Неожиданная находка: Почти 20% отзывов имеют расхождение между звёздами и текстом. Пользователь ставит 4-5 звёзд, но текст полон критики ("приложение норм, но функция X убита — исправьте!"). Или наоборот: 1-2 звезды с текстом "в целом ок, просто одна штука бесит". Рейтинг = эмоция секунды. Текст = аргументированная оценка.


📄

Оригинал из исследования (опционально)

Из статьи — пример промпта для few-shot aspect extraction:

You are analyzing app reviews. Extract all specific features or aspects mentioned by the user.

Examples:
- Review: "Great interface but crashes during payment"
 Aspects: interface, payment, stability
 
- Review: "Money transfers work fine, biometrics lag"
 Aspects: money transfers, biometrics

Now extract aspects from this review:
"{target_review}"

Output format: comma-separated list of aspects.

Контекст: Исследователи использовали этот промпт для GPT-4 API, чтобы извлекать аспекты из каждого отзыва в датасете AWARE. Результаты затем сравнивались с human-labeled аспектами из разметки.


💡

Адаптации и экстраполяции

💡 Адаптация для массовой обработки: Вместо трёх запросов на каждый отзыв объедини шаги 1-2 в один:

Извлеки аспекты из отзыва и для каждого укажи sentiment.

Отзыв: "{отзыв}"

Формат:
- аспект 1: sentiment
- аспект 2: sentiment

Потеряешь немного точности, но сэкономишь токены и время при обработке 100+ отзывов.

🔧 Техника: добавить confidence score → видеть сомнительные оценки

Модифицируй промпт для sentiment:

Для каждого аспекта определи sentiment (positive/negative/neutral) и уверенность (low/medium/high).

Формат:
- аспект: sentiment (confidence)

Получишь:

  • блокировка карты: negative (high)
  • интерфейс: positive (medium)

Фильтруй по low confidence — это кейсы где модель не уверена, их стоит перепроверить вручную.

💡 Адаптация для анализа конкурентов: Возьми отзывы на продукт конкурента, извлеки аспекты + sentiment. Получишь карту: что у них работает, что сломано. Используй для приоритизации своих фич.


🔗

Ресурсы

"Beyond Stars: Bridging the Gap Between Ratings and Review Sentiment with LLM"

Najla Zuhir, Amna Mohammad Salim, Parvathy Premkumar, Moshiur Farazi

University of Doha for Science and Technology, 2025

Датасеты:

  • AWARE Dataset — 11k отзывов с разметкой аспектов (доступен на Zenodo)
  • Spotify Reviews Dataset — 80k+ отзывов (Kaggle)
  • Google Play Store Reviews — 12k+ отзывов (Kaggle)

Baseline модели:

  • VADER (лексиконный sentiment analyzer)
  • DeBERTa-v3-large fine-tuned на AWARE (Hugging Face: yangheng/deberta-v3-large-absa-v1.1)

📋 Дайджест исследования

Ключевая суть

Парадокс отзывов: клиент ставит 4 звезды, но пишет про критический баг. Или 2 звезды с текстом 'приложение норм'. ~20% отзывов расходятся с оценкой — числовой рейтинг врёт. Метод Few-shot Aspect Mining позволяет извлечь из отзыва конкретные фичи, оценку каждой и рекомендации пользователя. Цепочка из трёх промптов разбивает анализ: первый находит фичи по примерам (few-shot), второй оценивает каждую, третий вытаскивает рекомендации. Вместо 'отзыв негативный' получаешь 'доставка — отлично, интерфейс — ужасно, рекомендация: упростить оформление'.

Принцип работы

Три последовательных запроса вместо одного мутного. Первый промпт извлекает все упомянутые фичи по примерам — дал модели 3-5 примеров аспектов в твоём домене (для банка: 'перевод', 'блокировка', 'биометрия') → модель ловит паттерн и ищет похожие сущности в новом отзыве. Второй берёт каждую фичу и оценивает sentiment отдельно (positive/negative/neutral). Третий вытаскивает что пользователь советует исправить. Каждый шаг делает одно дело — чем проще задача в промпте, тем точнее результат.

Почему работает

LLM плохо классифицирует sentiment 'в целом' — отзыв содержит одновременно похвалу и критику, общая оценка размазывает детали. Базовые модели (VADER) вообще считают 88% отзывов нейтральными — полная слепота. Few-shot калибрует модель под твой домен: показал 3-5 примеров аспектов → модель ищет похожие сущности в новых текстах. Разделение на шаги снимает двусмысленность — один промпт делает одно дело, модель не путается между задачами 'найти фичи' и 'оценить каждую'.

Когда применять

Анализ отзывов на продукты/сервисы → конкретно для извлечения структурированной обратной связи, особенно когда нужно понять что работает и что сломано по фичам. Полезно для продакт-менеджеров (приоритизация фич из 100+ отзывов), маркетологов (карта болей клиентов), саппортов (топ проблем). НЕ подходит для коротких отзывов 'Всё плохо' — метод работает на развёрнутых текстах (2+ предложения с деталями).

Мини-рецепт

1. Шаг 1 – Извлечение аспектов (few-shot): Дай модели 3-5 примеров отзывов с выделенными аспектами из твоего домена. Попроси извлечь аспекты из целевого отзыва. Формат: Ты анализируешь отзывы на {продукт}. Примеры: [отзыв 1 → аспекты], [отзыв 2 → аспекты]. Извлеки аспекты из: {целевой отзыв}. Формат: список через запятую
2. Шаг 2 – Оценка каждой фичи: Подставь список аспектов из шага 1 и попроси оценить каждый: positive/negative/neutral. Формат: Для каждого аспекта определи sentiment. Отзыв: {текст}. Аспекты: {список из шага 1}. Формат: аспект 1: sentiment
3. Шаг 3 – Рекомендации: Извлеки что пользователь советует исправить. Формат: Извлеки конкретные рекомендации из отзыва: {текст}. Формат: императив (что сделать). Если рекомендаций нет — напиши 'не обнаружено'

Примеры

[ПЛОХО] : Проанализируй отзыв и скажи позитивный он или негативный
[ХОРОШО] : Три последовательных промпта: Шаг 1: Ты анализируешь отзывы на банковское приложение. Извлеки все фичи. Примеры: - 'Интерфейс классный, но оплата вылетает' → интерфейс, оплата, стабильность - 'Перевод работает, биометрия тормозит' → перевод, биометрия Отзыв: 'Переводы быстрые, но блокировка карты не работает — приходится звонить в поддержку' Формат: список через запятую Шаг 2: Для каждого аспекта определи sentiment: positive/negative/neutral. Отзыв: {тот же} Аспекты: переводы, блокировка карты, техподдержка Результат: переводы — positive, блокировка — negative, техподдержка — neutral. Рекомендация: 'Добавить функцию блокировки карты в приложении'. Масштабируешь на 100 отзывов — видишь топ проблем по фичам.
Источник: Beyond Stars: Bridging the Gap Between Ratings and Review Sentiment with LLM
ArXiv ID: 2509.20953 | Сгенерировано: 2026-01-12 02:58

Работа с исследованием

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

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с