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)
