Как работает 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 Стратегия предотвращения переобучения
5. Инференс (Decoding)
- Autoregressive decoding на каждом шаге decoder предсказывает следующий токен, используя предыдущие.
- Beam search (ширина луча 5) для улучшения качества.
- Temperature sampling (T=0 для детерминированного, T>0 для разнообразия).
- Suppress tokens можно запретить определённые токены (например, non-speech).
- Выход текст + опционально временные метки (токены времени интерполируются в секунды).
6. Особенности и преимущества
| Особенность | Описание |
|---|---|
| Multilingual | 99 языков, 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 моделями
| Модель | Архитектура | Обучение | Языки | Размер |
|---|---|---|---|---|
| Whisper | Encoder-decoder transformer | 680k часов, multitask | 99 | 1.55B (large) |
| wav2vec 2.0 | CNN + transformer encoder | Self-supervised + fine-tune | ~50 | 300M (large) |
| HuBERT | CNN + transformer encoder | Self-supervised + fine-tune | ~50 | 300M |
| DeepSpeech | RNN (LSTM) | Supervised | ~10 | 100M |
| Conformer | CNN + transformer encoder | Supervised | ~50 | 600M |
Whisper выигрывает в zero-shot и мультиязычности, но проигрывает в скорости и streaming.
8. Пет-проект для закрепления
Задача Fine-tune Whisper small на русском языке для улучшения распознавания специфической терминологии (например, медицинской).
Инструменты
- Python, PyTorch, Hugging Face Transformers, Datasets
- Датасет: Common Voice Russian (или собственный)
- GPU (Colab или локально)
Шаги:
- Загрузить предобученный Whisper small (
openai/whisper-small). - Подготовить датасет: аудио (16 кГц, моно) + транскрипции.
- Вычислить log-Mel спектрограммы (можно через
WhisperFeatureExtractor). - Токенизировать текст (BPE токенизатор Whisper).
- Создать DataLoader с padding и attention mask.
- Fine-tune только decoder (заморозить encoder) или всю модель (если ресурсы позволяют).
- Использовать AdamW, learning rate 1e-5, batch size 8, 3 эпохи.
- Оценить 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. Навигация
- Предыдущий: 362
- Следующий: 364
- Индекс: 00. Индекс разборов
Навигация
- Предыдущий: 362
- Следующий: 364
- Индекс: 00. Индекс разборов