Классификация обращений — задача отнести входящее сообщение к одной из категорий: тема, подразделение, приоритет, тональность, тип запроса. Одна из самых окупаемых задач автоматизации, потому что работа однородная и объёмная.
Почему это выгоднее генерации ответов
Классификация не требует, чтобы модель что-то придумывала: она выбирает из конечного набора. Отсюда три следствия.
Ошибка дешевле: неверно направленное обращение переправляется, тогда как неверный ответ клиенту приходится исправлять.
Качество измеряется просто: есть правильный ответ, считается доля совпадений.
Подходит компактная модель, а значит стоимость обращения на порядок ниже.
Из чего состоит решение
Связка разрезов. Рабочая схема — не одна классификация «на все случаи», а два-три независимых разреза: интент (что сделать), срочность (как быстро), тема (для отчётности). Каждый разрез — отдельная небольшая модель или отдельный запрос, и ошибка в одном не тянет за собой остальные. Как проектировать набор намерений — отдельная тема, она разобрана в статье «Интент».
Зачем разделять. Единый классификатор на пересекающиеся оси («срочная жалоба на доставку») плодит комбинаторное число классов, большинство из которых встречается в единичных экземплярах и не обучается. Раздельные оси дают каждому разрезу достаточно примеров на класс.
Маршрутизация по результату. Итог маршрута собирается из разрезов правилами: срочное от недовольного клиента идёт в приоритетную очередь, всё остальное — по теме в подразделение. Правила живут в коде, их видно и можно менять без переобучения.
Что классифицируют на практике
Маршрутизация. В какое подразделение направить. Самый частый и самый окупаемый случай.
Приоритет. Срочное отделяется от обычного.
Тема. Для отчётности и понимания, о чём вообще спрашивают.
Тональность. Выявление недовольства для приоритетной обработки.
Тип запроса. Вопрос, жалоба, заявка, отказ.
Как устроить проверку
Нужна размеченная выборка: несколько сотен реальных обращений с проставленными вручную категориями. Размечать должен тот, кто разбирает обращения в жизни, а не разработчик.
Смотреть надо не общую долю правильных, а матрицу ошибок: куда именно уходят неверно отнесённые. Обычно ошибки концентрируются на двух-трёх парах похожих категорий, и это поправимо — уточнением описаний или объединением категорий.
Отдельно оценивается стоимость разных ошибок: направить срочное как обычное хуже, чем наоборот.
Метрики и дисбаланс классов
Считать по классам. Для каждой категории отдельно считаются точность (доля попавших сюда действительно сюда относящихся) и полнота (доля относящихся сюда, которые модель нашла). Общий процент по выборке маскирует провал на редких, но важных классах: срочных обращений обычно единицы процентов, и именно они теряются.
Дисбаланс. В реальных потоках один-два класса забирают 60–80% обращений, «хвост» — по доле процента на класс. Модель оптимизирует общий процент и игнорирует хвост; лечится весами классов при обучении, просмотром порогов для редких классов и честным ответом «прочее» вместо угадывания.
Цена ошибки асимметрична. Для приоритета важнее полнота по классу «срочное» (пропустить дорого), для маршрутизации — точность (лишнее перекидывание между очередями размывает ответственность). Пороги уверенности настраивают под это, а не под среднюю метрику.
Ручная разметка как узкое место
Это главный расход. На старте нужно порядка 300–500 размеченных обращений, далее — десятки на новый класс; прирост точности от разметки логарифмический, поэтому «разметим ещё тысячу» редко спасает — чаще проблему решает переделка набора категорий.
Инструкция важнее объёма. Спорные обращения, которых 10–20%, должны иметь в инструкции явные правила с примерами. Разногласия двух разметчиков на одной выборке — прямой показатель, что категория определена плохо; её надо объединять или переописывать.
Размечать умнее. При работе в режиме подсказки накапливается бесплатная разметка: категория, которую подтвердил человек. Доразмечать в первую очередь стоит обращения с низкой уверенностью модели — они дают наибольший прирост на метку времени.
Типичные ошибки
Слишком много категорий. Двадцать классов, различающихся нюансами, плохо разделяются и людьми, не только моделью.
Пересекающиеся категории — обращение честно относится к двум сразу. Либо разрешать несколько меток, либо задавать приоритет.
Отсутствие категории «прочее». Без неё нетиповое обращение попадает куда попало.
Отсутствие порога уверенности: при низкой уверенности разумнее отдать человеку, чем угадать.
Тональность по пятибалльной шкале. Разметчики не различают «скорее негативно» и «негативно» устойчиво, и модель тем более. Для практики хватает двух-трёх классов: негатив, нейтрально, позитив; тонкие градуляции не выдерживают даже проверки на согласованность людей.
Обучение на архиве, размеченном по старым правилам маршрутизации: модель воспроизводит прошлогоднюю структуру категорий, а не текущую.
Как внедрять постепенно
Разумный порядок — не переключать маршрутизацию сразу, а сначала работать в режиме подсказки: модель предлагает категорию, человек соглашается или меняет.
Это даёт две вещи одновременно. Накапливается размеченная выборка на реальных данных. И видно фактическую точность до того, как от неё что-то зависит.
Переключать на автоматический режим стоит по категориям: сначала те, где точность стабильно высокая, остальные оставить на человеке.
Что мерить после запуска
Долю переназначений — сколько обращений переправили после автоматической маршрутизации. Это прямой показатель качества и он собирается сам.
Время до первого ответа: ради его сокращения обычно всё и затевается.
Распределение по категориям во времени: резкое изменение означает либо новую проблему у клиентов, либо дрейф и деградацию классификатора. Дрейф проверяется контрольной размеченной выдержкой раз в квартал — подробнее в «Дрейфе данных».
Частые вопросы
Насколько точно классифицируются обращения?
Зависит от того, насколько чётко разделены категории. Если их немного и они не пересекаются, точность обычно высокая. Проверять надо на своей размеченной выборке и смотреть матрицу ошибок, а не общий процент.
Кто должен размечать обучающую выборку?
Тот, кто разбирает обращения в жизни. Разметка, сделанная разработчиком по инструкции, систематически расходится с реальными правилами маршрутизации, которые часто нигде не записаны.
Что делать с обращениями, попадающими в две категории?
Либо разрешить несколько меток, либо задать приоритет между категориями. Хуже всего оставить неоднозначность как есть: модель будет выбирать непредсказуемо, и точность на этих парах просядет.
Сколько обращений нужно разметить для старта?
Обычно 300–500 обращений с прицелом на 50–100 примеров на каждый значимый класс. Если класс не набирает пары десятков примеров из реального потока, он либо слишком мелкий, либо его стоит объединить с соседним — увеличивать выборку ради него бессмысленно.
Как понять, что классификатор деградировал?
По доле переназначений и сдвигу распределения категорий: деградация выглядит как постепенное перетекание обращений в один-два «притягивающих» класса. Подтверждается контрольной выдержкой в 100–200 свежих обращений с ручной разметкой.