Анализ отзывов с использованием GPT-моделей без дообучения: проблемы и техники решения с помощью промпт-инжиниринга

Анализ отзывов с использованием GPT-моделей без дообучения: проблемы и техники решения с помощью промпт-инжиниринга

На днях мы запускали в одном из своих сервисов (pro-labs.ru) анализ отзывов. Разумеется, чтобы сделать конфетку и ускорить аналитику для клиентов, каждый отзыв надо было не только разложить на негатив, позитив и нейтраль, но и раскидать по полноценным категориям. Их у нас, кстати, аж 13.

Задача казалась на "два пальца" для современных LLM. На практике, конечно, вылезли такие заморочки, что пришлось серьёзно поломать голову.

Fine-tuning и дообучение модели мы не использовали — исключительно из соображений коммерческой выгоды. Ну или жадности, кому как больше нравится.

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

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

Проблема номер раз — человеческий фактор.

Положительный отзыв при 1 звезде — просто клацнули не туда. Определение тональности мы доверяем LLM. Здесь всё просто: если отзыв вызывает сомнения — лучше предложить примеры и уточнить.

Дальше идёт контекст— ещё один знатный косяк.

В простых алгоритмах идёт поиск по словам, и текст автоматически цепляется к категории.

Пример:

Текст отзыва: "Был в лаборатории в понедельник, с собой было оборудование для работы, не успел отнести в студию, на входе администраторы не пустили, и никаких камер хранения. Хорошо, что договорились оставить у них на ресепшене."

Очевидно, если искать по словам, тут и «Оборудование», и «Персонал». Даже GPT по умолчанию выдаст категорию "Оборудование", хотя само упоминание оборудования здесь вообще не ключевое. Если попросить модель обосновать выбор, она ответит что-то вроде: "упоминается оборудование, значит, к нему и относится".

И так же с "Временем" — будь то время работы, ожидание, сожаления. Без контекста система путается. Например, фраза "Ждал долго, но, к счастью, лаборатория работает до позднего вечера" может привести к путанице. Простая система может зацепиться за слово "работает" и "счастье" и определить как положительное, хотя на деле ожидание — это явный негатив.

Ещё одна проблема —сарказм и ирония. Фразы типа "Прекрасно, что я провел три часа в очереди" простейшие алгоритмы вполне могут посчитать позитивом, ориентируясь только на слово «прекрасно».К тому же простейшие алгоритмы вообще не учитывают опечатки, сокращения, сленг и узкоспециализированные термины, что особенно критично для отраслей с профессиональной лексикой.

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

Специализированные нейросети для категоризации, конечно, существуют, но их обслуживание и дообучение — дело непростое и трудозатратное. К тому же модели быстро "устаревают" и перестают учитывать актуальные изменения языка.Поэтому, думаю, понятно, что проще делегировать это LLM.

Всё, что нужно — грамотно продуманные инструкции. Стандартный промпт "выбери 1-3 категории" тут явно не прокатит.Придется сделать первичный сбор, ручной разбор, выделить все тонкое места и примеры и уже после переходить к тестированию.

Вот 7 приёмов, которые реально помогли улучшить систему:

  • Прописать, о чём именно отзывы, и просить LLM учитывать только их (то есть зашить контекст в запрос) и чётко описать, что игнорировать.
  • Сделать короткие и чёткие описания категорий, чтобы в промпте были не только названия, но и описания.
  • Дать примеры (по 1-3 примера на категорию).
  • В инструкциях ассистенту прописать блок "Важно", где указать все тонкие места.
  • Разбить процесс на этапы: сначала проанализировать, затем обосновать выбор, проверить на наличие "тонких мест" и только потом возвращать категорию. Прям в инструкциях ассистенту пишем эту последовательность действий.
  • Продумать метод для обработки неоднозначных отзывов. Можно создать категорию "Неопределено" и относить туда короткие отзывы, а затем вручную подготавливать примеры для доработки модели. Это поможет избежать попадания отзыва в неправильную категорию из-за недостатка контекста.
  • Не смешивать тональность и категоризацию в один процесс (два разных ассистента): сначала тональность, потом категории — так точнее.

По пункту 6 — мы создали папку для таких отзывов, и для них у нас отдельный ассистент, раз в неделю уже человек анализирует, что попало в такую песочницу и пытается дополнить инструкции и примеры.

И к вопросу жадности или экономии, такой подход помогает использовать GPT-4o-mini — экономично и эффективно.

Таким образом, применение LLM для анализа отзывов даёт серьёзные преимущества, позволяя учитывать контекст, сарказм и сложные лексические особенности. Однако для максимальной точности систему нужно тщательно подготовить, следуя описанным выше подходам.

11
Начать дискуссию