# Бенчмарк 2026-08-25 12:44

Записей: 2398, аудио: 3.106 ч.
Нормализатор один на эталон и все гипотезы (`bench/normalize.py`), счётчик — `jiwer`.

| Система | Срез | Записей | WER | CER | Числовой WER | Пунктуация F1 | RTF | Быстрее записи |
|---|---|---:|---:|---:|---:|---:|---:|---:|
| prod-shared:v3_e2e_ctc | golos_test/spontaneous | 399 | 8.76% | 3.78% |  |  | 0.1829 | ×5.47 |
| prod-shared:v3_e2e_ctc | ruls/clean_read | 400 | 6.71% | 1.50% |  | 0.7491 | 0.1193 | ×8.38 |
| prod-shared:v3_e2e_ctc | sova_rudevices/spontaneous | 400 | 12.81% | 4.89% |  |  | 0.1511 | ×6.62 |
| prod-shared:v3_e2e_rnnt | golos_test/spontaneous | 399 | 7.62% | 3.66% |  |  | 0.1984 | ×5.04 |
| prod-shared:v3_e2e_rnnt | ruls/clean_read | 400 | 6.91% | 1.73% |  | 0.7331 | 0.1798 | ×5.56 |
| prod-shared:v3_e2e_rnnt | sova_rudevices/spontaneous | 353 | 12.58% | 5.30% |  |  | 0.203 | ×4.93 |

## Оговорки

- WER и CER считаются на записях, где в эталоне НЕТ цифр; записи с цифрами в эталоне вынесены в числовой WER.
- Пунктуация меряется только на эталонах, где знаки есть; на Common Voice и Golos метрика не определена.
- RTF — отношение времени обработки к длительности записи на том же устройстве, что указано в поле device прогона.
- Пофайловые эталоны и гипотезы по наборам с ShareAlike (golos_test) не публикуются.

## Условия прогона

Замер сделан на БОЕВОЙ машине сервиса — по решению владельца, чтобы цифры относились к
тому железу, на котором сервис реально работает. Ядро для замера поднималось отдельным
контейнером на своём порту: боевое ядро при этом обслуживало клиентов и не участвовало в
прогоне (проверено — его загрузка процессора весь замер держалась около 1 %).

Железо: 12 ядер, 125 ГБ памяти. Модели — только CPU, видеокарты нет.

**Важная оговорка про RTF.** Машина ОБЩАЯ: на ней работает около 55 сторонних
контейнеров (ClickHouse, dagster, dbt, парсеры), и они забирают ядра независимо от нас.
Во время прогона загрузка машины колебалась от 6 до 26 при 12 ядрах, причём почти вся
она — не наша. Поэтому RTF здесь — это скорость в реальных условиях работающего сервера,
а не потолок железа. На свободной машине те же модели будут быстрее.

Второе про RTF: набор состоит из коротких записей (3,1 часа на 2398 файлов, то есть в
среднем меньше пяти секунд). Постоянные издержки на запуск распознавания не размазываются
по длительности, и RTF выходит хуже, чем на длинных записях. Отдельный замер на записи
25 минут дал RTF 0,078 — вдвое лучше табличного.

## Что нашлось по ходу замера

Первый прогон встал на 166-й записи: ядро зависло целиком, все потоки процесса включая
главный стояли в futex_wait, `/health` не отвечал. Причина — аренда копии модели
выполнялась в событийном цикле, и блокирующее ожидание свободной копии останавливало
весь процесс. Починено (v1.1.3), после починки прогон прошёл до конца без сбоев.

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