У нас есть ASR-сервис на базе GigaAM: 23.9% WER на 80-минутной записи (подробнее — в ). Мы подумали: добавить DSP (цифровую обработку сигнала) перед распознаванием? Убрать шум, нормализовать громкость, подавить эхо. Ведь чем чище сигнал — тем лучше ASR.
Оказалось — не всегда.
Три алгоритма — три результата
Spectral Subtraction: катастрофа
Классический DSP-алгоритм: оцениваем спектр шума в тишине и вычитаем его из всего сигнала.
Результат: WER вырос с 23.9% до 36.4% (+12.5 процентных пунктов).
Почему: спектральное подавление искажает короткие фонемы. GigaAM — CTC-модель, которая и так плохо работает со словами-паразитами ("ну", "э-э", "м-м"). DSP делает их ещё менее различимыми.
SoX loudnorm: нейтрально
Нормализация громкости через SoX: WER вырос на 0.3-1.1% в зависимости от конфигурации. Не катастрофа, но и не улучшение.
Highpass + noise gate: без изменений
Highpass 60Hz (убирает гул) + noise gate -45dB (отсекает тишину): WER 25.0% (+1.1%). Практически нейтрально.
Итоговая таблица
Метод
WER
Δ к базе
Время
Без DSP (база)
23.9%
—
297 сек
Spectral subtraction
36.4%
+12.5%
722 сек
HP 60Hz + noise gate
25.0%
+1.1%
310 сек
HP 60Hz только
25.0%
+1.1%
299 сек
SoX loudnorm
24.2-25.0%
+0.3-1.1%
305 сек
Почему DSP вредит GigaAM
GigaAM — CTC-модель (Connectionist Temporal Classification). Распознаёт речь по последовательности фонем, без явной языковой модели. Подробнее о .
Три причины:
Причина
Объяснение
Короткие слова критичны
"ну", "а", "э" — 1-2 фонемы. DSP их искажает
Нет языковой модели
BERT-based ASR "угадывают" слово по контексту. GigaAM — нет
Шум = часть данных
GigaAM обучен на реальных записях с шумом. DSP меняет распределение
Что делать вместо DSP
Вариант
Когда использовать
Результат
Ничего
Запись приемлемого качества
GigaAM справляется
Highpass 60Hz
Есть низкочастотный гул
Нейтрально
VAD (Silero)
Нужно убрать тишину
221 чанк за 5 сек на 80 мин
Вывод
Не все «улучшения» улучшают. DSP работает отлично с Whisper (обучен на чистых данных), но ломает GigaAM (обучен на реальных записях). Перед оптимизацией нужно понимать, как модель обучена.
Все цифры получены на наших данных (80-минутная запись, DGX Spark GB10). DSP тестировался через SoX и кастомные скрипты. Эталон — Gemini transcript.