Реализация классификации текста: от TF-IDF до LLM

Ручной разбор потока обращений не масштабируется: письма копятся, приоритеты теряются, а решения принимаются наугад. Мы разрабатываем классификацию текста под ключ — от разметки примеров до передачи обученной модели и регламентов вашей команде. В результате типовые обращения распределяются автоматически, а время на обработку сокращается в разы.
Часто задаваемые вопросы

Классификация текста: почему ручной разбор не масштабируется

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

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

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

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

Где автоматический разбор обращений даёт измеримый эффект

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

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

Снижение ручной обработки — следствие того, что оператор перестаёт быть сортировщиком и работает только со сложными случаями. Если уверенность модели ниже порога, обращение уходит человеку с пометкой и причиной решения, а не в случайный отдел или в общую очередь.

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

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

Сравнение подходов: правила, обучение на примерах, готовые модели

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

Вариант Когда подходит Ограничения
Правила и словари Классы описываются формальными признаками: реквизиты, маркеры, шаблонные обращения Держатся на ручной поддержке, ломаются на новых формулировках, каждое изменение словаря — риск регресса
Обучение на размеченных примерах (TF-IDF и линейные модели) Есть 1–2 тыс. примеров на класс, тематика и стиль стабильны Точность на редких классах падает, разметку приходится обновлять при смене тематики
Готовая языковая модель Много классов, мало разметки, живые формулировки и запросы пользователей Дороже на объёме, нужны контроль качества и явная точка отката к предыдущей версии

Внешние замеры на открытых наборах задач обработки текста, которые агрегирует Papers with Code, показывают: при 1–2 тыс. размеченных примеров на класс разрыв между классическими моделями и готовыми языковыми моделями почти исчезает. Он держится в двух местах — редкие классы и формулировки, которых не было в выборке. Поэтому при эксплуатации чаще собирают гибрид: модель на признаках закрывает частые классы как быстрый фильтр, а готовая модель подключается там, где уверенность классификатора ниже порога.

Внедрение классификации текста: этапы от аудита до передачи

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

  1. Аудит данных. Выгружаем корпус, считаем долю дублей, пустых полей и текстов без полезной нагрузки, смотрим распределение по темам. Фиксируем, что размечено, а что придётся размечать, и сколько примеров нужно добить до рабочего объёма.
  2. Схема классов. Собираем таксономию без пересечений: один текст — один класс или несколько, что делать со смешанными случаями. Спорную выборку прогоняем через двух разметчиков и снимаем расхождения правилами, а не устными договорённостями.
  3. Рабочая модель и базовая линия. Идём от простых частотных моделей к векторным представлениям и языковым моделям, наращивая сложность только там, где она даёт прирост на отложенной выборке. Порог уверенности подбираем под цену ошибки.
  4. Настройка и интеграция. Описываем предобработку входа, отсечение мусора, версионирование модели и разметки, логирование предсказаний вместе с уверенностью — без этого разбор ошибок через месяц превращается в гадание.
  5. Проверка качества. Считаем точность и полноту по каждому классу, разбираем матрицу ошибок и пограничные примеры. Отдельно смотрим поведение на данных другого периода или источника: так видно, где модель держится на признаках времени, а не на смысле текста.
  6. Передача в эксплуатацию. Отдаём регламент дообучения, правила отката на предыдущую версию, мониторинг доли неуверенных ответов и инструкции для команды заказчика.

Комплект поставки: модели, схемы и регламенты разметки

Модель без окружения — это артефакт, который через месяц никто не сможет ни переобучить, ни объяснить. Поэтому комплект поставки собираем так, чтобы задача классификации текста жила без нас: от весов до правил, по которым разметчики разбирают спорные случаи.

  • Обученная модель и код вызова — веса, обёртка для инференса, зафиксированные зависимости; поднимается на вашем контуре одной командой, без сборки «по памяти».
  • Схема классов — таксономия с границами между похожими категориями, примерами на каждую и списком пар, которые путаются чаще всего.
  • Регламент разметки — инструкция для аннотаторов: разрешение конфликтов, порядок эскалации спорных случаев, требования к согласованности между разметчиками.
  • Политика доступа к данным — где лежат тексты, кто и на каком основании их читает, что маскируется перед журналированием и как устроен след обращений.
  • Документация по модели — метрики качества по каждому классу, а не одно усреднённое число; известные ограничения и признаки начинающейся деградации.
  • Набор проверочных примеров — эталонная выборка с метками, на которой прогоняется каждая новая версия: просадка видна до выката, а не после жалоб.
  • Конфигурации развёртывания — описания окружений, схемы сервисов, лимиты и очереди; стенд воспроизводится без чтения чужого кода и вопросов нам.

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

Кейс: разбор входящих обращений до и после внедрения

Исходная картина

Обращения падали в общую очередь, а разбор держался на правилах по ключевым словам: они уверенно разбирали 42% потока и рассыпались на перефразировках. Остальное вручную сортировали операторы — медиана до попадания к нужному специалисту составляла около трёх часов, а доля ошибочных меток доходила до 28%. В пиковые дни очередь росла быстрее, чем её успевали разбирать.

Что изменили

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

После внедрения автоматически разбирается 88% обращений, доля ошибочных меток — 6%, время сортировки сократилось до 12 минут. Контрольная выборка переразмечается ежемесячно: если расхождений на ней больше 5%, запускается повторное обучение на свежих данных. Такой контур показывает сдвиг в языке клиентов или появление новой категории до того, как это заметят по жалобам, — логика оценки качества разобрана в публикациях ACL Anthology.

Чем отличается своя модель от готовой языковой модели?

Это выбор не «лучше или хуже», а под какие данные и какую цену ошибки. Свой классификатор обучается на вашей разметке, готовая языковая модель решает задачу по инструкции, без обучения. Разница проявляется на ваших классах, а не на демонстрационных примерах.

Своя модель выигрывает там, где классы узкие и близкие: «жалоба на сроки доставки» и «претензия к качеству» для общей модели почти одно и то же, а для бизнеса — разные маршруты обработки. Обучаясь на ваших примерах, классификатор проводит границу так, как её провели вы, и на своих классах даёт качество, измеримое на отложенной выборке.

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

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

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

Частые технические вопросы по проекту

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

Сколько данных нужно разметить для старта?

Для базовой модели по разреженным признакам хватает нескольких тысяч примеров на класс — этого достаточно, чтобы закрыть 80–90% типовых обращений. Нейросеть требует большего объёма, но к ней мы переходим только там, где простая модель стабильно ошибается.

Что делать, если исторических данных нет?

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

Разметчики трактуют категории по-разному — это проблема?

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

Как поймать деградацию качества?

Следим за долей уверенных предсказаний, распределением классов и долей обращений, ушедших на ручной разбор. Изменение входных текстов — дрейф данных, лечится переобучением; просадка метрик при том же входе — деградация, и откат на предыдущую версию возвращает качество.

Как часто нужно дообучать модель?

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

Обсудим задачу: что нужно от вас и когда вернёмся с планом

Чтобы оценка была предметной, а не «по ощущениям», нам нужен минимум контекста: где классификация встраивается в процесс, какой объём текстов через неё проходит и что считается ошибкой. Разговор занимает у заказчика один разговор, зато снимает половину уточнений на этапе оценки.

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

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

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

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139