Whisper: как он врёт
Прежде чем строить конвейер на распознавании речи, автор попросил Claude написать объяснялку — как оно ломается. Получился защитный плейбук, который напрямую закрывает баги в нашем блоке субтитров.
Сам приём важнее содержания
Промпт был не «сделай субтитры», а «объясни мне Whisper и какие у него edge cases». Формулировка автора: важно знать как что-то может пойти не так, и это надо выяснить до постройки конвейера.
Зачем: «знание этих краевых случаев и пределов заранее реально помогло мне избежать ситуации, когда я строю сложный конвейер вокруг Whisper, а потом обнаруживаю, что что-то идёт не так, и у меня были неизвестные неизвестные».
Пять режимов отказа
Каждый — раскрой и посмотри, что делать.
Что происходит. На длинных паузах, фоновом шуме или неразборчивом бормотании модель уверенно выдаёт субтитры, на которых она обучалась — типовые ютубные концовки вроде «спасибо за просмотр» и «не забудьте подписаться».
Почему это опаснее обычной ошибки. Это не отказ распознавания — это правдоподобный вымысел. Никакой флаг ошибки не поднимается: на выходе грамматически корректный текст с нормальными таймингами.
Фикс. Прогнать VAD (детектор голосовой активности) и вырезать тишину до Whisper. Один шаг, убирает большую часть галлюцинаций.
Что происходит. При жадном декодировании модель может уйти в петлю и повторять одну фразу подряд, особенно на тихих участках и при плохом звуке.
Фикс. Фоллбэк по температуре — официальная реализация поднимает
температуру лесенкой [0.0, 0.2, ...], если результат выглядит выродившимся.
Стоит дёшево, включается флагом.
Что происходит. Длинный файл режется на окна фиксированной длины (около 30 секунд). Слово, попавшее на границу окна, обрабатывается в двух разных контекстах — и либо теряется, либо транскрибируется дважды.
Фикс. Скользящее окно с перекрытием помогает, но добавляет свои ошибки на стыках. Надёжнее — не резать по времени вслепую, а резать по паузам, найденным VAD.
Что происходит. Тайминги — побочный продукт декодера, а не результат измерения. Модель предсказывает временные метки как ещё одну разновидность токенов.
Последствие. Для субтитров, которые читают глазами, погрешность незаметна. Для покадровой синхронизации — пословной подсветки, анимации по слову — она видна сразу и выглядит как рассинхрон.
Фикс. Forced alignment: прогнать отдельный этап выравнивания (WhisperX или аналог), который честно привязывает слова к звуку. Не доверять сырым таймингам Whisper там, где важен кадр.
Что происходит. Whisper не знает, кто говорит. Диалог на два голоса приходит одним сплошным потоком.
Фикс. Диаризация — отдельный этап отдельным инструментом. Не ждать её от Whisper и не пытаться вытащить из текста.
Защитный плейбук
Вторая половина документа — раздел «что с этим делать». Порядок операций тут важен.
Это буквально чеклист для нашего блока субтитров. Три вещи проверить прямо сейчас:
- Идёт ли VAD перед Whisper? Если нет — на паузах в озвучке MOSS лезут выдуманные фразы, и никто этого не замечает, потому что текст выглядит нормально.
- Прибит ли язык явно? На русской озвучке с редкими английскими терминами автоопределение — источник плавающих ошибок.
- Чем меряются тайминги караоке-субтитров? Если сырым Whisper — подсветка плывёт по определению. Нужен forced alignment.
Плюс: probability на слово мы получаем, но не используем. Это готовый флаг
«проверь это слово» для ревью.
Обобщение приёма
Перед тем как строить конвейер на незнакомой технологии — попросить агента написать документ «как оно ломается». Это дешевле, чем найти те же самые режимы отказа на проде через месяц.
Формула промпта: объясни мне <технология> и разбери, какие у неё краевые
случаи и режимы отказа. Отдельно — что с каждым из них делать.