Whisper или GigaAM для русского ASR в продакшене: три ловушки бенчмарка, которые перевернут ваши выводы

от автора

Пару месяцев назад мы публиковали статью про то, как получили 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

beam_size=5, всё остальное по умолчанию

7.28%

B + перебор температур

temperature=[0.0, 0.2 … 1.0] — повтор с другой температурой при низком logprob

7.28%

C + condition_on_previous_text

подаём предыдущий сегмент как initial_prompt следующему

7.28%

G beam=10

расширили поиск с 5 до 10

7.46%

F VAD-chunked 4s

Silero VAD с max_speech_duration_s=4, каждый чанк отдельно

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

model.transcribe(audio) целиком, Whisper сам едет 30-секундным окном

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

Шумоподавление по семействам: только AGC и VAD-cut — катастрофа

Шумоподавление по семействам: только AGC и VAD-cut — катастрофа

Девять методов поделились на две группы. Четыре варианта — 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

08_hotel с исправленным эталоном (229 слов)

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

Тематический initial_prompt

−0.5 pp

vad_filter=False + внешний Silero VAD

−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

Дообучение Whisper-turbo под русский язык: −3.82 pp к vanilla, −0.95 pp к GigaAM

Дообучение Whisper-turbo под русский язык: −3.82 pp к vanilla, −0.95 pp к GigaAM

По датасетам, с 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 и GigaAM на 8 корпусах: на студийном чтении паритет, на полевых записях расходятся

Whisper и GigaAM на 8 корпусах: на студийном чтении паритет, на полевых записях расходятся

Картина по моделям получилась пёстрая. Базовый Whisper-turbo на Golos сильно проседает (18.8% farfield / 25.4% crowd) — проблема не столько в речи, сколько в том, что эти датасеты содержат много цифр, а BasicTextNormalizer трактует их строго. Наша дообученная модель эту специфику нормализации усваивает: на Golos crowd она выигрывает у vanilla 15 pp, а у GigaAM — 9 pp. На чистом чтении (CV, Podlodka) GigaAM, наоборот, на 1 pp впереди нашей — она и училась преимущественно на студийной русской речи.

Чек-лист: что делать, если выбираете русский ASR

  1. Сначала чистите эталон, потом сравнивайте модели. Пословно сверьте выравнивание худшего и лучшего клипа — один битый эталон и результат хуже на ~5 pp на нашей подборке, а на лучшем клипе большая часть «ошибок модели» часто оказывается опечатками транскрибации.

  2. Не добавляйте шумоподавление и AGC по умолчанию. На нашем шумном корпусе AGC и VAD-cut ухудшают WER на 6-9 pp. На любом корпусе сначала меряйте улучшения на 3-5 клипах, прежде чем добавлять в прод.

  3. Не режьте длинное аудио на чанки для пакетной обработки. Сами разрывы аудио на стыках стоят ~6 pp; полное окно всегда лучше.

  4. Отключите внутренний VAD Whisper, используйте внешний Silero. Это самый дешёвый прирост в нашем конвейере: vad_filter=False плюс Silero VAD на уровне стриминга.

  5. Постобработка дешёвая и работает. Нормализация чисел (пять5) даёт −0.7 pp, словарная подмена IT-терминов чинит распознавание Python/Docker/Git. T5-коррекция при этом на сильных моделях не нужна — она «исправляет» правильный текст.

  6. Состав корпуса и качество эталона решают больше, чем выбор модели. На наших клипах разница между моделями держится в плюс-минус 1 pp; разница между корпусами (студия vs YouTube с реверберацией) — 15-20 pp; разница между сырыми и вычитанными эталонами — 7 pp. До того как тратить недели на эксперименты с архитектурами и до обучениями, потратьте день на чистку эталонов и проверку, что ваш test набор данных действительно репрезентативен.

Само приложение и модели открытые. Страница проекта — borisovai.ru/ru/projects/scribe-air, исходники и скрипты бенчмарков лежат в gitlab.dev.borisovai.ru/tools/speech-to-text.

ссылка на оригинал статьи https://habr.com/ru/articles/1042574/