Привет! Мы — команда инженеров по машинному обучению (ML) компании Добрый день. Мы хотим поделиться практическим опытом, который у нас есть, по лучшим практикам разработки чат-ботов (многие из них пришли из боли и отрицания, дорогие друзья). Мы считаем, что обмен идеями может помочь другим разработчикам. Давайте погрузимся в мир чат-ботов.

Кто добрый?

Kindly — скандинавская компания, занимающаяся чат-ботами и инструментами для оптимизации конверсии, базирующаяся в Осло, Норвегия. Нашими клиентами являются такие компании, как Norwegian Airlines, Hertz, Elkjøp. Мы гордимся тем, что предоставляем лучший сервис и лучший опыт для наших пользователей. Больше наших кейсов вы можете найти здесь.

Лучшие практики оценки

Говоря о чат-ботах, мы больше всего хотим избежать неправильных ответов. Нет ничего хуже, чем разочаровать клиента! Неправильные ответы приводят к меньшему количеству конверсий, плохому пользовательскому опыту и, в целом, к отказу от услуги. С технической точки зрения, с какими наборами задач мы работаем?

Определим настройку

Чтобы построить бота, нам нужно большое количество пар вопрос-ответ; эти пары приведут бота к правильным ответам, как только он будет развернут в дикой природе. Универсальное правило здесь такое: чем больше качественных данных добавляется на этом шаге, тем лучше для нас и модели. Пары запрос-ответ называются диалогами. В дальнейшем платформа Kindly предлагает автоматические предложения по улучшению созданного бота и добавлению лучших образцов ботов.

Итак, что происходит со стороны машинного обучения? Мы рассматриваем каждый диалог, созданный как класс с собственной меткой. Мы определяем постановку задачи как задачу классификации Multi-Class: пользователь пишет запрос в форме чат-бота, и мы пытаемся предсказать, к какому классу диалога относится этот запрос. Если мы не достигаем определенного порога достоверности, бот переходит в откат. Это означает, что он сообщает пользователю, что ответ на его запрос не может быть найден. Конвейер можно разбить на три основных этапа:

  • Этап предварительной обработки: включает в себя приведение данных в форму, которую можно использовать в качестве входных данных для наших моделей.
  • Обучение: этап обучения модели.
  • Оценка. Здесь мы оцениваем эффективность моделей.

Эта статья посвящена оценке и выбору наилучшей конфигурации обученной модели.

Выбор правильной метрики, чтобы уловить все это

Здесь возникает главный вопрос: когда мы говорим, что наш чат-бот достаточно хорош, какой график лучше всего отображает производительность чат-бота? Стандартные показатели, такие как оценка F1 или просто точность, недостаточно репрезентативны.

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

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

  • Если вероятность прогноза ниже порога, точка данных отфильтровывается, что означает, что модель недостаточно надежна для своего прогноза по этой точке данных.
  • Если прогноз выше порога, то точка данных включается в расчет точности модели для этого порога.

После этого нам достаточно рассчитать оптимальный порог достоверности для бота.

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

Пока все хорошо! Что еще мы забыли упомянуть?

Не все классы равны

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

Хорошо. Кажется, теперь мы достаточно уверены в том, что мы хотим оценить и как мы хотим это оценить. Теперь пришло время идти по-крупному. Пришло время для:

Настройка конвейера оценки

Чтобы наша фабрика чат-ботов работала бесперебойно, нам нужно иметь MLOps (MLOPs — это набор методов, направленных на надежное и эффективное развертывание и поддержку моделей машинного обучения в производстве. Это слово представляет собой соединение «машинного обучения» и практики непрерывной разработки. DevOps в области программного обеспечения) инфраструктура вокруг моделей и оценки чат-ботов: она облегчает проведение экспериментов, получение результатов в надлежащем виде, сохраняет результаты экспериментов для аудита, обрабатывает политики хранения и многое другое.

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

  1. Соберите данные бота, которого мы хотим оценить.
  2. Предварительно обработайте данные, чтобы они были готовы к модели.
  3. Позаботьтесь о дисбалансе классов
  4. Позаботьтесь о утечке данных во всех частях нашей системы (ElasticSearch, файлы конфигурации, облачные экземпляры и т. д.)
  5. Переобучите нашу модель, используя тщательно обработанный набор данных в качестве входных данных.
  6. Запустите все компоненты системы, используя обновленную модель. Если нужно протестировать подмножество компонентов, позаботьтесь об этом и не забудьте настроить метрики, если ваш пайплайн машинного обучения состоит из последовательных компонентов и их нужно оценивать как по отдельности, так и в потоке.
  7. Сохраняйте прогнозы с предпочтительной политикой хранения.
  8. Отображение прогнозов и ошибок на панели управления (например, Веса и отклонения).

Что вы также можете настроить как обычный запуск:

Прислушайтесь к опыту команды доставки

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

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

Избегайте утечки данных

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

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

Например, в нашем текущем варианте использования очистка индексов эластичного поиска путем удаления тестовых данных перед оценкой прогнозов модели является одним из необходимых шагов, которые следует предпринять; практический шаг, который нигде не описан в литературе. Подводя итог: позаботьтесь о том, чтобы ваша модель не «видела» данные проверки на этапе обучения.

Спасибо, что дочитали до этого места. Спасибо за внимание и удачи в ваших проектах по обработке естественного языка!

Написано Ларисой Колесниченко и Панагиотисом Чацихристодулу,инженерами по машинному обучению в Kindly.

Посетите раздел Вежливо, чтобы узнать больше.