Задача
Контакт-центр банка: распознавать разговоры в реальном времени — для подсказок оператору по ходу фразы и автоматического контроля качества. Поток — десятки одновременных звонков, каждый длинный, по два канала (оператор и клиент).
Записи в облако отправлять нельзя: банковская тайна и 152-ФЗ, распознавание должно жить внутри периметра заказчика. Дополнительно — шумная телефонная линия, узкополосный кодек и русская разговорная речь с перебивками, что бьёт по WER сильнее любого диктора в студии.
Подход
Развернули потоковый ASR на одной GPU-ноде заказчика. Декодирование идёт частичными гипотезами: оператор видит текст по ходу фразы, а не после её конца. Диаризацию не строили — дорожки оператора и клиента уже разведены на уровне телефонии, тяжёлые re-id сети там лишние.
Модель дообучили на доменной разговорной речи и квантовали в INT8 под целевую карту — это подняло throughput и заодно сбило WER на шумной линии. На входе — очередь с backpressure: на пике каналов система не захлёбывается, а ставит новые сегменты в очередь и держит RTF под контролем вместо тихого срыва реального времени.
Стек
CUDA · TensorRT (INT8) · streaming decoder · WebRTC VAD · Rust (демон очередей)
Результат
- 0.18 RTF на пике — запас до границы реального времени около пяти раз.
- 40 каналов на одну GPU-ноду без срыва стриминга.
- −31% WER на доменной речи после дообучения и INT8.
- Ноль данных за периметром — весь поток обрабатывается на месте.