Цифровая обработка сигналов
Распознавание речи
В 2022 году OpenAI выложил Whisper - модель, обученную на 680 тысячах часов аудио. Она транскрибирует речь точнее профессионального стенографиста. Но в её основе лежат алгоритмы, придуманные в 1970-х: MFCC, разработанный для экономии памяти на перфокартах. Как 50-летняя математика стала фундаментом современного AI?
- **Siri, Google Assistant, Alexa** - все используют ASR-пайплайн с VAD + акустическая модель + LM. VAD экономит до 80% вычислений, отбрасывая тишину.
- **YouTube автосубтитры** на 100+ языках работают на модели, архитектурно похожей на Whisper. 1 минута речи - около 500 токенов, декодирование занимает 200-400 мс.
- **Умные колонки** делают VAD прямо на DSP-чипе (ARM Cortex-M) при потреблении 1-2 мВт, прежде чем будить основной процессор - иначе батарея садилась бы за часы.
MFCC: мел-частотные кепстральные коэффициенты
Человеческое ухо слышит не линейно - разница между 100 и 200 Гц воспринимается так же ярко, как разница между 1000 и 2000 Гц. Именно этот факт лежит в основе MFCC (Mel-Frequency Cepstral Coefficients) - признаков, на которых работают все классические ASR-системы и которые до сих пор используются в акустических моделях даже в эпоху нейросетей. Вычисление MFCC состоит из цепочки шагов: разбивка сигнала на кадры (25 мс, шаг 10 мс), применение оконной функции (Хэмминг), FFT, прохождение через банк мел-фильтров (обычно 40 фильтров), логарифм энергии в каждом фильтре, DCT - и на выходе получается вектор из 12-13 коэффициентов, компактно описывающий спектральный облик звука в данный момент времени.
Мел-шкала: mel = 2595 * log10(1 + f/700). При 1000 Гц мел совпадает с Гц, выше - растёт значительно медленнее. Это отражает логарифмическую чувствительность улитки уха. Whisper от OpenAI использует 80 мел-фильтров вместо стандартных 40 - это один из секретов его точности.
Зачем в вычислении MFCC применяется DCT после мел-фильтров?
Спектрограмма и STFT
Спектрограмма - это способ превратить одномерный аудиосигнал в двумерное изображение (время x частота), причём именно в таком формате нейросети-трансформеры обрабатывают звук. Whisper принимает на вход лог-мел-спектрограмму размером 80x3000, что соответствует 30 секундам аудио. Short-Time Fourier Transform (STFT) - сердцевина процесса: окно скользит по сигналу, для каждого положения вычисляется FFT, результаты складываются в матрицу. Ключевой компромисс: чем шире окно, тем лучше частотное разрешение, но хуже временное. Для речи стандарт - 25 мс окно, 10 мс шаг.
Лог-мел-спектрограмма vs MFCC: первая сохраняет полный спектральный профиль (80 значений на кадр), MFCC сжимает его до 13. Современные нейросети (Wav2Vec 2.0, Whisper) работают прямо с лог-мел, потому что DCT-сжатие отбрасывает информацию, полезную для нейросетей.
Whisper принимает на вход лог-мел-спектрограмму 80x3000. Что означает число 3000?
VAD: детекция голосовой активности
Прежде чем распознавать речь, нужно понять, где она есть. Voice Activity Detection (VAD) - это бинарная классификация каждого кадра: речь или тишина/шум. Без VAD ASR-система тратит ресурсы на обработку пустых участков и накапливает ошибки. WebRTC VAD (встроен в браузеры) использует GMM на энергии и нулевых пересечениях - работает за микросекунды, но чувствителен к шуму. Silero VAD (PyTorch, 2021) - нейросетевой подход: LSTM на 16 кГц аудио, точность 94%+ в шумных условиях, модель весит 1.8 MB. Именно Silero используется в Whisper.cpp для pre-filtering перед транскрипцией.
Типичные пороги VAD: speech_threshold=0.5, min_speech_duration=250 мс, min_silence_duration=100 мс. Слишком агрессивный VAD обрезает начала слов (clipping) - это хуже, чем захватить лишнюю тишину.
Почему VAD с агрессивным порогом (высокий threshold) опаснее, чем мягкий?
ASR-пайплайн: от звука к тексту
Полный ASR-пайплайн складывается из акустической модели (AM), языковой модели (LM) и декодера. Классический подход (до 2018): GMM-HMM акустика + n-gram LM + beam search. Современный подход: end-to-end нейросеть (CTC или Attention) - одна модель делает всё. Whisper - encoder-decoder трансформер: энкодер обрабатывает спектрограмму, декодер авторегрессивно генерирует токены. Wav2Vec 2.0 (Meta) использует CTC-декодирование без языковой модели и при этом достигает 1.8% WER на LibriSpeech - ниже, чем у человека-транскрибера.
Метрики ASR: WER (Word Error Rate) = (S+D+I)/N, где S-замены, D-удаления, I-вставки, N-общее число слов. WER 5% считается хорошим для общей речи. Google Speech-to-Text достигает 4.9% WER на английском, Whisper large-v3 - 2.7%.
В чём принципиальная разница между CTC и Attention-based декодированием в ASR?
Ключевые идеи
- **MFCC** имитирует нелинейность слуха через мел-шкалу и DCT - 13 чисел компактно описывают спектральный отпечаток звука каждые 10 мс.
- **Спектрограмма** (лог-мел) сохраняет больше информации, чем MFCC, и именно её используют современные нейросети - Whisper, Wav2Vec 2.0.
- **VAD** - обязательный этап перед ASR: без него система тратит ресурсы на шум и галлюцинирует. Нейросетевой Silero VAD бьёт классический WebRTC VAD в шумных условиях.
- **ASR-пайплайн** эволюционировал от GMM-HMM+n-gram к end-to-end трансформерам. Whisper large-v3 достигает WER 2.7% - ниже среднего человека.
Связанные темы
Распознавание речи опирается на фундаментальные DSP-концепции из предыдущих уроков:
- Дискретное преобразование Фурье — FFT - сердцевина STFT и вычисления спектрограммы; без быстрого Фурье ASR был бы невозможен в реальном времени
- Цифровые фильтры — Банк мел-фильтров - специализированная фильтрация по частоте, аналог полосовых фильтров в непрерывной области
Вопросы для размышления
- Whisper иногда 'галлюцинирует' - добавляет слова, которых не было. Какой параметр пайплайна мог бы снизить этот эффект?
- Если нужно распознавать речь на устройстве с 256 КБ RAM (микроконтроллер), какой компромисс придётся сделать в ASR-пайплайне?
- Почему WER плохо измеряет качество ASR для языков с агглютинативной морфологией (финский, турецкий)?