WER — метрика ошибок распознавания речи. По ссылке доступны определения WER, micro-WER, медианы WER и среднего WER.
Результат пересчёта
Одна и та же расшифровка может получить разный WER
Мы пересчитали сохранённые ответы 8 моделей в пакетном и потоковом режимах — всего 11 конфигураций — на одних и тех же 488 записях. Изменились только правила подготовки текста. Максимальный сдвиг — с 12,418% до 11,057%. Порядок конфигураций остался прежним.
Сравниваете распознавание речи? Отправьте коллегам таблицу о том, как правила подготовки текста меняют micro-WER одних и тех же расшифровок.
Для подсчёта WER проверенную человеком расшифровку — эталон — сравнивают с текстом, который вернула система распознавания. Но сначала оба текста нужно привести к одной форме. Иначе программа посчитает ошибкой даже разницу между 100 и сто.
Эта подготовка текста называется нормализацией. Она приводит буквы к одному регистру, убирает лишние пробелы и заранее определяет, какие варианты написания считать одинаковыми. WER — это отношение суммы замен, пропусков и вставок к числу слов в эталоне. При одинаковых данных и правилах оценки меньшее значение означает более близкую к эталону расшифровку.
Как мы проверили влияние нормализации
Мы взяли сохранённые ответы из основного сравнения распознавания русской речи. Во всех четырёх расчётах использовали одни и те же 488 записей, для которых были ответы всех 11 конфигураций восьми моделей.
Одни и те же тексты пересчитали четыре раза:
- Цифры остались цифрами. Первый вариант воспроизводит ошибочный расчёт: модуль преобразования отдельно записанных целых чисел не загрузился, поэтому
100не превратилось всто. - Исправили запись чисел. Программа преобразовывала отдельно записанные целые числа в русские слова. Одновременно применялись базовые правила: один регистр букв,
ё → е, обычные пробелы и NFKC. - Убрали служебные пометки из эталона. Фрагменты вроде
[pause]и[unclear]перестали считаться словами, которые должна распознать система. - Учли два варианта написания названий.
telegramприравняли ктелеграм, аdiscord— кдискорд.
Это последовательный пересчёт: каждый следующий результат включает предыдущие изменения. Вклад правил не измерялся независимо и может зависеть от порядка их применения.
Что такое NFKC? Это форма Unicode-нормализации, которая приводит некоторые технически разные записи символов к одной форме. Например, ① превращается в 1, широкая цифра 1 — тоже в 1, лигатура fi — в fi, а неразрывный пробел — в обычный. NFKC не переводит слова, не исправляет опечатки и не считает латинскую a русской а.
Первый вариант не является рекомендуемой методикой. Он показывает, насколько изменился результат из-за пропущенного преобразования чисел.
Как менялся WER после каждого шага
| Система / режим | Цифры не преобразованы | Цифры переведены в слова | Убраны служебные пометки | Учтены два написания названий | Изменение: «цифры в слова» → итог |
|---|---|---|---|---|---|
| GigaAM v3, пакет | 8,148% | 7,972% | 7,473% | 7,464% | −0,509 п.п. |
| OpenAI gpt-realtime-whisper | 9,454% | 9,393% | 8,521% | 8,521% | −0,871 п.п. |
| faster-whisper large-v3, локально | 10,889% | 10,666% | 9,779% | 9,779% | −0,887 п.п. |
| OpenAI whisper-1, пакет | 10,908% | 10,713% | 9,818% | 9,818% | −0,896 п.п. |
| Deepgram Nova-3, пакет | 11,201% | 10,770% | 9,899% | 9,899% | −0,871 п.п. |
| Sber SaluteSpeech, поток | 12,200% | 11,722% | 10,866% | 10,861% | −0,861 п.п. |
| Sber SaluteSpeech, пакет | 12,418% | 11,940% | 11,062% | 11,057% | −0,883 п.п. |
| Yandex SpeechKit v3, пакет | 13,147% | 12,659% | 11,798% | 11,798% | −0,861 п.п. |
| Deepgram Nova-3, поток | 13,218% | 12,759% | 11,870% | 11,870% | −0,888 п.п. |
| Yandex SpeechKit v3, поток | 14,359% | 13,876% | 13,042% | 13,042% | −0,833 п.п. |
| Nexara, пакет | 19,069% | 18,851% | 18,124% | 18,124% | −0,728 п.п. |
Сумма операций редактирования по всем 11 конфигурациям восьми моделей показывает масштаб изменений, но не используется как отдельная метрика рейтинга:
- 28 518 → 27 739: после преобразования чисел сумма снизилась на 779;
- 27 739 → 25 552: после удаления служебных пометок — ещё на 2 187;
- 25 552 → 25 548: после учёта двух написаний названий — на четыре.
При удалении пометок меняется не только число ошибок, но и количество слов в эталоне: их стало 20 901 вместо 21 123. Поэтому WER нужно пересчитать полностью, а не просто вычесть исправленные ошибки из старого значения.
Числа: 100 и сто должны совпадать
В эталонах числа были записаны словами. В ответах 11 конфигураций восьми моделей на 488 записях мы нашли 1 280 отдельно записанных целых чисел. Например, в эталоне было «я знаю слово „нет“ на ста языках», а в ответе системы — «я знаю слово нет на 100 языках». Смысл одинаковый, но без нормализации программа видит разные слова.
Отдельный программный модуль превращает 100 в сто, а 21 — в двадцать один. В одном из первых расчётов этот модуль не загрузился. Программа продолжила работу без предупреждения и оставила цифры цифрами.
После восстановления преобразования чисел суммарное число операций редактирования снизилось на 779. WER изменился по-разному: от −0,062 процентного пункта у OpenAI gpt-realtime-whisper до −0,488 у пакетного Yandex. Ответы моделей не изменились: WER снизился потому, что одни режимы чаще записывали числа цифрами, а другие — словами.
Если модуль нормализации не загрузился, расчёт должен завершаться сообщением об ошибке.
Служебные пометки: нужно заранее решить, считать ли их словами
В 67 эталонных расшифровках было 123 фрагмента в квадратных скобках: например, [unclear], [pause], [laugh] и [disfluency|э]. Это редакторские пометки о неразборчивой речи, паузе, смехе или междометии. Они добавляли к эталону 222 слова и служебных элемента.
Мы удалили такие фрагменты только из эталона. Ответы систем не меняли. После этого micro-WER снизился у всех участников на 0,499–0,896 процентного пункта.
Правило выбирают по цели оценки. Удаление подходит, если нужен чистый текст без редакторской разметки. Если продукт должен отмечать паузы, смех и междометия, такие пометки нужно оценивать отдельно.
Иногда удаление пометки увеличивает расстояние. Если система правильно распознала междометие, а мы убрали его из эталона вместе с пометкой, распознанное слово становится лишним. В двух записях GigaAM удаление пометки увеличило число операций редактирования. Поэтому этот шаг меняет цель оценки.
Названия латиницей и кириллицей
Мы приравняли только две пары написаний:
telegram ↔ телеграм;discord ↔ дискорд.
Другие слова правило не меняет. Оно не трогает ссылки, имена пользователей, части более длинных слов и падежные формы.
Общую транслитерацию не применяли: она могла бы скрыть ошибки в фамилиях, адресах и обычных словах.
Правило убрало всего четыре ошибки: две у GigaAM и по одной у пакетного и потокового Sber. У восьми систем результат вообще не изменился. Другие названия, например YouTube и Firefox, мы не добавляли без отдельной проверки.
Порядок конфигураций сохранился, а значения WER изменились
В четырёх последовательных пересчётах порядок 11 конфигураций не изменился: GigaAM оставалась первой, OpenAI gpt-realtime-whisper — вторым, Nexara — последней.
Но сами значения WER заметно изменились. При разнице между системами в десятые доли процента правила нормализации могут повлиять на их порядок. Поэтому их нужно публиковать вместе с результатом: без правил число нельзя полноценно проверить или сравнить с другим исследованием.
В рассмотренных четырёх расчётах порядок конфигураций не изменился, а разница между первым и итоговым значением micro-WER составила 0,68–1,36 процентного пункта.
Как повторить расчёт
Основная метрика — micro-WER. Мы складываем ошибки на всех записях и делим их на общее количество слов в эталонах:
micro-WER = (все замены + все удаления + все вставки) ÷ все слова эталона.
Меньше — лучше. В таблице дробь показана в процентах.
Чтобы повторить расчёт, нужно соблюдать пять условий:
- использовать те же сохранённые ответы, не запуская распознавание заново;
- считать результат на одних и тех же 488 записях для всех 11 конфигураций восьми моделей;
- к эталону и ответу в одном порядке применять NFKC, нижний регистр,
ё → е, канонизацию рода числительных, запись отдельно стоящих целых чисел словами и схлопывание пробелов; - удалять служебные пометки в квадратных скобках только из эталона;
- считать равными только две проверенные пары названий: Telegram и Discord на латинице и кириллице, затем использовать ту же Unicode-токенизацию и расстояние Левенштейна по словам.
В исходном корпусе 491 запись. У каждой из двух конфигураций Deepgram сохранились ответы на 489 записей, у остальных девяти конфигураций — на все 491. Общее пересечение составило 488 записей; состав данных в каждом столбце таблицы одинаков.
Проверьте расчёты.
В JSON есть параметры выборки, результаты всех четырёх вариантов и примеры изменений. CSV подойдёт для собственного анализа и графиков. Фрагменты ответов могут содержать чувствительные темы — не пытайтесь определить личности говорящих.
Что зафиксировать в методике
- Хранить правила нормализации рядом с результатами. Читатель должен понимать, какой именно текст сравнивался.
- Останавливать расчёт, если не работает преобразование чисел. Незаметный пропуск шага меняет WER.
- Заранее решить судьбу служебных пометок. Для чистой расшифровки их можно убрать; для дословного протокола — нужно оценивать отдельно.
- Добавлять варианты написания только после проверки примеров. Общая автоматическая транслитерация может скрыть настоящие ошибки.
- Отделять новый запуск ASR от нового пересчёта. Так будет понятно, что изменилось: ответ модели или только правила оценки.
Нормализация не делает распознавание лучше или хуже. Она определяет, какие различия мы считаем ошибками. Поэтому без описания этих правил WER остаётся неполным результатом.