← РазборыТема 03 · Whisper и его пределы
Claude Code · подкастwhisperсубтитрыбаг-фиксы

Whisper: как он врёт

Прежде чем строить конвейер на распознавании речи, автор попросил Claude написать объяснялку — как оно ломается. Получился защитный плейбук, который напрямую закрывает баги в нашем блоке субтитров.

Источник: подкаст Peter Yang × Thariq (@0xCodez, Anthropic), x.com/0xCodez/status/2078847664385368560 · ~10-я минута. Документ, который показывают на экране, называется «The Anatomy of a Transcript».

Сам приём важнее содержания

Что было сделано

Промпт был не «сделай субтитры», а «объясни мне Whisper и какие у него edge cases». Формулировка автора: важно знать как что-то может пойти не так, и это надо выяснить до постройки конвейера.

Зачем: «знание этих краевых случаев и пределов заранее реально помогло мне избежать ситуации, когда я строю сложный конвейер вокруг Whisper, а потом обнаруживаю, что что-то идёт не так, и у меня были неизвестные неизвестные».

Пять режимов отказа

Каждый — раскрой и посмотри, что делать.

Что происходит. На длинных паузах, фоновом шуме или неразборчивом бормотании модель уверенно выдаёт субтитры, на которых она обучалась — типовые ютубные концовки вроде «спасибо за просмотр» и «не забудьте подписаться».

Почему это опаснее обычной ошибки. Это не отказ распознавания — это правдоподобный вымысел. Никакой флаг ошибки не поднимается: на выходе грамматически корректный текст с нормальными таймингами.

Фикс. Прогнать VAD (детектор голосовой активности) и вырезать тишину до Whisper. Один шаг, убирает большую часть галлюцинаций.

Что происходит. При жадном декодировании модель может уйти в петлю и повторять одну фразу подряд, особенно на тихих участках и при плохом звуке.

Фикс. Фоллбэк по температуре — официальная реализация поднимает температуру лесенкой [0.0, 0.2, ...], если результат выглядит выродившимся. Стоит дёшево, включается флагом.

Что происходит. Длинный файл режется на окна фиксированной длины (около 30 секунд). Слово, попавшее на границу окна, обрабатывается в двух разных контекстах — и либо теряется, либо транскрибируется дважды.

Фикс. Скользящее окно с перекрытием помогает, но добавляет свои ошибки на стыках. Надёжнее — не резать по времени вслепую, а резать по паузам, найденным VAD.

Что происходит. Тайминги — побочный продукт декодера, а не результат измерения. Модель предсказывает временные метки как ещё одну разновидность токенов.

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

Фикс. Forced alignment: прогнать отдельный этап выравнивания (WhisperX или аналог), который честно привязывает слова к звуку. Не доверять сырым таймингам Whisper там, где важен кадр.

Что происходит. Whisper не знает, кто говорит. Диалог на два голоса приходит одним сплошным потоком.

Фикс. Диаризация — отдельный этап отдельным инструментом. Не ждать её от Whisper и не пытаться вытащить из текста.

Защитный плейбук

Вторая половина документа — раздел «что с этим делать». Порядок операций тут важен.

Правильный порядок стадий — тапни стадию
1. Ресемпл 16 кГц моно 2. VAD вырезать тишину 3. Прибить язык явно, не авто 4. Whisper + temp fallback 5. Forced align честные тайминги 6. Диаризация отдельно, если надо
Тапни стадию — зачем она и что будет, если её пропустить.
На наш завод — это баг-фикс, а не улучшение

Это буквально чеклист для нашего блока субтитров. Три вещи проверить прямо сейчас:

  1. Идёт ли VAD перед Whisper? Если нет — на паузах в озвучке MOSS лезут выдуманные фразы, и никто этого не замечает, потому что текст выглядит нормально.
  2. Прибит ли язык явно? На русской озвучке с редкими английскими терминами автоопределение — источник плавающих ошибок.
  3. Чем меряются тайминги караоке-субтитров? Если сырым Whisper — подсветка плывёт по определению. Нужен forced alignment.

Плюс: probability на слово мы получаем, но не используем. Это готовый флаг «проверь это слово» для ревью.

Аудит нашего блока субтитров

Обобщение приёма

Забрать вне зависимости от Whisper

Перед тем как строить конвейер на незнакомой технологии — попросить агента написать документ «как оно ломается». Это дешевле, чем найти те же самые режимы отказа на проде через месяц.

Формула промпта: объясни мне <технология> и разбери, какие у неё краевые случаи и режимы отказа. Отдельно — что с каждым из них делать.

Предыдущая← Монтаж видео одним промптом Следующая темаПланирование как избавление от unknowns →