Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Русский STT: сравнение движков по доменам

Открытый замер распознавания русской речи. Семь движков, три домена, одна нормализация на всех, доверительные интервалы, построчные транскрипты в репозитории.

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

English summary: an open, per-domain WER benchmark of Russian ASR — self-hosted Whisper large-v3-turbo, Deepgram Nova-2/Nova-3, GigaAM v3, NVIDIA Parakeet TDT. Rankings invert across domains: the winner on clean read speech ranks second-to-last on audiobooks and spontaneous speech. Per-sample transcripts published so anyone can recompute.

Результаты по доменам

WER, ниже — лучше. В скобках 95 % доверительный интервал (бутстрап по высказываниям, 20 000 реплик). Общего среднего по доменам нет намеренно — оно бы спрятало ровно то, ради чего этот замер делался.

движок как вызывали студийная начитка
n=775
аудиокниги
n=296
спонтанная речь
n=20
GigaAM v3 🤝 private.rpa.icu → 🟢 gigaam-v3 4.50 % [4.02; 5.01] 6.57 % 🥇 [5.75; 7.42] 6.95 % 🥇 [4.58; 9.63]
Deepgram nova-3 🌍 api.deepgram.com 6.55 % [5.84; 7.30] 8.88 % [7.88; 9.92] 7.12 % [4.77; 9.83]
WhisperX-пайплайн 🟢 speechcore.neuraldeep.ru 4.45 % [3.96; 4.97] 9.85 % [8.74; 10.97] 7.73 % [5.57; 10.17]
Whisper large-v3-turbo 🟢 хаб, whisper-1 4.44 % [3.95; 4.95] 9.89 % [8.80; 11.02] 7.73 % [5.57; 10.17]
Deepgram nova-2 🌍 api.deepgram.com 3.97 % 🥇 [3.54; 4.42] 10.22 % [8.96; 11.58] 9.27 % [6.70; 12.08]
Whisper-turbo, RU файн-тюн 🟢 хаб, whisper-podlodka-turbo 🤝 8.80 % [8.15; 9.46] 10.78 % [9.38; 12.31] 10.21 % [7.84; 12.70]
NVIDIA Parakeet TDT 0.6b v3 🖥️ локально на RTX 4090 5.56 % [5.08; 6.07] 10.84 % [9.75; 12.00] 9.27 % [7.16; 11.72]

🟢 доступно на нашем шлюзе api.neuraldeep.ru · 🤝 модель крутится у партнёра в РФ · 🌍 внешний коммерческий API · 🖥️ подняли у себя ради замера, в проде не держим

GigaAM v3 — модель SberDevices под лицензией MIT; мы её не переобучали. В замере она вызывалась напрямую у партнёрского апстрима, а с 7 августа 2026 доступна на нашем шлюзе как gigaam-v3 — тот же вес, добавлен только наш слой авторизации и учёта.

Домены: FLEURS-ru — чтение новостных фраз в студии · RuLibriSpeech — аудиокниги · Podlodka Speech — лекции и интервью подкаста, спонтанная речь.

Ранжирование переворачивается

студийная начитка : nova-2 3.97 › whisper 4.44 › speechcore 4.45 › gigaam 4.50 › parakeet 5.56 › nova-3 6.55
аудиокниги        : gigaam 6.57 › nova-3 8.88 › speechcore 9.85 › whisper 9.89 › nova-2 10.22 › parakeet 10.84
спонтанная речь   : gigaam 6.95 › nova-3 7.12 › speechcore 7.73 › whisper 7.73 › nova-2 9.27 › parakeet 9.27

Nova-2 с первого места падает на предпоследнее. На аудиокнигах это не случайность выборки: интервалы gigaam [5.75; 7.42] и nova-2 [8.96; 11.58] не пересекаются, разрыв в полтора раза при n=296.

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

Реальный материал стоит вдвое дороже лабораторного. На студийной начитке движки дают 4–6 %, на аудиокнигах и спонтанной речи — 6.5–10 %. Цифры однодоменных бенчмарков систематически оптимистичны.

Быстро — не значит точно: Parakeet

NVIDIA parakeet-tdt-0.6b-v3 — многоязычная модель на 25 европейских языков, русский среди них. Подняли у себя на одной RTX 4090 и прогнали тем же харнессом: 1 091 высказывание, ни одного отказа.

Она проигрывает во всех трёх доменах. На аудиокнигах — последнее место из семи: 10.84 % против 6.57 % у GigaAM, разрыв в 1.65 раза, и интервалы gigaam [5.76; 7.49] и parakeet [9.75; 12.00] не пересекаются при n=296.

Зато она очень быстрая. Медиана 0.088 с на 11 секунд аудио — ×126 реального времени на одной 4090, без батчинга, при 627 M параметров и 2.3 ГБ VRAM. Это единственный сценарий, где её стоит вспомнить: массовая пакетная расшифровка архива, где важна пропускная способность, а не последний процент WER.

⚠️ Не перепутайте с parakeet-ctc-1.1b из той же линейки: она одноязычная английская и на русском выдаёт мусор. Русский есть только в многоязычных tdt-0.6b-v3 и старше.

Английские вкрапления: у GigaAM пропадает преимущество

Отдельно посчитали WER на подмножестве высказываний, где в эталоне есть латиница — термины вроде observability, performance review.

движок FLEURS, латиница n=38 Podlodka, латиница n=5
Whisper large-v3-turbo / WhisperX 7.89 % 10.84 %
Deepgram nova-2 8.24 % 11.33 %
GigaAM v3 10.27 % 11.33 %
Parakeet TDT 10.63 % 12.07 %
Deepgram nova-3 11.47 % 10.59 %

На чистом русском GigaAM выигрывает с отрывом, а на репликах с английскими словами уступает Whisper — 10.27 % против 7.89 %. Объяснение напрашивается: она обучена под русский целенаправленно, Whisper многоязычен по устройству.

🔴 Это наблюдение, а не результат. Выборки крошечные (38 и 5 высказываний), доверительные интервалы мы не считали — на таких n они перекроют всё. Латиница сюда попала случайно, внутри русских корпусов. Отдельного бенчмарка на смешанную речь не существует ни для русского, ни для английского, хотя именно так звучит любая ИТ-планёрка. Это дыра, которую стоит закрыть отдельным набором.

Длинные записи

Отдельный вопрос: что происходит на непрерывной записи, а не на фразе в 11 секунд. Файлы собраны склейкой высказываний FLEURS — так меняется ровно одна вещь, длина, при тех же словах и эталоне.

движок 11 с 5 мин 15 мин 30 мин
Deepgram nova-2 3.97 % 4.23 % 3.85 % 3.57 %
WhisperX-пайплайн 4.45 % 4.68 % 5.77 % 4.99 %
GigaAM v3 4.50 % 4.90 % 4.74 % ошибка 499
Deepgram nova-3 6.55 % 6.90 % 7.01 % 6.97 %
whisper-1 через шлюз 4.44 % 4.68 % 13.74 % 12.98 %

Пайплайн с VAD оправдан именно здесь. На коротких клипах он не давал ничего (разница +0.01 п.п.), на длинных — держит 5–6 % там, где голая модель уходит в 13 %.

🔴 Оговорка про строку whisper-1. Её деградация — не свойство модели, а маршрутизация: на длинных файлах запрос через шлюз уходит в фолбэк на партнёрский лейн. Доказательство — отпечаток дефекта разрыва слов (см. ниже): в 15-минутном ответе whisper-1 их 30, у партнёрской модели 32, у WhisperX-пайплайна и Deepgram — 0. На коротких файлах у whisper-1 был один разрыв на 775 высказываний. То есть на длинном аудио через шлюз возвращается не та модель, которую запросили.

GigaAM на 30 минутах вернула HTTP 499 — предел есть, точная граница не найдена.

Дефект, который метрика принимает за качество

RU-файн-тюн Whisper-turbo вставляет пробел внутрь слова при декодировании:

телевизион ные · обнаруж ены · передав аться · выб орочно · прив ести

Речь распознана верно, слово разорвано — для WER это двойной штраф, замена плюс вставка. На FLEURS дефект встретился 286 раз в 247 из 775 высказываний (32 %), у остальных движков — 2–9 случаев на весь сплит.

Сколько WER приходится на этот дефект (oracle-оценка)

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

движок WER после oracle-починки разрывов высказываний задето
RU файн-тюн turbo 8.80 % 5.01 % 286 247/775
nova-2 3.97 % 3.86 % 9 9/775
Whisper turbo 4.44 % 4.32 % 9 9/775
WhisperX-пайплайн 4.45 % 4.33 % 9 9/775
GigaAM v3 4.50 % 4.42 % 6 6/775
nova-3 6.55 % 6.52 % 2 2/775

python harness/split_bug.py "results/fleurs/*.jsonl"

Форматирование, которое метрика принимает за ошибку

Nova-3 пишет числительные словами, эталон FLEURS — цифрами:

эталон : в 1990 году он был добавлен в список всемирного наследия
nova-3 : в тысяча девятьсот девяностом году он был добавлен …          [WER 15%]

Нормализация числительных опускает её WER на 1.60 п.п. (6.55 → 4.95), а разрыв с nova-2 сокращается с 2.58 до 1.13. Признак виден сразу: у nova-3 CER вдвое ниже WER, у остальных — втрое-вчетверо. Это известная ловушка мультиязычных замеров, ей посвящена работа «What is lost in Normalization?».

Как воспроизвести

pip install -r requirements.txt

# 1. собрать построчные транскрипты: движок × домен
K=<ключ>   python harness/run_bench.py --engine whisper-1 --domain fleurs        --limit 775
DG=<ключ>  python harness/run_bench.py --engine nova-2    --domain rulibrispeech --limit 300
RPA=<ключ> python harness/run_bench.py --engine gigaam-v3 --domain podlodka      --limit 20

# 2. добрать строки, где API вернул ошибку (иначе выборки движков разойдутся)
python harness/retry_failed.py "results/fleurs/*.jsonl"

# 3. метрики и интервалы внутри домена
python harness/analyze.py "results/fleurs/*.jsonl" --runs 50000

# 4. сводка по доменам
python harness/summarize.py --domains fleurs rulibrispeech podlodka

# 5. длинные записи
python harness/make_long.py --minutes 1 5 15 30
python harness/long_bench.py --engines whisper-1 nova-2 speechcore

# 6. диагностика разрывов слов
python harness/split_bug.py "results/fleurs/*.jsonl"

Сырые транскрипты — results/, по папке на домен. Метрики считаются из них, так что любой может пересчитать своей нормализацией, не обращаясь к API.

Методика

  • Аудио: те же исходные байты каждому движку, без пересжатия и ресемплинга. Транспорт различается (multipart против raw body) — одинаковы именно байты.
  • Нормализация (одинаково к эталону и гипотезе): нижний регистр, ё→е, снятие пунктуации, схлопывание пробелов. Смысл — штрафовать за неверно распознанное слово, а не за оформление; тот же принцип, что у нормализатора Whisper и Open ASR Leaderboard.
  • Колонка с числительнымиanalyze.py): числа прописью переводятся в цифры. Она дополняет базовую метрику: для русского разбор неполный — количественные берутся, порядковые нет.
  • Метрики: jiwer, корпусные WER и CER (сумма ошибок к сумме длин, а не среднее по высказываниям).
  • Интервалы: бутстрап по высказываниям (Bisani & Ney, ICASSP 2004), seed=0, перцентили с линейной интерполяцией — результат детерминирован. Для пар движков — разница на общих высказываниях (paired).
  • Ошибки вызова не выбрасываются, а перепрогоняются (retry_failed.py): иначе у движков остаются разные подмножества и сравнение перестаёт быть парным.
  • Дата прогонов: 6–7 августа 2026. Окружение и параметры вызовов — results/environment.json; эндпоинт, домен и время старта каждого прогона — в строке _meta соответствующего JSONL.

Что этот замер по-прежнему не показывает

  • нет телефонии. Главный пробел: у OpenSTT есть 203 часа телефонных звонков с ручной разметкой, но он раздаётся торрентами и в этот заход не попал. Телефонный домен самый тяжёлый — в литературе там WER доходит до 35 %;
  • нет дальнего поля и шума — нужен Golos farfield;
  • спонтанная речь на 20 высказываниях. Это весь тестовый сплит Podlodka. Интервалы там широкие и перекрываются: порядок движков — наблюдение, а не доказанный факт. Аудиокниги (n=296) и начитка (n=775) надёжнее;
  • длинные записи собраны склейкой, а не записаны непрерывно: нет смены темы, перебивок и естественных пауз;
  • задержка не мерялась в контролируемых условиях — движки гонялись параллельно на боевых лейнах, поэтому таблицы скорости здесь нет; сырые значения есть в JSONL.

Точки отсчёта из литературы

Контекст, не сравнение с таблицами выше: наборы и методики разные.

источник WER
Whisper v3 на Common Voice 17.0 ru 9.84 %
его RU файн-тюн там же 6.39 %
Deepgram Nova-3, общий batch (англоцентричный) 5.26 %
OpenSTT: телефон / YouTube / книги 34.8 / 19.1 / 18.1 %
ESB, Whisper, среднее по 9 наборам (английский) 10.6 %

Лицензия

MIT — см. LICENSE.

About

WER распознавания русской речи по трём доменам: Whisper large-v3-turbo, GigaAM v3, Deepgram Nova-2/Nova-3. Ранжирование движков переворачивается между доменами; сырые транскрипты опубликованы

Topics

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages