Тестовые фразы взяли из FLEURS: это предложения из Википедии, которые разные люди читают вслух. Имён и чисел там много, так что задачка не из лёгких. Всего 100 фраз, около 20 минут речи. Ещё сделали версию с шумом и пару пятиминутных «лекций», склеенных из этих же фраз.
Как модели слышат
Прежде чем смотреть на графики, послушай сам. Под каждой записью — что услышала каждая модель. Подсвечены слова, которые разошлись с оригиналом.
чистая запись · 7 с
«Первоначально он был госпитализирован в госпитале Джеймса Педжета в Грейт-Ярмуте.»
чистая запись · 12 с
«Он также атаковал все, что входило в воду; даже гигантский динозавр, такой как тиранозавр, не сравнился бы с ним.»
с шумом · 11 с
«Тигриный рык не похож на полнозвучный рык льва, а больше напоминает выкрикивание предложений из неразборчивых слов.»
с шумом · 5 с
«Важно различать глаголы и дополнения.»
Почти все ошибки у сильных моделей — в именах собственных и в записи чисел. «Педжет» или «Пэджет», «шопинг» или «шоппинг» — для поиска по расшифровке это неважно. А вот «альтаграфически молчал» вместо «также атаковал» — уже проблема.
Точность против скорости
По точности лидеры почти вровень. У whisper-turbo в любом рантайме 4.1–4.5% ошибок, у Qwen3-ASR 1.7B — 4.8%, у Parakeet — 5.4%. Разница между ними — пара десятков слов из двух тысяч. Решает скорость и то, на чём модель работает.
Рантайм важнее модели
Это главный урок фазы. Одна и та же модель whisper-large-v3-turbo с одинаковой точностью работает в 3.3 раза быстрее через OpenVINO, чем через whisper.cpp, на том же самом iGPU. На CPU разница тоже двукратная.
А если шумно?
Шум ухудшает всех в 2–2.5 раза, но по-разному. Whisper держится лучше остальных: около 10% ошибок на фоне «кухни с телевизором». Маленький Qwen3-ASR 0.6B в шуме разваливается — 21%, а в примере выше у него «тигриный рыб» и «рыболов».
На пятиминутных записях у Parakeet проблема: 12.5% ошибок против ~6% у whisper и Qwen3-ASR 1.7B. Длинное аудио режется на куски, и на стыках модель теряется.
Кто есть кто
- whisper-large-v3-turbo в OVMS на iGPU — рабочая лошадка для записей. 4.3% ошибок, фраза за 2.5 с, пять минут за 35 с, 2.3 ГБ памяти. API совместим с OpenAI, так что подключается к чему угодно.
- Vosk ru 0.42 — маленький и шустрый: полсекунды на фразу на CPU, 0.6 ГБ. Числа он пишет словами («тысяча девятьсот шестьдесят»), поэтому формально у него 8.5% ошибок. Без чисел — 4.8%, почти как у лидеров. Для голосовых команд это даже плюс, и в голосовом ассистенте он в итоге и победил.
- Parakeet v3 — быстрый на CPU (1.4 с) и почти такой же точный. Но на коротких кусках иногда внезапно переходит на украинский: «місяці», «сильний вітра». Задать язык ему нельзя.
- Qwen3-ASR 1.7B — точный и хорошо держит длинные записи. Но медленнее whisper (3.9 с на фразу) и ест до 8.4 ГБ памяти.
- whisper.cpp — та же модель, но в 3.3 раза медленнее OVMS, а на CPU даже не успевает за реальным временем.
Whisper всегда слушает 30 секунд
Whisper кодирует аудио окнами по 30 секунд, даже если фраза длится две. Поэтому короткая команда стоит ему те же ~2.5 секунды, что и длинная фраза. Vosk и Parakeet работают пропорционально длине, и на командах отрываются ещё сильнее.
Не взлетело
- Borealis от Вихря: 10% ошибок, 20 секунд на фразу и 7 ГБ памяти. Работает только в PyTorch, а на этом CPU это медленно. На длинных фразах иногда сочиняет продолжение — например, «и волоса, которые могут предположить о своих достижениях…».
- Canary 1B — хуже Parakeet и втрое медленнее.
- whisper-small — 11.6% ошибок, «Грейт-Ярмут» у него превращается в «Great Armour».
- Voxtral Realtime — потоковая модель, но в llama.cpp для неё пока нет серверной части, так что запустить её не удалось.
Чего мы не проверили
Запросы шли по одному. Как модели поведут себя, когда тот же iGPU занят индексацией Immich или LLM, — отдельный вопрос. В голосовом ассистенте мы проверили только связку STT + LLM: они друг другу не мешают.