TL;DR
ReviewSense — техническая система для превращения отзывов клиентов в конкретные бизнес-рекомендации. Работает в два этапа: сначала автоматически группирует похожие отзывы через SBERT-эмбеддинги и косинусное сходство, затем генерирует рекомендации через файн-тюненную LLaMA-3 8B.
Исследователи обнаружили, что наивная группировка отзывов не работает — если просто искать похожие тексты с фиксированным порогом, получаешь либо огромные кластеры с размытыми темами, либо кучу мелких групп с дублирующимися проблемами. Также выяснили, что базовые LLM дают общие советы типа "улучшить сервис" вместо конкретных действий.
Решение — итеративная кластеризация с динамическим снижением порога и файн-тюнинг на датасете "отзыв → конкретная рекомендация". В результате система выделяет 10 самых частых проблем и для каждой генерирует рекомендацию в формате: ISSUE (что не так) + ADVICE (конкретное действие для исправления).
Схема системы
Система требует технической инфраструктуры и работает в несколько этапов:
ШАГ 1 (Код): Фильтрация отзывов → оставляем только негативные/нейтральные (рейтинг < 4)
ШАГ 2 (Код): Генерация эмбеддингов → SBERT модель all-MiniLM-L6-v2 превращает каждый отзыв в вектор
ШАГ 3 (Код): Построение матрицы похожести → косинусное сходство между всеми парами отзывов
ШАГ 4 (Код): Итеративная кластеризация → 10 циклов:
- Находим отзывы с похожестью > порог (старт 0.70)
- Выбираем отзыв с наибольшим числом похожих
- Удаляем весь кластер из матрицы
- Снижаем порог на 0.01
- Повторяем
ШАГ 5 (Файн-тюнинг + API): Для каждого представителя кластера → файн-тюненная LLaMA-3 генерирует рекомендацию
⚠️ Критично: Эта система требует Python-код, GPU для файн-тюнинга, и инфраструктуру для обработки. Это НЕ техника для обычного чата.
Что можно применить в чате
Хотя сама система требует кода, принципы можно использовать вручную:
Задача: У тебя 30 негативных отзывов на стоматологию в Новосибирске. Нужны конкретные улучшения.
Промпт для группировки:
Вот 30 отзывов на стоматологию.
Твоя задача:
1. Сгруппируй отзывы по темам — какие проблемы повторяются чаще всего
2. Для каждой группы выбери ОДИН самый типичный отзыв
3. Покажи только 5 самых частых проблем
Отзывы:
[вставить отзывы]
Промпт для рекомендаций:
Для каждой проблемы дай рекомендацию по формату:
ISSUE: [конкретная проблема из отзыва]
ADVICE: [конкретное действие — что внедрить, кого обучить, какой процесс изменить]
Требования к ADVICE:
- Измеримое действие (не "улучшить", а "внедрить проверку цен вторым сотрудником")
- С указанием КТО делает (администратор, врач, менеджер)
- С указанием КОГДА проверять результат
Проблемы из отзывов:
[вставить 5 типичных отзывов из прошлого шага]
Результат: Модель покажет 5 групп проблем → для каждой даст конкретную рекомендацию в формате ISSUE + ADVICE. Например: "ISSUE: клиент не получил корректную цену. ADVICE: назначить сотрудника для проверки всех цен перед отправкой, следить чтобы каждая цена содержала детали лечения и страховку, подтверждать получение в течение суток."
Почему это работает
Слабость LLM: Если дать модели 100 отзывов сразу и попросить "дай рекомендации", она выдаст общие советы — потому что пытается учесть всё и в итоге размывает фокус. Конкретные проблемы тонут в шуме.
Сильная сторона LLM: Модели хорошо работают с конкретными, изолированными задачами. Если дать один четкий отзыв с явной проблемой, LLM выдаст точную рекомендацию.
Как система использует это: Сначала группирует похожие отзывы (находит паттерны), потом для каждого паттерна берет один типичный пример и генерирует рекомендацию. Так модель фокусируется на одной проблеме за раз — получается конкретно и применимо.
Рычаги управления:
- Число кластеров (в системе 10) → уменьши до 5 для быстрого обзора, увеличь до 15-20 для детального анализа
- Формат рекомендаций (ISSUE + ADVICE) → адаптируй под свои нужды, например добавь PRIORITY или COST
- Критерии группировки (похожесть текста) → можешь группировать по тональности, по упоминаемым людям, по типу услуги
- Фильтры отзывов (только негатив) → можно анализировать позитив чтобы понять что работает хорошо
Адаптация для чата
💡 Упрощённый workflow без кода:
Если у тебя < 50 отзывов, можно обойтись без кластеризации:
Вот 30 отзывов на мой сервис доставки еды в Казани.
Шаг 1: Найди 5 самых частых проблем
Шаг 2: Для каждой проблемы дай рекомендацию:
ISSUE: [что не так]
ADVICE: [конкретное действие — что внедрить, кто делает, как проверить]
Требования к ADVICE:
- Не общие слова ("улучшить качество"), а конкретные действия
- С ответственным лицом (курьер, диспетчер, повар)
- С метрикой для проверки результата
Отзывы:
{твои_отзывы}
🔧 Техника: Двухэтапный анализ → больше конкретики
Вместо одного запроса раздели на два:
Запрос 1:
Сгруппируй эти отзывы по проблемам. Покажи только список проблем без рекомендаций.
Запрос 2 (для каждой проблемы отдельно):
ПРОБЛЕМА: {из первого запроса}
ТИПИЧНЫЕ ОТЗЫВЫ: {2-3 примера}
Дай одну конкретную рекомендацию. Что внедрить? Кто делает? Как проверить эффект?
Почему это лучше: модель фокусируется на одной проблеме за раз → рекомендация получается детальнее.
Ограничения
⚠️ Требует инфраструктуры: Полная система нуждается в Python-коде, файн-тюнинге LLM, и GPU. Для работы в чате доступны только принципы, не автоматическая обработка.
⚠️ Файн-тюнинг специфичен: Система обучена на 70 примерах рекомендаций — для другой индустрии может давать менее точные советы (хотя структуру ISSUE + ADVICE можно применить везде).
⚠️ Много отзывов = долго вручную: Если у тебя 500+ отзывов, группировка через чат займёт много времени и токенов. Система с кодом обработает 100 отзывов за 3 секунды.
⚠️ Нет универсальных порогов: Магические числа (порог 0.70, снижение 0.01) подобраны вручную для датасета стоматологий — для других данных могут не работать.
Как исследовали
Команда собрала отзывы с Google, Facebook, Yelp для разных индустрий — стоматология, автосервисы, здравоохранение, ритейл. Сначала очистили данные: удалили спам, скрыли персональные данные, отфильтровали отзывы на других языках. Для анализа взяли только негативные и нейтральные (рейтинг < 4) — позитивные не дают инсайтов для улучшений.
Протестировали 5 подходов к кластеризации:
- Knowledge Graphs — строили граф связей между сущностями в каждом отзыве через GPT-3.5, потом группировали по похожим узлам. Результат: детально, но медленно (78 сек на 100 отзывов), специфика отдельных предложений размывается при агрегации.
- Super Graph — объединяли графы из всех отзывов в один большой граф, где вес рёбер = частота связи. Результат: быстрее (54 сек), но потеря уникальных нюансов.
- BERT word-level — группировали по похожести на уровне слов. Результат: быстро (9 сек), но не ловит контекст — отзывы с разными проблемами попадали в один кластер из-за общих слов.
- SBERT baseline — использовали sentence embeddings для понимания смысла. Результат: быстро (3 сек) и качественнее чем BERT, но кластеры размытые.
- SBERT итеративный (финальный) — добавили динамическое снижение порога похожести. Результат: та же скорость (3.2 сек), но чёткие кластеры без пересечений тем.
Почему выбрали SBERT итеративный: all-MiniLM-L6-v2 обучена на 1+ миллиарде пар предложений, даёт хороший баланс точности и скорости. Сравнивали с all-mpnet-base-v2 (лучше по качеству, но в 5 раз медленнее на CPU) — выбрали MiniLM.
Для LLM тестировали 5 версий:
- v1 (Mistral 7B) — давала многословные общие советы
- v2 (QLoRA Mistral) — обучили на 70 парах "отзыв → рекомендация", получили более точные ответы
- v3 (+ FlashAttention-2) — ускорили с 38 до 16 сек на отзыв
- v4 (Llama3 8B) — качество output резко выросло, добавили chain-of-thought промпты
- v5 - ReviewSense (финал) — улучшили промпт для получения структурированных ISSUE + ADVICE
Что удивило: BERT на уровне слов оказался бесполезен для кластеризации отзывов — хотя работает быстро, но группирует по словам, а не по смыслу. А итеративное снижение порога (казалось бы, простая идея) дало кластеры на порядок чище — избежали ситуаций когда один отзыв попадает в несколько групп.
Оценка качества: Наняли QA-команду, которая вручную проверяла кластеры (80%+ отзывов в кластере должны быть про одну тему) и рекомендации (должны быть конкретными и применимыми). Когда LLM выдавала расплывчатые советы, дорабатывали промпт и переобучали — пока не получили стабильно actionable рекомендации.
Ресурсы
ReviewSense: Transforming Customer Review Dynamics into Actionable Business Insights — Siddhartha Krothapalli (BITS Pilani), Tridib Kumar Das (KIIT), Praveen Kumar & Naveen Suravarpu (Birdeye), Pratik Narang (BITS Pilani)
Использованные модели: LLaMA-3 8B, Mistral 7B, SBERT (all-MiniLM-L6-v2), GPT-3.5 (для knowledge graphs)
Техники: QLoRA fine-tuning, FlashAttention-2, ONNX для serving
