Пару месяцев назад мы публиковали статью про то, как получили 3.3% WER для русского ASR на CPU с GigaAM — главный тезис тогда был «специализация бьёт универсальность». Замеры в той статье шли на пяти TTS‑фрагментах из аудиокниг. Всё дало идеальные 3,3% WER. С тех пор мы перемерили обе модели на реальных продакшен‑записях и часть прошлых выводов здесь уточняем.
Кандидата у нас по‑прежнему два: SberDevices GigaAM v3-e2e‑rnnt и OpenAI Whisper large‑v3-turbo. Приложение оффлайновое — корпоративные пользователи диктуют текст, облачные сервисы вроде Yandex SpeechKit или Whisper API им запрещены политикой безопасности. По публичным метрикам GigaAM выглядит сильнее, и новые бенчмарки мы рассчитывали как подтверждение прошлого выбора.
Подтверждения не случилось. По дороге мы попали в три ловушки, которые ждут любого, кто меряет ASR на собственном корпусе. Каждая из них переворачивает итоговый вывод: по опубликованным замерам GigaAM выглядит сильнее Whisper на 5–7 pp, как только мы сами померили на тех же данных — обе модели идут вровень, а на шумных записях Whisper выходит вперёд. Качество материала и эталонов в итоге решает больше, чем выбор самой модели.
Финальный выбор у нас такой:
GPU‑сборки: наша дообученная Whisper‑large‑v3-turbo, 9.43% AGG WER на 6 публичных RU‑тестах (21 тыс. слов) против 13.25% у базовой turbo и 10.79% AGG у лучшего публичного RU‑дообучения
bond005/podlodka-turbo. Модель опубликована на huggingface:coriollon/whisper-large-v3-turbo-russian.CPU‑сборки: GigaAM v3-e2e‑rnnt. Больше чем в 20 раз быстрее Whisper turbo CPU при сопоставимом качестве на коротких репликах. Whisper turbo на CPU не успевает за реальным временем аудио — для онлайн‑диктовки не годится.
Дальше — путь от первых замеров до этого выбора.
Корпуса, на которых мы мерили
Podlodka — лёгкая часть. 20 тестовых клипов из подкаста (тестовая подборка bond005/podlodka_speech, 1140 эталонных слов), чистая студийная речь, два диктора по очереди. Мы использовали эту подборку как базовый замер на «студийном» сегменте.
YouTube — тяжёлая часть. 34-минутный ролик Креосан про зону отчуждения Фукусимы, два ведущих ходят по заброшенному поселку, фоном громкоговорители, лает собака, гудит ветер. Мы через ffmpeg нарезали 8 двухминутных фрагментов, эталоны взяли из автоматических субтитров YouTube — это решение нам потом ещё аукнется.
Qantas — контрольный чистый. Подкаст про аварию рейса Qantas 32, 3 клипа по 3 минуты, эталоны тоже из субтитров YouTube — использовался для проверки методологии.
Методика измерения WER
Методика: Метрика — jiwer.process_words после BasicTextNormalizer. Замеры на RTX 4090 Laptop, faster‑whisper 1.2.x на CTranslate2, GigaAM через onnx-asr на CUDAExecutionProvider. Везде beam_size=5, temperature=0, condition_on_previous_text=True (default faster‑whisper).
Podlodka: где обе модели работают одинаково
Базовый Whisper large‑v3-turbo на 20 тестовых клипах без настройки:
=== AGG WER: 0.0728 (1140 ref words) === ops: sub=44 del=24 ins=15
7.28%. На студийном звуке мы рассчитывали на 7% WER, и базовая модель сразу в эту цифру уложилась.
Дальше нас интересовали два вопроса. Первый — можно ли выжать «бесплатный» прирост качества через декодерные настройки faster‑whisper. Второй — во сколько pp обходится наш собственный потоковый режим, когда аудио режется на чанки по VAD‑границам и каждый чанк отдаётся в whisper отдельным вызовом.
Для первого мы взяли четыре опции faster‑whisper, каждая из которых где‑то рекомендована: перебор температур (temperature_fallback) для тяжёлого аудио, condition_on_previous_text для длинных сессий с одним диктором, расширение beam с 5 до 10 на случай, если декодеру не хватает удачных гипотез. Плюс контрольный прогон с отключённым no_repeat_ngram_size, чтобы проверить, не отрезает ли этот фильтр что‑то полезное. Для второго прогнали ту же нарезку, что у нас крутится в проде: Silero VAD с max_speech_duration_s=4.
Конфигурация |
Что меняли |
AGG WER |
|---|---|---|
A vanilla |
|
7.28% |
B + перебор температур |
|
7.28% |
C + condition_on_previous_text |
подаём предыдущий сегмент как |
7.28% |
G beam=10 |
расширили поиск с 5 до 10 |
7.46% |
F VAD‑chunked 4s |
Silero VAD с |
13.68% |
Четыре «декодерных» варианта (A, B, C, G) дали 7.28–7.46% — фактически одно и то же. Перебор температур срабатывает только при низком avg_logprob, а на чистых студийных клипах декодер уверенный — повтор ни разу не запустился, так что эту опцию на нашем корпусе мы фактически не проверили. То же с C: condition_on_previous_text подаёт текст предыдущего сегмента в следующий, но клипы короче 30 секунд транскрибируются одним сегментом, и «предыдущего» просто нет. Реально проверен только G — расширение beam с 5 до 10 удваивает время и даже чуть ухудшает результат, потому что верхние гипотезы у уверенного декодера и так совпадают. F (потоковая нарезка) — минус 6 pp относительно базовой модели. Это был первый сигнал, что чанкование длинного аудио дорого, и мы проверили его отдельно на длинных клипах.
Для длинных клипов вопрос был такой: при пакетной обработке файла длительностью несколько минут что лучше — отдать модели весь файл и пусть она сама едет по нему своим внутренним 30-секундным окном (полное аудио), или нарезать через VAD на естественные «реплики между паузами» и кормить по одной? Второй вариант кажется логичным, потому что VAD‑чанки совпадают с речевыми единицами и позволяют распараллелить инференс. Параметр pad_ms — это минимальная длительность тишины, по которой VAD считает реплики разными чанками.
Конфигурация |
Как кормили модель |
AGG WER |
|---|---|---|
Full‑audio |
|
8.07% |
Chunked pad=300ms |
Silero VAD режет на чанки по паузам ≥300ms, каждый отдельным вызовом |
13.86% |
Chunked pad=500ms |
то же, пауза ≥500ms |
14.47% |
Тот же звук, тот же эталон, тот же нормализатор — разница 6 pp. Прежде чем интерпретировать, проверили, что это не артефакт методики. Первая мысль — чанки покрывают только речевые куски, паузы между ними в инференс не попадают, может, разница как раз из‑за этого. Сверили: VAD‑чанки плюс участки тишины между ними дают исходную длину файла с погрешностью <50 мс. Для проверки гипотезы от всех чанков склеивались в один текст и сравнивались с полным эталоном, как и в варианте с полным аудио. Так что 6 pp — реальная разница. Проверили и гипотезу — condition_on_previous_text. На полном аудио Whisper подаёт текст предыдущего окна в следующее, а на отдельных вызовах — нет. Вот что получилось: 5 длинных клипов того же подкаста (55–160 секунд, 1140 слов), включённый и выключенный флаг на одинаковом полном аудио — 7.98% против 8.07%, разница 0.09 pp в пределах статистического шума.
Виноваты сами разрывы. VAD‑чанкование физически рассекает речь на куски, и каждый вызов модель видит как изолированный фрагмент — без предыдущей и последующей аудио‑сцены, без естественной паузы по краям, без 30-секундного окна, в котором декодер привык работать. На стыках это даёт галлюцинации и потерю слов. В прошлой статье на Vosk и GigaAM мы наблюдали тот же паттерн и к разрывам естественной речи они так же чувствительны.
Практический вывод: в пакетной обработке длинного аудио нарезка на чанки не имеет смысла, в потоковом режиме платится −6 pp за то, что фраза ещё не завершена.
Прогнали те же 20 клипов через GigaAM v3-e2e‑rnnt:
=== AGG WER: 0.0789 (1140 ref words) === ops: sub=52 del=18 ins=20 wall=36.3s
7.89% против 7.28% у Whisper — статистически паритет.
На полном публичном датасете bond005/podlodka_speech (5889 слов) обе модели идут вровень: Whisper‑turbo даёт 7.06% WER, GigaAM v3-e2e‑rnnt — 6.98%, разница 0.08 pp — заметно ниже статистического шума. На четырёх эпизодах тестовой подборки Whisper чуть впереди (7.28% vs 7.89%), на полном датасете с дополнительными темами (бег, шахматы, антипаттерны разработки, производство лекарств) перевес перетекает к GigaAM на те же доли процента. В сухом остатке: выбор модели на студийной русской речи решает 0.5 pp, выбор набора данных — столько же.
Запомните это место: каждый раз, когда видите внушительный разрыв между моделями, проверьте, на одних ли клипах мерили и одинаковая ли методика замера.
YouTube: где начинается интересное
Тот же подход, 8 двухминутных фрагментов, 5 конфигураций:
Конфигурация |
AGG WER |
Время |
|---|---|---|
whisper‑turbo float16 beam=5 vad=off |
26.9% |
23s |
gigaam‑v3-e2e‑rnnt + Silero VAD chunks |
28.3% |
43s |
whisper‑turbo int8_float16 beam=5 vad=on |
29.3% |
24s |
whisper‑turbo float16 beam=5 vad=on |
30.6% |
30s |
whisper‑large‑v3 float16 beam=5 vad=on |
32.9% |
91s |
Whisper‑turbo с отключённым внутренним VAD оказался лучшим и по качеству, и по скорости — 26.9% AGG WER за 23 секунды на 17 минут аудио. GigaAM с Silero‑чанками отстал на 1.4 pp и почти не выиграл по скорости (43 с против 23 с) — на современном железе ONNX‑инференс уже не даёт того преимущества, которое GigaAM имела пару лет назад. Внутренний VAD Whisper ожидаемо хуже внешнего: с vad_filter=True платится 3–4 pp WER. Large‑v3 без turbo — дольше всех и хуже по качеству, что подтверждает прошлогодний тезис «turbo доминирует на русском».
На такой выборке нет очевидного победителя между Whisper‑turbo и GigaAM — разница 1–2 pp может быть и реальной, и шумом. Хочется разобрать, что именно эти 1–2 pp значат — и здесь начинается интересное.
Ловушка № 1: «улучшить» звук на входе
Запись шумная — естественная реакция применить шумоподавление и автоматическую регулировку усиления (AGC). Набор, который мы прогнали:
AGC -20 dBFS — нормализация уровня к -20 dBFS RMS. По умолчанию делается во всех голосовых стэках (WebRTC, Zoom).
HPF 80Hz + pre‑emphasis — фильтр верхних частот с порогом 80 Гц плюс предыскажение, поднимающее высокочастотные компоненты речи. Классический набор для ASR из эпохи MFCC‑фич.
noisereduce — популярная Python‑библиотека для шумоподавления через спектральные маски. Два режима — стационарный и нестационарный — плюс параметр агрессивности подавления.
AGC windowed adaptive — оконная AGC, перенастраивает усиление по коротким окнам аудио.
Compressor 4:1 — базовый инструмент звукорежиссёра.
VAD‑cut — вырезание фрагментов тишины до обработки моделью. Часто советуют как «оптимизацию».
Прогнали все на трёх клипах:
Метод |
AGG WER |
дельта к сырому |
|---|---|---|
сырое аудио (Whisper‑large‑v3-turbo float16, beam=5, vad_filter=False, condition_on_previous_text=True) |
26.11% |
- |
DSP (HPF 80Hz + pre‑emphasis) |
24.84% |
−1.3 |
Compressor 4:1 |
25.48% |
−0.6 |
noisereduce stationary |
25.79% |
−0.3 |
noisereduce non‑stationary |
25.90% |
−0.2 |
noisereduce light (prop_decrease=0.4) |
26.96% |
+0.9 |
AGC simple −20 dBFS |
32.24% |
+6.1 |
AGC windowed adaptive |
33.40% |
+7.3 |
VAD‑cut (вырезать тишину) |
34.04% |
+7.9 |
VAD‑cut + AGC |
34.88% |
+8.8 |

Девять методов поделились на две группы. Четыре варианта — DSP, оба noisereduce и Compressor — дали wash в пределах 1 pp от сырого аудио: ни заметной пользы, ни заметного вреда. Зато AGC в обоих вариантах и VAD‑cut просели на 6–9 pp. Самый поучительный случай — VAD‑cut. Кажется, что убрать тишину между фразами и дать модели плотный сигнал — сплошные плюсы. В результате минус 8 pp, на худшем клипе скакнуло с 40% до 47%. Пословное выравнивание объясняет почему:
REF: "велосипед притом дорогой" [пауза] "да это какой-то мотель сто процентов" HYP без VAD-cut: "Велосипед, притом, дорогой. Да, это какой-то мотель, 100%." HYP с VAD-cut: "велосипед притом дорогойда это какой-то мотель сто"
Без паузы декодер потерял границу предложения, склеил две фразы и на стыке съел слово «процентов». В обучающих данных Whisper тишина стоит между предложениями, модель опирается на неё как на структурный признак. AGC обоих видов фабрикует похожий артефакт по‑другому: усиливая тихие участки до уровня речи, она превращает фоновый шум в видимую декодеру речь, и тот допридумывает к ней слова.
С настройками можно поиграть — подобрать другую частоту среза HPF, выставить attack/release у компрессора, понизить степень сжатия. Мы пробовали, разница оставалась в пределах 0.5 pp от сырого.
Почему это происходит. Фоновые шумы и помехи уже присутствуют в обучающих данных обеих моделей. AGC и VAD‑cut сильнее всего сдвигают вход относительно того распределения, на котором модель тренировалась — отсюда их катастрофические +6 до +9 pp WER. Аккуратные методы — DSP‑фильтрации, лёгкий noisereduce, мягкий компрессор — сдвигают спектр меньше и выходят в wash.
Что делать. Не добавляйте предобработку по умолчанию. Каждый шаг сначала меряется на ваших данных, и если выигрыша нет — он в конвейер не попадает. Если очень хочется шумоподавления, прогоните сырое и обработанное аудио на 3–5 клипах и сравните WER. Самые опасные «улучшения» — AGC и VAD‑cut, на нашем корпусе они стоят почти 10 pp WER.
Ловушка № 2: один битый клип сдвигает итоговый WER на 5 pp
Один из восьми YouTube‑клипов, 08_hotel, стабильно давал 39–44% WER на всех конфигурациях. Открыли клип, открыли эталон, послушали — и оказалось, что первые 15 секунд субтитров лишние. Когда нарезали 08_hotel.wav через ffmpeg из полного видео, таймкод стартовой границы оказался позже, чем мы думали, когда писали эталон по субтитрам YouTube. Аудио и текст разошлись на ~15 секунд.
После правки картина по YouTube заметно изменилась:
Замер |
Whisper turbo |
GigaAM |
дельта |
|---|---|---|---|
Исходный AGG по 3 клипам (с битым эталоном) |
30.50% |
37.08% |
6.6 pp |
AGG по 2 валидным клипам (718 слов) |
25.91% |
32.45% |
6.5 pp |
|
32.75% |
51.97% |
19.2 pp |
На этой выборке из 3 шумных клипов Whisper стабильно впереди GigaAM на 6–7 pp. Разрыв в качестве на 08_hotel после исправления вырастает с 6.7 pp до 19.2 pp. Один реверберированный клип скрывает реальную разницу между моделями в три раза, и если бы мы доверились исходному AGG из первой YouTube‑таблицы, мы бы записали «обе модели хороши» — и пропустили бы тот факт, что на сильной реверберации одна из них падает почти вдвое сильнее другой.
19 pp в пользу Whisper на самом тяжёлом клипе вероятнее всего объясняется обучающими данными. Состав корпусов моделей такой: Whisper тренировался на ~680K часов слабо контролируемых пар из веба, очень разнокачественных по акустике и языкам. GigaAM v3 — на ~700K часов неразмеченной русской речи в self‑supervised pretraining (HuBERT‑CTC) плюс ~4K часов размеченной для fine‑tuning. По типам материала v3 шире прошлых версий — туда подмешаны записи колл‑центров, музыки, голосовых сообщений, нестандартной речи — но всё в пределах русского распределения. Поэтому на чистом чтении GigaAM и сильнее. С сильной реверберацией и перекрывающимися голосами Whisper справляется заметно лучше — такие записи присутствовали в его обучающих данных, а в данных GigaAM почти нет.
Почему это происходит. Ручная нарезка аудио по тайм‑кодам и ручная транскрибация — два независимых процесса, между ними легко возникает рассинхрон в секунды.
Что делать. Прежде чем верить результату измерения WER на собственном корпусе, проверьте худший клип пословно. Если первые или последние слова эталона не появляются в гипотезе ни одной модели — у вас сдвиг, а не «плохая модель».
Ловушка № 3: на хорошем клипе треть «ошибок модели» — это ошибки аннотирования
07_capsule был нашим лучшим YouTube‑клипом, 12.1% WER. Пословный разбор выравнивания показал такую картину:
WER=0.121 sub=18 del=19 ins=6
Из 18 замен: 4 настоящих ошибки модели, около 8 наших ошибок при написании эталона, ещё 2 — раздельное написание сложных слов (нетронутый vs не тронутый) и около 4 — модальные формы. Примеры:
REF: "еле про лестницу паутины" ← мы написали то, что нам послышалось HYP: "еле пролез из-за паутины" ← в аудио сказано это REF: "оцелограф" ← мы записали с ошибкой HYP: "оцеллограф" ← модель тоже промахнулась, правильно «осциллограф» REF: "ричард ⊘ дреспини" ← мы тут что-то выдумали HYP: "ричард де креслини" ← модель ближе к правде
Когда вычитали эталон на контрольном чистом Qantas‑клипе (09_qantas_intro, 294 слова):
Сырой WER: 9.18% + нормализация чисел (пять → 5): 8.50% + исправление ошибок эталона: ~3% (после ручной вычитки)
Реальных ASR‑ошибок около трёх на 294 слова, настоящий WER порядка 1%. Остальные «ошибки модели» — опечатки транскрибации.
Почему это происходит. Эталон на YouTube‑клипах мы скопировали из автоматических субтитров и не вычитали. Пословный разбор даже лучшего клипа находит скрытых артефактов на те же 5pp.
Что делать. Проверять эталон перед тем, как делать выводы о моделях. Минимум — пословно сверить выравнивание лучшего клипа: 10 минут работы и страховка от ошибок и не верных выводов. Если корпус собирается надолго — брать публичные тестовые подборки или один раз внимательно прописать эталон вручную, без копирования без автоматических субтитров.
Что в итоге работает
После всех доработок и исследований рабочая прибавка к качеству собралась из мелочей в постобработке:
Доработка |
Эффект |
|---|---|
Нормализация чисел (пять → 5) |
−0.7 pp |
Тематический |
−0.5 pp |
|
−4 pp |
beam=5 + перебор температур |
−0.4 pp |
Подмена IT‑терминов (питон → Python) |
качество, не WER |
Сильнее всех помогло отключение внутреннего VAD Whisper и установка Silero VAD на уровне потокового конвейера. Внутренний фильтр режет короткие реплики жадно, внешний работает мягче. Минус 4 pp. Если включить весь стек одновременно, на тех же двух валидных YouTube‑клипах выходит 19.6% WER против 29.5% у дефолтной модели — минус 10 pp.
Что ушло из конвейера по сравнению с прошлой статьёй: Smart T5 — то самое пословное исправление через ruT5-ASR-large с фильтрацией по SequenceMatcher, на которое мы потратили пару итераций. На базовом Whisper base она удерживала результат от провала до 41% WER. На GigaAM v3 и нашей дообученной модели Whisper её эффект отрицательный — T5 «исправляет» правильный текст, заменяя слова на семантически близкие. Заменили на детерминированный шаг: нормализация чисел плюс подмена IT‑терминов через словарь и pymorphy3. Эффект те же 1–2 pp, задержка 0.02 мс вместо 80 мс, поведение предсказуемое.
Качество разобрали. Теперь — скорость. RTF (real‑time factor) — доля реального времени, которую тратит распознавание: RTF 0.1 значит, что минута аудио распознаётся за 6 секунд. Чем меньше, тем быстрее.
Бэкенд |
Квантизация |
RTF GPU |
RTF CPU |
RAM процесса |
Размер модели |
|---|---|---|---|---|---|
Whisper turbo (прод GPU) |
int8_float16 |
0.040 |
1.02 |
1.0 GB |
1.5 GB |
GigaAM v3-e2e‑rnnt (прод CPU) |
ONNX float |
0.033 |
0.047 |
1.6 GB |
851 MB |
Whisper turbo |
float16 |
0.043 |
- |
1.5 GB |
1.5 GB |
Whisper large‑v3 |
float16 |
0.112 |
- |
1.5 GB |
2.9 GB |
Первые две строки — наши продакшен‑конфигурации, две нижние для контекста. На CPU GigaAM быстрее Whisper turbo больше чем в 20 раз (0.047 против 1.02). На практике это значит, что Whisper turbo на CPU тратит на минуту аудио чуть больше минуты — распознавание не успевает за реальным временем, для онлайн‑диктовки модель не годится. GigaAM на ту же минуту тратит меньше трёх секунд — отклик мгновенный. На GPU обе модели идут плотно: Whisper turbo int8_float16 0.040, GigaAM ONNX 0.033 — разница в пределах одного измерения. Отсюда распределение ролей: CPU‑сборка — GigaAM (там это единственный реалистичный вариант), GPU‑сборка — Whisper.
И вот тут пригодилась до обученная модель. Подход к обучению — материал отдельный, здесь только итоговые числа. Замеры наши: по 500 семплов на публичных тестовых наборах каждого датасета, та же BasicTextNormalizer, beam=5.
Модель |
AGG WER на 6 RU тестах (21 тыс. слов) |
дельта к базовой |
дельта к GigaAM |
|---|---|---|---|
Наша дообученная (прод) |
9.43% |
−3.82 pp |
−0.95 pp |
GigaAM v3-e2e‑rnnt |
10.38% |
−2.87 pp |
— |
bond005/podlodka‑turbo |
10.79% |
−2.46 pp |
+0.41 pp |
openai/whisper‑large‑v3-turbo (базовая) |
13.25% |
- |
+2.87 pp |

По датасетам, с GigaAM в крайней колонке — наш замер на тех же 500 семплах:
Датасет |
базовый turbo |
наша модель |
дельта |
GigaAM v3-e2e‑rnnt |
|---|---|---|---|---|
Common Voice 21 RU |
6.00% |
5.33% |
−0.67 |
4.32% |
RuLibriSpeech |
9.55% |
8.50% |
−1.05 |
10.02% |
Golos farfield |
18.80% |
11.05% |
−7.75 |
8.17% |
Golos crowd |
25.36% |
10.15% |
−15.21 |
19.42% |
SOVA RuDevices |
17.06% |
13.61% |
−3.45 |
12.94% |
Podlodka Speech |
12.08% |
11.11% |
−0.97 |
10.32% |
Усредненный результат |
13.25% |
9.43% |
−3.82 |
10.38% |

Картина по моделям получилась пёстрая. Базовый Whisper‑turbo на Golos сильно проседает (18.8% farfield / 25.4% crowd) — проблема не столько в речи, сколько в том, что эти датасеты содержат много цифр, а BasicTextNormalizer трактует их строго. Наша дообученная модель эту специфику нормализации усваивает: на Golos crowd она выигрывает у vanilla 15 pp, а у GigaAM — 9 pp. На чистом чтении (CV, Podlodka) GigaAM, наоборот, на 1 pp впереди нашей — она и училась преимущественно на студийной русской речи.
Чек‑лист: что делать, если выбираете русский ASR
Сначала чистите эталон, потом сравнивайте модели. Пословно сверьте выравнивание худшего и лучшего клипа — один битый эталон и результат хуже на ~5 pp на нашей подборке, а на лучшем клипе большая часть «ошибок модели» часто оказывается опечатками транскрибации.
Не добавляйте шумоподавление и AGC по умолчанию. На нашем шумном корпусе AGC и VAD‑cut ухудшают WER на 6–9 pp. На любом корпусе сначала меряйте улучшения на 3–5 клипах, прежде чем добавлять в прод.
Не режьте длинное аудио на чанки для пакетной обработки. Сами разрывы аудио на стыках стоят ~6 pp; полное окно всегда лучше.
Отключите внутренний VAD Whisper, используйте внешний Silero. Это самый дешёвый прирост в нашем конвейере:
vad_filter=Falseплюс Silero VAD на уровне стриминга.Постобработка дешёвая и работает. Нормализация чисел (
пять→5) даёт −0.7 pp, словарная подмена IT‑терминов чинит распознавание Python/Docker/Git. T5-коррекция при этом на сильных моделях не нужна — она «исправляет» правильный текст.Состав корпуса и качество эталона решают больше, чем выбор модели. На наших клипах разница между моделями держится в плюс‑минус 1 pp; разница между корпусами (студия vs YouTube с реверберацией) — 15–20 pp; разница между сырыми и вычитанными эталонами — 7 pp. До того как тратить недели на эксперименты с архитектурами и до обучениями, потратьте день на чистку эталонов и проверку, что ваш test набор данных действительно репрезентативен.
Само приложение и модели открытые. Страница проекта — borisovai.ru/ru/projects/scribe‑air, исходники и скрипты бенчмарков лежат в gitlab.dev.borisovai.ru/tools/speech‑to‑text.
Комментарии (4)

singib
02.06.2026 16:01На любом корпусе сначала меряйте улучшения на 3–5 клипах, прежде чем добавлять в прод
Вот этот момент не очень понятен. Если запланировано распознавание на лету разных конференций, то качество будет разным в зависимости от гарнитуры, локаций собеседников и еще много каких факторов. Это жене предзаписанные тексты, которые можно сложить в папку и играться с ними. Так что не понятно что заранее измерять...

borisovai-ru Автор
02.06.2026 16:01Пункт чек-листа универсальный: любое «улучшение» конвейера проверяется на данных перед включением в прод.
Нет своего корпуса - берёте открытый, ближайший к задаче. Для конференций подходят SOVA RuDevices, Golos crowd. На их клипах сравниваете модель с предобработкой и без - направление видно уже на первых тестовых клипах.
Появится прод-материал - собирайте свой корпус. С разными микрофонами, локациями, любыми другими факторами - только на таком корпусе становится видно, какие фичи реально работают, а какие лишние. Сторонний бенчмарк отвечает на вопрос «какая модель/обработка сильнее в среднем», свой корпус — «какая работает у меня».
bebu-rebu
Круто! А как вы добились такой точности распознавания?
borisovai-ru Автор
Если в одну фразу - не мешать моделям работать.
Не «улучшайте» аудио до распознавания.
Не режьте длинное аудио на чанки.
Отключите внутренний VAD Whisper.
Сверху - дообучение под домен. У нас это
coriollon/whisper-large-v3-turbo-russian, еще минус 3.82 pp к усреднённому WER.