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

Меня зовут Роман Милованов, я занимаюсь разработкой сервиса модерации покупательских отзывов в команде User Generated Content. Расскажу о том, как мы попробовали применять большие языковые модели, чтобы автоматизировать модерацию отзывов. 

Если вам в первую очередь интересны выводы без погружения в нюансы — можете увидеть их вместе с наглядной таблицей в конце статьи

Как обрабатываем отзывы сейчас

Отзывы от пользователей поступают к нам в таком виде:

  • Вкусное печенье.​

  • в ценнике было написано 59р. ОБМАН ПОКУПАТЕЛЯ! ​

  • Бананы неспелые

  • Товар не купил я а в чеке прабили ???​

  • У мен не было такое в чеке пробить а сам нету​
    витрины другой цена а в кассу другой кошмар ето Магнит как всегда​

  • Хорошая колбаса от КУМК. Постоянно беру только её. Цена и качество её лучшим вариантом.​

  • Очень понравилась соломка. К чаю и кофе очень подходит . Вкусная и недорогая.​

  • Подделка! Не имеет ничего общего с коньяком . Водка смешанная с колером и огромным количеством ванилина! Пить эту бурду невозможно! Деньги выбросил на ветер. Позор  Магниту,который продает такую бурду. ​

Сейчас сервис модерации представляет собой ансамбль из нескольких роботов. Два самых простых построены на основе словарей и имеют внутренние названия «Антимат» и «Политрук». Ещё три работают на основе паттернов и правил, и есть одна ML-моделька. Все это вместе обрабатывает 67% текстов, которые к нам поступают. Остальное обрабатывается людьми.

Первый подход к большим языковым моделям: ChatGPT

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

Отправили модели 11 отзывов, получили 11 ответов
Отправили модели 11 отзывов, получили 11 ответов

По каждому отзыву модель дала решение — отклонено или одобрено — и обоснование. По совокупности пары десятков таких экспериментов получилось, что боты на основе ChatGPT 3.5 дают от семи до десяти правильных ответов. Это результат, с которым можно работать.

Углубляемся в тему: сравнение разных моделей

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

  • ChatGPT

  • YandexGPT

  • GigaChat от Сбера

  • LLaMA

Наши принципы взаимодействия с большими языковыми моделями

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

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

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

Мы применяли подход, именуемый Few-Shot Prompting. Суть его заключается в том, что, помимо описания собственно задачи, к инструкции для модели прилагается несколько примеров отзывов и эталонных ответов, которые мы ожидаем увидеть от модели. Кроме того, каждая инструкция снабжалась требованием  соблюдать определённый формат ответа: нумерованный список или даже JSON. Некоторым моделям сложно соблюдать формат вывода, и тогда могут помочь всяческие ухищрения: такие как, например, угрозы наказать за несоблюдение формата или поощрение за прилежную работу.

Проблемы точности

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

Важно отметить, что если принять какой-то набор уже отмодерированных отзывов за эталон (тестовый датасет), то результат модераторов-людей по нему будет ниже 100%. Человек не идеален: дайте двум квалифицированным модераторам сотню одинаковых текстов и увидите, что не во всех случаях их мнения совпадают. В нашем случае модераторы-люди приходили к консенсусу лишь в 90% отзывов. Значит, при точности машины в 90% по отношению к «эталонному» датасету мы фактически получим уровень штатного сотрудника.

Язык общения

Большинство моделей понимает и русский и английский языки, но какой-то из них для модели всё же стоит считать «родным» в том смысле, что инструкция на родном языке более понятна модели. Так, для ChatGPT и LLaMA инструкция подавалась на английском языке, а вывод требовался на русском. Такой подход показал свою эффективность. С моделью Яндекса говорили по-русски. Были эксперименты с инструкцией на английском языке, которые ожидаемо показали снижение качество ответов модели.

ChatGPT

Для экспериментов, описанных в этой статье, мы использовали ChatGPT 3.5 Turbo, и этот инструмент в итоге позволил нам приблизиться к желаемому результату.

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

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

Вариативность предсказаний модели и мультиагент

ChatGPT при прогоне на тестовом датасете показала точность (ассuracy) около 80%: от прогона к прогону цифра могла на процент скакать туда-сюда. Да и на глаз было видно, что одни и те же отзывы модель может классифицировать по-разному: в одном запросе одобрит, в другом отклонит.

Чтобы справиться с этой вариативностью, был применён подход, именуемый (узким кругом) «мультиагент». Суть в том, что по каждому отзыву мы отправляем модели несколько запросов, имитируя таким образом работу нескольких ИИ-агентов. Решение считается принятым, только если агенты достигли консенсуса. Это позволило поднять точность до 85%.

Этот обнадёживающий результат сподвиг нас к попыткам поиграть с другими генеративными моделями.

Сравнение моделей

Ожидать от других моделей результатов, близких к ChatGPT, кажется нелогично, поскольку эти модели несопоставимы банально по своим техническим характеристикам  (объёму параметров). Но всё же хотелось как-то на прикладном уровне модели сравнить. Для этого придумали несколько простых запросов, которые проверяют разные аспекты работы модели: способность соблюдать формат вывода, принимать решения на основе правил, генерировать читабельный текст, объяснять решения, говорить по-русски, в конце концов ?

Например, вот таким простым запросом мы сравнивали модели по умению соблюдать формат вывода:

Классифицируй животных по зоне обитания

Например:

Обезьяна - джунгли

Гепард - прерии

Медведь - леса

Ответ представь в виде таблицы.

Для примера выше таблица выглядит так:

| Животное | Зона обитания |

----------------------------

| Обезьяна | Джунгли |

| Гепард | Прерии |

| Медведь | Леса |

Построй таблицу зон обитания для следующих животных:

Зебра, Носорог, Крокодил

YandexGPT

Яндекс постоянно работает над выпуском новых и улучшением старых версий моделей семейства YandexGPT. На момент написания мной этих строк уже вышла версия YandexGPT 3 Pro. В этой же статье я суммирую опыт экспериментов с более ранними версиями. Наши самые первые эксперименты с ранними моделями были неудачными: без углубления в подробности просто отмечу, что практически ничего не работало. Позже ситуация изменилась, и кое-какой результат мы всё-таки получили.

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

 Итоги по YandexGPT2, которые мы получили, когда она только вышла

  • Качество ответов непредсказуемо: то в точку, то вообще мимо.

  • Модель неспособна соблюдать формат выдачи.

  • Часто генерирует нерелевантный текст.

  • Не всегда заметен эффект от изменения параметров запроса, таких как температура.

  • Бывают проблемы с русским языком: неверные окончания слов или просто лишние буквы.

На тот момент мы зафиксировали, что решение наших коммерческих задач с помощью few-shot prompting на базе YandexGPT не представляется возможным. С тех пор почти по всем пунктам работа модели улучшилась, хотя кардинально для нас это картины не поменяло.

Дообученная YandexGPT

После отказа от дальнейших экспериментов с few-shot prompting в отношении YandexGPT, мы решили попробовать дообучить модель — Яндекс предоставляет такую возможность.

Технически это очень простая операция: нужно загрузить промпт и датасет с правильными парами запросов-ответов через интерфейс Yandex DataSphere.

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

И тут случился конфуз. К дообученной модели можно обратиться через веб-интерфейс или через API. Я пошёл в веб, отправил несколько запросов и обнаружил, что модель отвечает только «да» и «нет» на любой вопрос. Эти ответы не релевантны, поскольку по инструкции и в соответствии с датасетом она должна выдвавать бинарное решение (одобрено или отклонено) и его обоснование в одном-двух предложениях.

Я уже открыл Джиру, чтобы в комментариях к задаче записать неутешительные выводы, но решил для «соблюдения протокола» покидаться запросами через API и — о чудо — увидел в точности ожидаемые от модели ответы. Она четко следовала формату и в большинстве случаев давала качественные обоснования.

Полагаю, в веб-интерфейсе присутствовал баг при обращении к модели и, возможно, на сегодня его уже пофиксили.

Дообученную модель прогнали на тестовом датасете и увидели точность в 81%. Недурно!

При этом вариативность ответов отсутствовала: на один и тот же запрос модель всегда давала один и тот же ответ (параметр температуры выставлен на минимум), что делает необязательным использование мультиагентного подхода. Определённо тут есть почва для дальнейших исследований, над чем сейчас и работаем.

GigaChat

Сбер тоже выкатил свою генеративную модель. И она умеет генерировать не только текст, но и картинки. Получить доступ к WEB API GigaChat оказалось совсем не просто, поэтому с этой моделью мы ограничились экспериментами только в вебе.

Пара картинок ниже с моими запросами про «маленький камазик» неплохо иллюстрирует общее впечатление от GigaChat.

Камазик в интерпретации GigaChat
Камазик в интерпретации GigaChat

А вот так она работает с отзывами:

1. кто опять разрешила это преступление против жительниц России:"пальму" в составе? абсолютно всё што содержит "пальму" в любая количестве в принципе является фальсификатом! абсолютно вся продукция с "пальмой" обязательно должна быть окончательно и навсегда запрещена законами России!
2. Мясо сильно воняло,это просто ужасно 3 позиции чека неликвид
3. вкусно,но нужно есть в меру даже если нет сахара
4. не похоже на брынзу
5. Очень долго и неудобно активировать сим-карту.В кнопочном телефоне она не работает (
6. Наша кошка ест с удовольствием.
7. Вскрыли упаковку, а рыба с запахом. ?
8. норм
9. Все устраивает
10. 10% арахиса
11. цена по чеку не соответствует цене на полке магазина


1. Одобрено. Описание вкусовых качеств товара.
2. Отклонено. Отзыв на отвлечённую тему.
3. Одобрено. Описание аромата.
4. Отклонено. В отзыве нет описания потребительских свойств товара.
5. Отклонено. Упоминание о цене.
6. Отклонено. Упоминание о качестве продукта.
7. Отклонено. Упоминание о вкусе.
8. Отклонено. Упоминание о запахе.
9. Отклонено. Упоминание о цене.
10. Отклонено. Упоминание о вкусе.
11. Отклонено. Упоминание о цене. 

Итоги экспериментов

  • Модель довольно непредсказуема: иногда выдаёт хорошие ответы, а иногда — плохие.​

  • Отлично работает с форматом: может выдавать ответы сразу в JSON​.

  • На нашем стандартном промпте результат хуже, чем у LLaMA-производных моделей 13B. Много некорректных ответов, а обоснования слабо соотносятся с текстами отзывов. ​

LLaMA

Семейство моделей от Meta AI отличается тем, что при меньших объёмах (количестве параметров) выдаёт сопоставимые с гораздо более крупными моделями результаты. Требует меньше вычислительных мощностей: самую маленькую можно запустить на вполне «гражданском» ноутбуке. Официального WEB API нет, но много неофициальных за деньги.

Результат задания по разметке отзывов:

1. кто опять разрешила это преступление против жительниц России:"пальму" в составе? абсолютно всё што содержит "пальму" в любая количестве в принципе является фальсификатом! абсолютно вся продукция с "пальмой" обязательно должна быть окончательно и навсегда запрещена законами России!
2. Мясо сильно воняло,это просто ужасно 3 позиции чека неликвид
3. вкусно,но нужно есть в меру даже если нет сахара
4. не похоже на брынзу
5. Очень долго и неудобно активировать сим-карту.В кнопочном телефоне она не работает (
6. Наша кошка ест с удовольствием.
7. Вскрыли упаковку, а рыба с запахом. ?
8. норм
9. Все устраивает
10. 10% арахиса
11. цена по чеку не соответствует цене на полке магазина

 

1. Отклонено. Содержит жалобу на содержание пальмы в продукте, но без доказательств фальсификации и запрета в России.

2. Отклонено. Сообщение не связано с описанием потребительских свойств товара.

3. Одобрено. Описывается вкусовой качество продукта, но без указания на количество сахара.

4. Отклонено. Утверждение о том, что product не похож на брынзу, не связано с его потребительскими свойствами.

5. Отклонено. жалоба на трудности активации сим-карты не связана с ее потребительскими качествами.

6. Одобрено. Аромат кошки является личным вкусовым предпочтением, но не связан с потребительскими свойствами товара.

7. Отклонено. Содержит нарушение законов России и обвинение в фальсификации продукта.

8. Отклонено. Описывается неприятный запах мяса, что может отпугнуть потребителей.

9. Одобрено. Описываются вкусовые качества товара и рекомендация о количестве для consumption.

10.  Одоobreno. Рекомендация для потребителей, соответствующая количеству товара.

11.  Отклонено. Не содержит арахса в указанных пропорцииях.

Итоги

  • Качество ответов немного ниже, чем у ChatGPT​.

  • Обоснования решений бывают отличными, бывают бредовыми​.

  • Можно много играть с настройками​.

  • Лучшие результаты показывает на низких температурах​.

  • По-русски говорит сносно​.

  • Разница между 13B и 70B на глаз не видна​.

Выводы

Качество инференса

Это точность предсказаний: насколько точно модель модерирует отзывы.

Структура инференса

Ответы модели нужно читать программно: важно, чтобы они подчинялись какой-то структуре, которую мы задаем. Допустим, модель может выдавать либо JSON, либо  размеченный список, либо что-то ещё.

Оказалось, что не все модели с этим хорошо справляются. Вот, например, YandexGPT справляется почему-то очень плохо: не может постоянно поддерживать одну и ту же структуру.

Web API

С этим у Яндекса всё хорошо.

ChatGPT блокирует запросы из РФ, но есть прокси-сервисы, да и вообще голь на выдумки хитра.

У GigaChat есть API и они даже готовы были открыть к нему доступ, но там очень сложная бюрократическая канитель. Настолько сложная, что мы в рамках исследования и пытаться не стали.

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

Time-to-market

Все достаточно быстро: при желании мы могли бы на базе YandexGPT уложиться в пару недель и вывести модератор в прод.

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

GigaChat — поправка по времени на решение вопросов с доступом.

LLaMA — тут либо погружаться в техничку и запасаться видеокартами, либо заплатить кому-то, кто уже сделал это и даёт доступ к модели как сервису.

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

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


  1. DvoiNic
    12.04.2024 06:41
    +5

    Да делайте уже автоматическую генерацию положительных отзывов, и не мучайтесь... все равно вы в конце всё сведете к этому...


  1. rPman
    12.04.2024 06:41
    +1

    Зачем вам вообще отзывы, если судя по статье самые полезные для потребителя - о вкусе и качестве товара вы отклоняете? Для кого эти отзывы?

    По теме, ллама слабоват, вам надо было mistral или основные на нем брать, типа openchat35, им для работы хватит 8гб видеокарты а для тюнинга 12-16гб, это видеокарты от 38тр


  1. egribanov
    12.04.2024 06:41

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