Исследование · ASR · нормализация

Как правила нормализации текста меняют WER

Распознавание повторно не запускали: четыре раза пересчитали результаты для 8 моделей и 2 режимов обработки — всего 11 конфигураций — на одних и тех же записях. Значения сдвинулись до 1,36 процентного пункта, но порядок конфигураций не изменился.

· Дмитрий Бороздин · 10 минут

WER — метрика ошибок распознавания речи. По ссылке доступны определения WER, micro-WER, медианы WER и среднего WER.

Результат пересчёта

Одна и та же расшифровка может получить разный WER

Мы пересчитали сохранённые ответы 8 моделей в пакетном и потоковом режимах — всего 11 конфигураций — на одних и тех же 488 записях. Изменились только правила подготовки текста. Максимальный сдвиг — с 12,418% до 11,057%. Порядок конфигураций остался прежним.

0новых обращений к ASR
488одинаковых записей в каждом расчёте
−1,36процентного пункта — максимальный сдвиг WER

Сравниваете распознавание речи? Отправьте коллегам таблицу о том, как правила подготовки текста меняют micro-WER одних и тех же расшифровок.

Для подсчёта WER проверенную человеком расшифровку — эталон — сравнивают с текстом, который вернула система распознавания. Но сначала оба текста нужно привести к одной форме. Иначе программа посчитает ошибкой даже разницу между 100 и сто.

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

Как мы проверили влияние нормализации

Мы взяли сохранённые ответы из основного сравнения распознавания русской речи. Во всех четырёх расчётах использовали одни и те же 488 записей, для которых были ответы всех 11 конфигураций восьми моделей.

Одни и те же тексты пересчитали четыре раза:

  1. Цифры остались цифрами. Первый вариант воспроизводит ошибочный расчёт: модуль преобразования отдельно записанных целых чисел не загрузился, поэтому 100 не превратилось в сто.
  2. Исправили запись чисел. Программа преобразовывала отдельно записанные целые числа в русские слова. Одновременно применялись базовые правила: один регистр букв, ё → е, обычные пробелы и NFKC.
  3. Убрали служебные пометки из эталона. Фрагменты вроде [pause] и [unclear] перестали считаться словами, которые должна распознать система.
  4. Учли два варианта написания названий. telegram приравняли к телеграм, а discord — к дискорд.

Это последовательный пересчёт: каждый следующий результат включает предыдущие изменения. Вклад правил не измерялся независимо и может зависеть от порядка их применения.

Что такое NFKC? Это форма Unicode-нормализации, которая приводит некоторые технически разные записи символов к одной форме. Например, превращается в 1, широкая цифра — тоже в 1, лигатура — в fi, а неразрывный пробел — в обычный. NFKC не переводит слова, не исправляет опечатки и не считает латинскую a русской а.

Первый вариант не является рекомендуемой методикой. Он показывает, насколько изменился результат из-за пропущенного преобразования чисел.

Как менялся WER после каждого шага

Система / режим Цифры не преобразованы Цифры переведены в слова Убраны служебные пометки Учтены два написания названий Изменение: «цифры в слова» → итог
GigaAM v3, пакет8,148%7,972%7,473%7,464%−0,509 п.п.
OpenAI gpt-realtime-whisper9,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 п.п.
WER по всем словам 488 записей, меньше — лучше. Последний столбец показывает разницу между вариантом с преобразованием чисел и итоговым расчётом; «п.п.» означает процентные пункты.

Сумма операций редактирования по всем 11 конфигурациям восьми моделей показывает масштаб изменений, но не используется как отдельная метрика рейтинга:

При удалении пометок меняется не только число ошибок, но и количество слов в эталоне: их стало 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 удаление пометки увеличило число операций редактирования. Поэтому этот шаг меняет цель оценки.

Названия латиницей и кириллицей

Мы приравняли только две пары написаний:

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

Общую транслитерацию не применяли: она могла бы скрыть ошибки в фамилиях, адресах и обычных словах.

Правило убрало всего четыре ошибки: две у GigaAM и по одной у пакетного и потокового Sber. У восьми систем результат вообще не изменился. Другие названия, например YouTube и Firefox, мы не добавляли без отдельной проверки.

Порядок конфигураций сохранился, а значения WER изменились

В четырёх последовательных пересчётах порядок 11 конфигураций не изменился: GigaAM оставалась первой, OpenAI gpt-realtime-whisper — вторым, Nexara — последней.

Но сами значения WER заметно изменились. При разнице между системами в десятые доли процента правила нормализации могут повлиять на их порядок. Поэтому их нужно публиковать вместе с результатом: без правил число нельзя полноценно проверить или сравнить с другим исследованием.

В рассмотренных четырёх расчётах порядок конфигураций не изменился, а разница между первым и итоговым значением micro-WER составила 0,68–1,36 процентного пункта.

Как повторить расчёт

Основная метрика — micro-WER. Мы складываем ошибки на всех записях и делим их на общее количество слов в эталонах:

micro-WER = (все замены + все удаления + все вставки) ÷ все слова эталона.
Меньше — лучше. В таблице дробь показана в процентах.

Чтобы повторить расчёт, нужно соблюдать пять условий:

В исходном корпусе 491 запись. У каждой из двух конфигураций Deepgram сохранились ответы на 489 записей, у остальных девяти конфигураций — на все 491. Общее пересечение составило 488 записей; состав данных в каждом столбце таблицы одинаков.

Проверьте расчёты.
В JSON есть параметры выборки, результаты всех четырёх вариантов и примеры изменений. CSV подойдёт для собственного анализа и графиков. Фрагменты ответов могут содержать чувствительные темы — не пытайтесь определить личности говорящих.

Скачать JSON

Скачать CSV

SHA-256

Что зафиксировать в методике

  1. Хранить правила нормализации рядом с результатами. Читатель должен понимать, какой именно текст сравнивался.
  2. Останавливать расчёт, если не работает преобразование чисел. Незаметный пропуск шага меняет WER.
  3. Заранее решить судьбу служебных пометок. Для чистой расшифровки их можно убрать; для дословного протокола — нужно оценивать отдельно.
  4. Добавлять варианты написания только после проверки примеров. Общая автоматическая транслитерация может скрыть настоящие ошибки.
  5. Отделять новый запуск ASR от нового пересчёта. Так будет понятно, что изменилось: ответ модели или только правила оценки.

Нормализация не делает распознавание лучше или хуже. Она определяет, какие различия мы считаем ошибками. Поэтому без описания этих правил WER остаётся неполным результатом.