English translation is not available yet. Showing Russian content.

Как работает Whisper архитектурно для ASR (Automatic Speech Recognition)?

Краткий тезис

Whisper — это transformer|encoder-decoder transformer от OpenAI, предназначенный для распознавания речи (ASR). Аудиосигнал преобразуется в log-Mel спектрограмму, которая подаётся в encoder. Encoder использует два свёрточных слоя для даунсемплинга, а затем стек transformer-блоков. Decoder авторегрессивно генерирует транскрипцию, используя cross-attention к encoder. Модель обучена на 680k часах мультиязычных данных, поддерживает 90+ языков и умеет выполнять не только транскрипцию, но и перевод на английский, а также определять язык.


1. Общая архитектура Whisper

Whisper — это sequence-to-sequence (seq2seq) модель, основанная на архитектуре Transformer. Она состоит из двух основных частей:

  • Encoder — преобразует входное аудио в скрытые представления (hidden states).
  • Decoder — генерирует выходной текст (транскрипцию, перевод или метку языка) авторегрессивно, токен за токеном.

В отличие от классических ASR-систем (например, CTC-моделей), Whisper не использует отдельный языковой модуль или фонетический словарь — всё обучено end-to-end.

КомпонентНазначение
EncoderИзвлекает акустические признаки из спектрограммы
DecoderГенерирует текстовую последовательность с учётом контекста аудио
Cross-attentionСвязь decoder с encoder: каждый шаг decoder «смотрит» на все выходы encoder

2. Предобработка аудио: log-Mel спектрограмма

Входное аудио (моно, 16 кГц) сначала преобразуется в log-Mel спектрограмму — двумерное представление частот по времени.

  • Аудио разбивается на окна (frame) длиной 25 мс со сдвигом 10 мс.
  • Для каждого окна вычисляется спектр через STFT (Short-Time Fourier Transform).
  • Спектр сводится к Mel-шкале — 80 Mel-фильтров, имитирующих восприятие человеческого уха.
  • Берётся логарифм от амплитуды: log(Mel спектр + 1e-10).

Итоговый тензор имеет размерность (T, 80), где T — число временных шагов (frames). Для 30-секундного аудио T ≈ 3000.

Почему log-Mel

  • Mel-шкала снижает размерность (80 каналов вместо 257 в линейном спектре).
  • Логарифм сжимает динамический диапазон, делая признаки более устойчивыми к громкости.

3. Encoder: свёрточные слои и transformer

Encoder Whisper состоит из:

  1. Два свёрточных слоя (conv1d) с ядром размера 3 и stride=1, каждый с GELU активацией.

    • Первый слой: in_channels=80 (Mel-каналы) → out_channels=encoder_dim (например, 384 для small, 1024 для large).
    • Второй слой: сохраняет размерность.
    • Даунсемплинг не используется (stride=1), но свёртки уменьшают временную размерность за счёт padding? На самом деле, в Whisper свёртки не меняют длину последовательности (padding='same'). Однако в оригинальной статье упоминается, что свёртки выполняют «локальное сжатие» признаков. Позже в transformer-блоках используется позиционное кодирование (sinusoidal).
  2. Стек transformer-блоков (количество зависит от размера модели: 6 для tiny, 32 для large). Каждый блок содержит:

    • Multi-head self-attention (с residual connection и layer norm).
    • Feed-forward network (FFN) с расширением в 4 раза.
    • Layer norm перед каждым подуровнем (pre-norm).

Выход encoder — последовательность скрытых векторов (T, d_model), где d_model — размерность модели.

Почему свёртки перед transformer

  • Они помогают модели извлекать локальные паттерны (например, форманты) до того, как self-attention начнёт обрабатывать глобальный контекст.
  • Увеличивают эффективность: transformer может сосредоточиться на более высокоуровневых зависимостях.

4. Decoder: авторегрессивная генерация

Decoder Whisper — это стандартный autoregressive transformer decoder. Он генерирует выходную последовательность токенов по одному, используя:

  • Masked self-attention — каждый токен может «смотреть» только на предыдущие (чтобы не подглядывать в будущее).
  • Cross-attention — каждый токен decoder обращается ко всем выходам encoder (ключи и значения от encoder, запросы от decoder).
  • Feed-forward — как в encoder.

На первом шаге decoder получает специальный токен <|startoftranscript|>. Затем на каждом шаге он предсказывает следующий токен, используя предыдущие.

Выходные задачи (multitask):

  • Транскрипция на исходном языке.
  • Перевод на английский (если указан токен <|translate|>).
  • Определение языка (токен <|lang|>).
  • Метка временных меток (опционально).

Все задачи решаются одной моделью — выбор задачи кодируется специальными токенами в начале последовательности.


5. Токенизация: Byte-Pair Encoding (BPE)

Whisper использует Byte-Pair Encoding (BPE) для токенизации текста. Словарь размером 51865 токенов (включая специальные токены для языков, задач и временных меток).

  • BPE разбивает текст на подслова (subwords), что позволяет обрабатывать редкие слова и мультиязычные тексты.
  • В отличие от многих ASR-систем, которые используют фонемы или символы, Whisper работает на уровне текста, что упрощает интеграцию с downstream-задачами.

Пример: слово "hello" может быть токеном [15339], а слово "hel" + "lo" — двумя токенами.


6. Обучение: данные, задачи, loss

Whisper обучен на 680 000 часах мультиязычного аудио, собранного из интернета (в основном YouTube). Данные включают 90+ языков, а также английский перевод для части записей.

Обучение с учителем (supervised):

  • Для каждого аудиофайла есть транскрипция на исходном языке, а для некоторых — ещё и английский перевод.
  • Модель обучается предсказывать последовательность токенов, которая включает:
    <|startoftranscript|> <|lang|> <|task|> <|transcribe|> <текст> <|endoftext|>

Функция потерь Cross-entropy loss на каждом шаге decoder (стандартный loss для языковых моделей).

Особенности обучения

  • Размер батча: до 256 аудиофайлов (каждый обрезан до 30 секунд).
  • Оптимизатор: AdamW, learning rate с warmup и cosine decay.
  • Регуляризация: dropout, weight decay.
  • Модели разных размеров: tiny (39M), base (74M), small (244M), medium (769M), large (1550M).

7. Мультиязычность и мультизадачность

Whisper умеет одновременно:

  • Транскрибировать аудио на любом из 90+ языков.
  • Переводить аудио на английский (если задан токен <|translate|>).
  • Определять язык аудио (без отдельного классификатора).

Это достигается за счёт специальных токенов в начале последовательности decoder:

  • <|en|>, <|fr|>, <|de|> и т.д. — язык.
  • <|transcribe|> — задача транскрипции.
  • <|translate|> — задача перевода на английский.

Модель обучается на всех комбинациях, поэтому может выполнять любую задачу в зависимости от промпта.


8. Инференс: стратегии декодирования

На этапе инференса Whisper использует beam search (по умолчанию beam size=5) для улучшения качества. Также поддерживается temperature sampling для стохастической генерации (полезно для креативных задач).

Параметры декодирования

  • beam_size — ширина луча (чем больше, тем лучше, но медленнее).
  • temperature — контролирует «случайность» (0 — жадный поиск, >0 — sampling).
  • compression_ratio — штраф за повторение токенов.
  • no_speech_threshold — если вероятность токена <|nospeech|> высока, модель считает, что речи нет.

Обработка длинных аудио
Whisper принимает аудио длиной до 30 секунд. Для более длинных записей используется sliding window с перекрытием (chunking). Каждый чанк транскрибируется отдельно, затем результаты объединяются с учётом временных меток.


9. Сравнение с другими ASR-моделями

МодельАрхитектураОбучениеЯзыкиОсобенности
WhisperEncoder-decoder transformerSupervised (680k часов)90+Multitask, без предобучения на неразмеченных данных
wav2vec 2.0CNN + transformer encoderSelf-supervised (CTC)Любые (дообучение)Требует дообучения под язык, меньше данных
HuBERTCNN + transformer encoderSelf-supervised (кластеризация)ЛюбыеБолее устойчив к шуму, чем wav2vec
DeepSpeechRNN (LSTM) + CTCSupervisedОграниченУстаревшая, но простая

Whisper выигрывает в мультиязычности и удобстве (одна модель для всего), но проигрывает в скорости и размере (large модель ~1.5B параметров).


10. Ограничения и особенности

  • Размер модели large версия требует много GPU памяти (около 10 GB для batch size=1).
  • Задержка (latency): из-за encoder-decoder архитектуры и beam search инференс медленнее, чем у CTC-моделей.
  • Длинные аудио chunking может привести к потере контекста между чанками (например, разрыв предложения).
  • Шум и акценты модель обучена на YouTube, поэтому хорошо работает с чистой речью, но может ошибаться на сильном шуме или нестандартных акцентах.
  • Только английский перевод перевод возможен только на английский (не на другие языки).

11. Пет-проект для закрепления

Задача Создать веб-приложение для транскрипции и перевода аудиофайлов с помощью Whisper.

Инструменты

  • Python, библиотека openai-whisper
  • gradio для интерфейса
  • ffmpeg для конвертации аудио

Шаги:

  1. Установить зависимости: pip install openai-whisper gradio ffmpeg-python
  2. Загрузить модель: model = whisper.load_model("base")
  3. Написать функцию, которая принимает аудиофайл, возвращает транскрипцию и перевод:
    def transcribe_and_translate(audio_path):
        result = model.transcribe(audio_path, task="transcribe")
        translation = model.transcribe(audio_path, task="translate")
        return result["text"], translation["text"]
    
  4. Создать интерфейс Gradio:
    import gradio as gr
    iface = gr.Interface(
        fn=transcribe_and_translate,
        inputs=gr.Audio(type="filepath"),
        outputs=[gr.Textbox(label="Транскрипция"), gr.Textbox(label="Перевод")]
    )
    iface.launch()
    
  5. Протестировать на разных аудио (свои записи, примеры из интернета).

Ожидаемый результат Рабочее приложение, которое принимает аудио (mp3, wav) и выводит транскрипцию на исходном языке и перевод на английский. Можно добавить выбор модели (tiny, small, medium, large) и параметры декодирования.


12. Связь с другими вопросами

ВопросТема
541Архитектура encoder-decoder в NLP
542Механизм cross-attention
544Интеграция ASR в RAG-систему
545Сравнение Whisper и wav2vec 2.0
546Fine-tuning Whisper под специфический домен
548Мультиязычное распознавание речи

Навигация