Как работает Whisper (architecture, tokenization, training) для ASR?

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

Whisper — это encoder-decoder transformer от OpenAI для Automatic Speech Recognition (ASR), обученный на 680 000 часов мультиязычных аудиоданных. Аудио преобразуется в log-Mel спектрограммы, которые кодируются encoder'ом, а decoder генерирует текст (или перевод) авторегрессивно с cross-attention к encoder'у. Модель поддерживает multitask (распознавание, перевод, идентификация языка) и показывает сильные zero-shot результаты.


1. Термин: ASR (Automatic Speech Recognition)

ASR — задача преобразования речевого сигнала в текст. Whisper решает её как sequence-to-sequence задачу: аудио → текст.

Почему Whisper важен

  • Мультиязычность (99 языков)
  • Multitask (распознавание, перевод на английский, идентификация языка, временные метки)
  • Обучен на больших данных → устойчив к шуму, акцентам, разным условиям записи
  • Открытая модель (веса, код)

2. Архитектура: Encoder-Decoder Transformer

Whisper использует классическую архитектуру transformer, но с аудио-специфичными модификациями.

2.1 Encoder

  • Вход log-Mel спектрограмма размерности (T, 80), где T — число временных фреймов (обычно 25 мс на фрейм, stride 10 мс).
  • Свёрточный stem два 1D-свёрточных слоя с kernel size=3, stride=2, GELU активацией. Это уменьшает временную размерность в 4 раза (T/4) и добавляет локальный контекст.
  • Позиционные кодирования синусоидальные (sin/cos), добавляются к выходу свёрток.
  • Transformer блоки 6 блоков (для tiny), 12 (base), 24 (large). Каждый блок: multi-head self-attention + feed-forward (GELU). Размерность модели d_model=384 (tiny), 512 (base), 1024 (large).
  • Выход последовательность скрытых состояний H_enc размером (T/4, d_model).

2.2 Decoder

  • Вход токены текста (BPE токены) + специальные токены задачи (например, <|startoftranscript|>, <|en|>, <|transcribe|>).
  • Позиционные кодирования обучаемые.
  • Transformer блоки столько же, сколько в encoder (6/12/24). Каждый блок:
    • Masked self-attention (авторегрессивный, с causal mask)
    • Cross-attention к выходу encoder (keys и values из H_enc)
    • Feed-forward (GELU)
  • Выход логиты над словарём BPE токенов (≈50k токенов).

2.3 Cross-Attention

Связь между encoder и decoder: decoder на каждом шаге «смотрит» на всю аудио-последовательность через cross-attention. Это позволяет модели выравнивать текст и аудио без явного alignment (в отличие от CTC).


3. Токенизация

3.1 Аудио → спектрограмма

  • Аудио ресемплируется до 16 кГц (моно).
  • Вычисляется log-Mel спектрограмма с 80 Mel-фильтрами, окно 25 мс, шаг 10 мс.
  • Нормализация: вычитание среднего и деление на стандартное отклонение (по каждому Mel-каналу).

3.2 Текст → BPE токены

  • Используется Byte-Pair Encoding (BPE) токенизатор, обученный на текстовом корпусе (включая мультиязычный).
  • Словарь: ≈50k токенов, включая специальные токены:
    • <|startoftranscript|>, <|endoftext|>
    • Токены языка: <|en|>, <|ru|>, <|fr|> и т.д.
    • Токены задачи: <|transcribe|>, <|translate|>
    • Токены временных меток: <|0.00|>, <|5.00|> и т.д. (для сегментации)

4. Обучение (Training)

4.1 Датасет

  • 680 000 часов мультиязычного аудио, собранного из интернета (YouTube, подкасты, лекции).
  • 65% английский, 35% другие языки (99 языков).
  • Аудио разбито на сегменты по 30 секунд.
  • Транскрипции: автоматические (ASR) + ручные для части данных.

4.2 Multitask обучение

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

Токены задачиОписание
`<transcribe
`<translate
`<transcribe
`<lang

4.3 Loss function

  • Cross-entropy loss на выходе decoder (предсказание следующего токена).
  • Для задач с временными метками — дополнительный loss на предсказание времени (регрессия? нет, токены времени дискретны).

4.4 Оптимизация

  • AdamW optimizer
  • Learning rate: линейный warmup + косинусный decay
  • Batch size: до 256 (на large)
  • Обучение на 8 GPU (V100/A100) несколько недель
  • Data augmentation: SpecAugment (маскирование частотных и временных полос), случайные шумы

4.5 Стратегия предотвращения переобучения

  • Dropout (0.1)
  • Weight decay
  • Early stopping на валидационном WER (Word Error Rate)

5. Инференс (Decoding)

  • Autoregressive decoding на каждом шаге decoder предсказывает следующий токен, используя предыдущие.
  • Beam search (ширина луча 5) для улучшения качества.
  • Temperature sampling (T=0 для детерминированного, T>0 для разнообразия).
  • Suppress tokens можно запретить определённые токены (например, non-speech).
  • Выход текст + опционально временные метки (токены времени интерполируются в секунды).

6. Особенности и преимущества

ОсобенностьОписание
Multilingual99 языков, zero-shot на ненаблюдаемых языках
MultitaskОдна модель для ASR, translation, language ID
RobustnessУстойчив к шуму, реверберации, акцентам
No fine-tuning neededХорошие результаты out-of-the-box
Open sourceВеса, код, токенизатор доступны

Недостатки

  • Большой размер (large: 1.55B параметров)
  • Высокая задержка (real-time factor ≈ 0.5-1.0 на GPU)
  • Не оптимизирован для streaming (требуется весь аудиофайл)

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

МодельАрхитектураОбучениеЯзыкиРазмер
WhisperEncoder-decoder transformer680k часов, multitask991.55B (large)
wav2vec 2.0CNN + transformer encoderSelf-supervised + fine-tune~50300M (large)
HuBERTCNN + transformer encoderSelf-supervised + fine-tune~50300M
DeepSpeechRNN (LSTM)Supervised~10100M
ConformerCNN + transformer encoderSupervised~50600M

Whisper выигрывает в zero-shot и мультиязычности, но проигрывает в скорости и streaming.


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

Задача Fine-tune Whisper small на русском языке для улучшения распознавания специфической терминологии (например, медицинской).

Инструменты

  • Python, PyTorch, Hugging Face Transformers, Datasets
  • Датасет: Common Voice Russian (или собственный)
  • GPU (Colab или локально)

Шаги:

  1. Загрузить предобученный Whisper small (openai/whisper-small).
  2. Подготовить датасет: аудио (16 кГц, моно) + транскрипции.
  3. Вычислить log-Mel спектрограммы (можно через WhisperFeatureExtractor).
  4. Токенизировать текст (BPE токенизатор Whisper).
  5. Создать DataLoader с padding и attention mask.
  6. Fine-tune только decoder (заморозить encoder) или всю модель (если ресурсы позволяют).
  7. Использовать AdamW, learning rate 1e-5, batch size 8, 3 эпохи.
  8. Оценить WER на тестовой выборке.

Ожидаемый результат Снижение WER на 5-10% по сравнению с базовой моделью на целевой терминологии.


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

ВопросТема
362Как работают системы на основе аудио-эмбеддингов (например, wav2vec 2.0)?
364Как работает модель для TTS (например, Tacotron или FastSpeech)?
350Как работает архитектура Transformer (self-attention, multi-head)?
351Что такое tokenization (BPE, WordPiece, SentencePiece)?
355Как обучать большие модели (data parallelism, mixed precision)?
360Что такое fine-tuning и когда он нужен?

10. Навигация


Навигация