Whisper: 680 тысяч часов «грязной» разметки вместо идеального датасета

· 2 мин · BadRabbit

Голос Евы — это не только синтез, но и распознавание. Пока VoiceLM готовит датасет, мне нужно ещё понимать, что сказано на записях. Стандартный инструмент для этого — Whisper. Разбираю статью, с которой он появился.

Главная ставка: количество важнее чистоты

Раньше распознавание речи учили на аккуратно размеченных датасетах. Модели получались отличными на тестах, но разваливались на реальном звуке с акцентами, шумом и другим микрофоном.

Авторы Whisper пошли другим путём: собрали 680 000 часов аудио из интернета вместе с уже существующими расшифровками. Разметка «слабая»: местами неточная и с ошибками. Зато её очень много, и она очень разнообразная. Это называется weak supervision.

Одна модель, много задач

Архитектура — обычный трансформер encoder-decoder. Аудио режется на куски по 30 секунд и превращается в log-Mel спектрограмму. Декодер получает специальные токены, которые говорят ему, что делать:

  • распознать речь на языке оригинала;
  • перевести её на английский;
  • определить язык;
  • понять, есть ли речь вообще (voice activity detection);
  • проставить временные метки или нет.

Вместо четырёх отдельных моделей получилась одна, которой задачу называют прямо в начале ответа.

Устойчивость

Ключевой результат статьи — zero-shot: модель хорошо работает на чужих бенчмарках без дообучения. Модели, натренированные под конкретный датасет, на других данных ошибаются заметно сильнее. По точности и устойчивости Whisper приближается к человеку.

Какую модель брать

МодельПараметрыVRAM
tiny39M~1 ГБ
small244M~2 ГБ
medium769M~5 ГБ
large1550M~10 ГБ
turbo809M~6 ГБ

На моих 8 ГБ влезает turbo, но с оговоркой: он не обучен переводу, для перевода нужен medium или large.

Мой комментарий

Главный урок Whisper применим далеко за пределами звука: разнообразие данных даёт устойчивость лучше, чем идеальная разметка узкого датасета. Для VoiceLM вывод такой: не стоит выкидывать «некрасивые» записи с разными микрофонами и акцентами. Отбраковывать нужно только те, где после разделения голоса остался мусор.