Год назад мы начали использовать ASR для обработки записей телефонных звонков.
TL;DR: вместо бинарных правил и end-to-end ML мы выбрали скоринговую систему поверх ASR (T-One): анализируем диалог и поведение, получаем ~98% точности при среднем времени обработки ~4.9 сек вместо 20+ сек на Whisper.
Задача казалась простой: понять, ответил ли абонент сам или сработал автоответчик, и на основании этого корректно завершить звонок и вернуть деньги пользователю при неудаче.
На практике всё оказалось сильно сложнее.
Мы работаем с телефонными розыгрышами. Записи стерео: слева абонент, справа оператор. Оператор - это заранее подготовленная аудиозапись. Первые версии системы выглядели очевидно: если абонент говорит что-то вроде «абонент сейчас недоступен», «оставьте сообщение», «говорит голосовой помощник» - это автоответчик.
Так мы и начали.
На старте мы использовали Whisper. Он решал сразу две задачи:
расшифровка речи
примитивная детекция автоответчиков по ключевым фразам
Пока автоответчики были классическими — всё работало.
Проблемы начались позже.
Современные автоответчики и голосовые ассистенты перестали говорить шаблонно. Они:
отвечают короткими фразами («да», «слушаю», «говорите»)
переспрашивают
не палятся в начале разговора
могут поддерживать иллюзию диалога
Whisper исправно превращал звук в текст, но дальше начиналась магия угадывания. Один и тот же сценарий мог быть:
реальным человеком
умным автосекретарём
IVR банка
Ошибка стоила денег.
Whisper обрабатывал минутную запись около 20 секунд. Но даже при этом качество детекции упиралось не в ASR, а в логику.
С выходом модели T-One, обученной именно на телефонных разговорах, появилась надежда.
Мы:
заменили Whisper на T-One
получили более стабильную транскрипцию
ускорили обработку
Для удобства я написал отдельный REST API вокруг модели.
Отдельно важно про производительность. Среднее время полной обработки записи и детекции автоответчика с моделью T-One составляет около 4.9 секунды, против 20+ секунд при использовании Whisper. Это критично для нашей системы: результат нужен быстро, пока пользователь ещё ждёт исход звонка.
Важный нюанс - архитектура исполнения.
Whisper в нашем продакшене работал на GPU. Это означало отдельные GPU-ноды, очереди, более сложное масштабирование и чувствительность к пикам нагрузки. При росте количества звонков latency начинал «плыть», а стоимость обработки росла непропорционально.
T-One, в свою очередь, стабильно работает на CPU. Это позволило упростить инфраструктуру, отказаться от GPU для ASR и предсказуемо масштабироваться горизонтально. Для нашей задачи это оказалось критично: детекция должна работать быстро и стабильно, а не «иногда быстрее, иногда медленнее».
В итоге переход на T-One дал не только выигрыш по времени обработки, но и существенно упростил продакшен-эксплуатацию системы.
Но довольно быстро стало понятно: ASR - не решение задачи детекции.
Даже идеальный текст не отвечает на вопрос: это человек или бот.
Нужно было идти глубже.
ASR отвечает только за текст. Вся логика детекции вынесена в отдельные уровни.
Почему детекция по ключевым фразам ломается на современных автоответчиках.
Мы собрали датасет из ~7000 реальных звонков:
классические автоответчики
продвинутые ассистенты
IVR операторов и банков
реальные люди
Часть записей была размечена ещё во времена Whisper. Остальные — вручную, после анализа ошибок.
Изначально система принимала решения на основе жёстких пороговых правил: отдельные признаки напрямую давали ответ «да» или «нет».
Вместо этого мы перешли к скоринговой модели.
Идея простая:
система извлекает признаки
каждому признаку назначен вес
итоговый скор определяет класс
Но реализация оказалась нетривиальной.
В центре системы появился FeatureExtractor.
Он анализирует только транскрипцию и тайминги, без аудио.
Мы выделили несколько групп признаков.
Они не говорят «это бот», но создают фон:
отсутствие реакции на абсурд, мат, угрозы
репромпт-петли ("расскажите подробнее", "что-то ещё?")
отсутствие контекстных ссылок
ровный, неэскалирующий стиль
Это почти прямые маркеры автоответчика:
самоидентификация бота
IVR операторов
стандартные автоответы
умные секретари
праздничные автоответы
шаблонные бот-фразы
Они уменьшают скор:
активные вопросы
эмоции
агрессия
смех
Примеры фичей и их влияние на итоговый скор.
Всего в системе:
17 основных фичей
5 метаданных
310+ регулярных выражений
Система учитывает не только текст, но и тайминги ответа и структуру вопрос–ответ.
Главное отличие человека от бота - диалог.
Мы реализовали несколько алгоритмов:
Система ищет связки:
оператор задал вопрос
абонент ответил в разумное временное окно
ответ не является коротким маркером
Проверяем, что вопросы и ответы идут в обе стороны, а не только оператор → абонент.
Жёсткий флаг автоответчика:
длинная реплика в начале
отсутствие диалога
типичные фразы голосовой почты
Это позволило резко снизить ложные срабатывания.
Этап 6. Scorer и корректирующие правила
Показана логика принятия решений без деталей реализации.
После извлечения фичей вступает Scorer.
Алгоритм трёхуровневый:
Жёсткие маркеры
Если найден прямой признак - сразу фиксированный скор.
Накопительный скоринг
Суммирование весов всех фичей.
Корректирующие правила
Контекстная компенсация:
диалог снижает скор
voicemail усиливает
комбинации фичей фиксируют минимальный порог
Финальная классификация:
= 0.5 — автоответчик
0.3–0.5 — сомнительно
< 0.3 — человек
На текущий момент:
точность ~98%
сильно снижены false positive
система устойчива к «хитрым» ботам
Важно: это не ML-модель в классическом смысле. Это инженерная система с накопленной экспертизой.
И именно это даёт контроль и предсказуемость.
В какой-то момент мы перестали пытаться «угадать», кто перед нами - человек или автоответчик. Вместо этого начали смотреть на поведение.
Автоответчики больше не тупые.
Они не всегда палятся фразами, умеют делать паузы, переспрашивать и поддерживать иллюзию диалога.
Поэтому задача детекции - это не задача распознавания речи и не задача машинного обучения в вакууме. Это задача анализа структуры разговора, таймингов и реакции на контекст.
В нашем случае лучше всего сработала не магия и не end-to-end модель, а комбинация:
ASR для текста
набора объяснимых признаков
скоринга
и аккуратной логики принятия решений
Это дало нам контроль, предсказуемость и понятные ошибки - а для продакшена это важнее любой «умной» модели.
Источник


