Как мы научились определять продвинутые автоответчикиГод назад мы начали использовать ASR для обработки записей телефонных звонков.TL;DR: вместо бинарных правилКак мы научились определять продвинутые автоответчикиГод назад мы начали использовать ASR для обработки записей телефонных звонков.TL;DR: вместо бинарных правил

Как мы научились определять продвинутые автоответчики

2026/02/13 09:31
5м. чтение

Как мы научились определять продвинутые автоответчики

Год назад мы начали использовать ASR для обработки записей телефонных звонков.

TL;DR: вместо бинарных правил и end-to-end ML мы выбрали скоринговую систему поверх ASR (T-One): анализируем диалог и поведение, получаем ~98% точности при среднем времени обработки ~4.9 сек вместо 20+ сек на Whisper.
Задача казалась простой: понять, ответил ли абонент сам или сработал автоответчик, и на основании этого корректно завершить звонок и вернуть деньги пользователю при неудаче.

На практике всё оказалось сильно сложнее.

Мы работаем с телефонными розыгрышами. Записи стерео: слева абонент, справа оператор. Оператор - это заранее подготовленная аудиозапись. Первые версии системы выглядели очевидно: если абонент говорит что-то вроде «абонент сейчас недоступен», «оставьте сообщение», «говорит голосовой помощник» - это автоответчик.

Так мы и начали.

Этап 1. Когда автоответчики перестали быть тупыми

На старте мы использовали Whisper. Он решал сразу две задачи:

  • расшифровка речи

  • примитивная детекция автоответчиков по ключевым фразам

Пока автоответчики были классическими — всё работало.

Проблемы начались позже.

Современные автоответчики и голосовые ассистенты перестали говорить шаблонно. Они:

  • отвечают короткими фразами («да», «слушаю», «говорите»)

  • переспрашивают

  • не палятся в начале разговора

  • могут поддерживать иллюзию диалога

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

  • реальным человеком

  • умным автосекретарём

  • IVR банка

Ошибка стоила денег.

Whisper обрабатывал минутную запись около 20 секунд. Но даже при этом качество детекции упиралось не в ASR, а в логику.

Этап 2. Переход на T-One и тупик

С выходом модели 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 → FeatureExtractor → Scorer → Классификация
Общая схема системы - ASR → FeatureExtractor → Scorer → Классификация

ASR отвечает только за текст. Вся логика детекции вынесена в отдельные уровни.

Этап 3. Переход от правил к скорингу

Ключевые фразы vs Скоринг и диалог
Ключевые фразы vs Скоринг и диалог

Почему детекция по ключевым фразам ломается на современных автоответчиках.

Мы собрали датасет из ~7000 реальных звонков:

  • классические автоответчики

  • продвинутые ассистенты

  • IVR операторов и банков

  • реальные люди

Часть записей была размечена ещё во времена Whisper. Остальные — вручную, после анализа ошибок.

Изначально система принимала решения на основе жёстких пороговых правил: отдельные признаки напрямую давали ответ «да» или «нет».

Вместо этого мы перешли к скоринговой модели.

Идея простая:

  • система извлекает признаки

  • каждому признаку назначен вес

  • итоговый скор определяет класс

Но реализация оказалась нетривиальной.

Этап 4. FeatureExtractor: 300+ паттернов против ботов

В центре системы появился FeatureExtractor.

Он анализирует только транскрипцию и тайминги, без аудио.

Мы выделили несколько групп признаков.

Базовые признаки

Они не говорят «это бот», но создают фон:

  • отсутствие реакции на абсурд, мат, угрозы

  • репромпт-петли ("расскажите подробнее", "что-то ещё?")

  • отсутствие контекстных ссылок

  • ровный, неэскалирующий стиль

Сильные признаки

Это почти прямые маркеры автоответчика:

  • самоидентификация бота

  • IVR операторов

  • стандартные автоответы

  • умные секретари

  • праздничные автоответы

  • шаблонные бот-фразы

Человеческие признаки

Они уменьшают скор:

  • активные вопросы

  • эмоции

  • агрессия

  • смех

Матрица
Матрица

Примеры фичей и их влияние на итоговый скор.

Всего в системе:

  • 17 основных фичей

  • 5 метаданных

  • 310+ регулярных выражений

Этап 5. Детекция диалога, а не текста

Временная диаграмма диалога
Временная диаграмма диалога

Система учитывает не только текст, но и тайминги ответа и структуру вопрос–ответ.

Главное отличие человека от бота - диалог.

Мы реализовали несколько алгоритмов:

Turn-taking QA

Система ищет связки:

  • оператор задал вопрос

  • абонент ответил в разумное временное окно

  • ответ не является коротким маркером

Двунаправленный диалог

Проверяем, что вопросы и ответы идут в обе стороны, а не только оператор → абонент.

Voicemail-like детекция

Жёсткий флаг автоответчика:

  • длинная реплика в начале

  • отсутствие диалога

  • типичные фразы голосовой почты

Это позволило резко снизить ложные срабатывания.

Этап 6. Scorer и корректирующие правила

Упрощённое дерево принятия решений
Упрощённое дерево принятия решений

Показана логика принятия решений без деталей реализации.

После извлечения фичей вступает Scorer.

Алгоритм трёхуровневый:

  1. Жёсткие маркеры
    Если найден прямой признак - сразу фиксированный скор.

  2. Накопительный скоринг
    Суммирование весов всех фичей.

  3. Корректирующие правила
    Контекстная компенсация:

  • диалог снижает скор

  • voicemail усиливает

  • комбинации фичей фиксируют минимальный порог

Финальная классификация:

  • = 0.5 — автоответчик

  • 0.3–0.5 — сомнительно

  • < 0.3 — человек

Этап 7. Результаты

На текущий момент:

  • точность ~98%

  • сильно снижены false positive

  • система устойчива к «хитрым» ботам

Важно: это не ML-модель в классическом смысле. Это инженерная система с накопленной экспертизой.

И именно это даёт контроль и предсказуемость.

Вывод

В какой-то момент мы перестали пытаться «угадать», кто перед нами - человек или автоответчик. Вместо этого начали смотреть на поведение.

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

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

В нашем случае лучше всего сработала не магия и не end-to-end модель, а комбинация:

  • ASR для текста

  • набора объяснимых признаков

  • скоринга

  • и аккуратной логики принятия решений

Это дало нам контроль, предсказуемость и понятные ошибки - а для продакшена это важнее любой «умной» модели.

Источник

Возможности рынка
Логотип 4
4 Курс (4)
$0.009326
$0.009326$0.009326
+2.03%
USD
График цены 4 (4) в реальном времени
Отказ от ответственности: Статьи, размещенные на этом веб-сайте, взяты из общедоступных источников и предоставляются исключительно в информационных целях. Они не обязательно отражают точку зрения MEXC. Все права принадлежат первоисточникам. Если вы считаете, что какой-либо контент нарушает права третьих лиц, пожалуйста, обратитесь по адресу service@support.mexc.com для его удаления. MEXC не дает никаких гарантий в отношении точности, полноты или своевременности контента и не несет ответственности за любые действия, предпринятые на основе предоставленной информации. Контент не является финансовой, юридической или иной профессиональной консультацией и не должен рассматриваться как рекомендация или одобрение со стороны MEXC.