При разработке чат-бота мы столкнулись с задачей планирования этапов автоматизации. Эта задача возникает, когда охватить все темы невозможно из-за их многочисленности и постоянного изменения их содержания. Поэтому перед реализацией сценариев важно понимать, какое множество тем чатов необходимо покрыть в первую очередь, чтобы за фиксированный период времени и с ограниченным количеством ресурсов достичь максимального эффекта. В статье разберем постановку задачи, ее формализацию и одно из решений.
Задача
Чат с агентом поддержки состоит из реплик клиента и реплик агента, иногда — бота. Из этих реплик формируются смысловые единицы, разбитые по темам. Категоризировать такие темы удобно по сценариям ответов агентов.
Каждый чат содержит темы и вспомогательные реплики типа приветствия, прощания, благодарности и т.д. В чате может быть ноль тем, когда пользователь что-то написал и ушел, не задав вопрос. Может быть одна тема, когда клиент пришел с единственной конкретной проблемой. В чате может быть и более одной темы, если пользователь пришел с несколькими вопросами или у него возникли новые в ходе общения. Например, клиент пришел в чат с просьбой изменить почту, а потом в этом же чате спросил, как восстановить пароль.
В нашем случае автоматизация чатов — это последовательные ответы чат-ботом на вопросы клиента. Если у клиента не осталось вопросов и он доволен сервисом, считается, что чат был автоматизирован первой линией поддержки или чат-ботом. Автоматизируя чаты, мы снимаем типовые вопросы с агентов, высвобождая человеческий ресурс на действительно сложные задачи, а боту оставляем рутину. Более подробно о потребностях и подходах автоматизации чатов я писал в предыдущей статье.
Автоматизация чатов подразумевает целый спектр работ: обучение ML моделей новым темам, доработка функционала бота, подготовка текстов ответов и их переводов, тестирование и т.д. Автоматизация тем — растянутый по времени процесс. В условиях ограниченных ресурсов появляется задача определения оптимальной подпоследовательности тем для планирования этапов работ и контроля снижения нагрузки на агентов поддержки. Важно, что последовательность определяется для заданного периода времени, так как в конечной точке при автоматизации всех тем эффект будет один и тот же. На протяжении автоматизации мы получим разные показатели эффективности. Основной вопрос, на который нам нужно ответить в ходе решения задачи, можно сформулировать следующим образом: какая подпоследовательность тем из всех возможных дает максимальное количество автоматизированных чатов в заданный период времени. Такая задача также актуальна, когда необходимо снижать нагрузку пропорционально росту количества новых чатов при фиксированном штате агентов поддержки.
Для наглядности рассмотрим пример из трех тем: поломка приложения, восстановление пароля, отписка от рассылки. Допустим, благодаря историческим данным общения агентов с клиентами нам известно количество чатов по каждой из тем. Каждая тема может встречаться в чате самостоятельно или вместе с другими. Из рисунка ниже видно, что в конечном итоге будет автоматизировано одно и то же количество чатов, какую последовательность автоматизации мы бы ни выбрали. Если у нас есть ресурсы на автоматизацию только двух тем, то выгоднее, конечно, автоматизировать вторую последовательность «Restore Password» -> «Unsubscribe».
Когда данных немного, решение такой задачи можно найти перебором. Рассмотрим другой пример с количеством тем более 200. Из рисунка ниже видно, что выбор оптимальной подпоследовательности будет сильно отличаться от заданной точки на оси абсцисс, которая характеризует ограниченный ресурс. В самом простом варианте задачи ресурс можно ассоциировать со временем. Например, для автоматизации ста тем нужно сто спринтов. Если у нас нет ста спринтов на разработку, а есть только пятьдесят, то найденная оптимальная подпоследовательность может отличаться. Из графика ниже следует, что оптимальная подпоследовательность для пятидесяти тем — «Путь 3», а для ста тем — «Путь 1». Ограниченность ресурсов не всегда выражается во времени: это может быть другая характеристика (доступность команды разработки, сложность разметки данных, трудозатраты на перевод ответов и т.д) или комплексная величина, комбинированная из нескольких.
Формализация задачи
Разные научные школы спорят между собой, сколько процентов решения содержит правильная постановка задачи. В среднем замеренные практиками значения колеблются от 20 до 80 процентов. Мне как-то даже приходилось видеть задачу, где формализация являлась полным решением. Поэтому перед обсуждением решения формализуем вышеописанную задачу.
Пронумеруем темы в произвольном порядке. Каждой из n тем будет соответствовать число от 1 до n. Для описания процесса автоматизации определим монотонную неубывающую функцию, характеризующую, сколько чатов предположительно будет автоматизировано для заданной совокупности тем. Откуда можно получить входные данные для этой функции, обсудим позже.
В нашем случае такую функцию можно описать следующим образом:
где характеризуют, автоматизирована ли i-ая тема (1 — да, 0 — нет), а m — сколько чатов удалось по этим темам закрыть. Ответом к исходной задаче будет последовательность, состоящая из натуральных чисел от 1 до n, характеризующая, в каком порядке аргументы функции переходят из нуля в единицу. Например, ответ (2, 1, 3, ...) означает, что оптимально будет автоматизировать сначала вторую тему, потом первую, потом третью. Последовательно это можно записать в виде итераций по автоматизации.
1 итерация. Автоматизируем вторую тему, получаем закрытых чатов.
2 итерация. Ко второй теме автоматизируем первую тему, получаем закрытых чатов.
3 итерация. Автоматизируем все темы.
Понятно, что автоматизируя все темы, мы всегда получим m. Но если у нас есть ограничения по времени и ресурсам, то разные пути могут приводить к разным решениям. Важно заметить: мы не можем просто автоматизировать последовательно самые частотные темы, так как нужно учитывать пересечение тем в чатах.
Допустим, есть тема , по которой 500 чатов, есть другие две темы по 400 чатов каждая. Казалось бы, можно автоматизировать самую большую. Но если учесть, что возможен вариант, когда нет пересечений и , а есть пересечение и , равное 300 чатам, то для двух итераций выгоднее взять вторую и третью темы, а для одной итерации — первую тему.
В общем виде это ограничение отражает неравенство:
Тогда задача поиска оптимального пути автоматизации будет иметь вид:
Решение
Напрямую перебором решить задачу с реальными данными весьма сложно. Для решения задачи с автоматизацией 100 тем из 500 существующих нужно вычислить для вариаций. Предлагаемое «почти точное» решение — просто вычислить большое количество возможных вариаций и сравнить их между собой в заданной точке . Суть этого подхода такая же, как в методе во всех стохастических методах: разыгрываем множество случайных процессов, вычисляем эмпирически и фиксируем результат. При увеличении числа испытаний решение будет стремиться к точному.
Для того чтобы вычислить оптимальную последовательность, нам необходимо получить количественные оценки для каждой темы. Напрямую получить такие данные не получится, так как все темы явно не автоматизированы, иначе бы такой задачи не стояло. Но можно собрать косвенную информацию из исторических чатов клиентов и агентов, которая будет характеризовать темы и их покрытие с пересечениями. Например, по теме восстановления пароля было 200 чатов, по теме отписки от рассылки — 300 чатов, плюс их пересечение — 20 чатов, итого 520 чатов.
Имея исходные данные, решение можно получить с помощью вариаций моделирования. Берем произвольную неповторяющуюся последовательность из k чисел от 1 до n большое число раз и считаем, сколько автоматизированных чатов для такой последовательности мы получаем. После достаточного (для требуемой точности) количества циклов моделирования получаем наиболее оптимальные пути автоматизации k тем из n возможных и искомую подпоследовательность.
Реальный результат моделирования и выбора пути для ограниченного количества тем показан на рисунке ниже.
Заключение
Постановку задачи можно развивать для получения более точного решения. Если сложность автоматизации тем отличается между собой, то её можно оценить во временных интервалах и соотносить тему с несколькими точками на оси абсцисс. Для характеристики сложности можно использовать метрики количества сообщений от агента после вопроса пользователя, CSAT оценку, продолжительность чата и др. Также возможно уточнять характеристику потенциального количества чатов для темы с учетом ее специфики. При большом количестве данных можно использовать различные методы оптимизации для достижения требуемой точности, перебирающие не все случайные варианты. В качестве таких методов разумно использовать генетические алгоритмы, методы Монте-Карло, метод отжига и другие.