
Как измерить точность распознавания речи: считаем WER на своих аудиозаписях
Если модель расшифровала запись «почти правильно», этого недостаточно, чтобы решить, подходит ли она для поддержки, диктовки или поиска по звонкам. Для сравнения нужен тест на собственных аудиозаписях и понятная метрика. Один из распространённых вариантов — WER, доля ошибок на уровне слов.
WER полезен для сравнения систем на одном и том же наборе, но не отвечает на вопрос, насколько опасна конкретная ошибка. Неправильное имя клиента и пропущенный артикль дают одинаковый вклад в счётчик замен. Поэтому метрику нужно сочетать с разбором ошибок и фиксировать правила подготовки текста заранее.
Что именно измеряет WER
WER — Word Error Rate, показатель ошибок распознавания на уровне слов. Для его расчёта сравнивают эталонную расшифровку с гипотезой модели. Формула:
WER = (S + D + I) / N
Здесь S — замены слов, D — пропуски, I — вставки, а N — число слов в эталоне. Если в эталоне 100 слов, а модель допустила 8 замен, 3 пропуска и 2 вставки, WER равен 13%.
Значение может превышать 100%: например, если система добавляет много лишних слов относительно короткого эталона. Это не процент «правильно распознанной речи», ограниченный диапазоном от нуля до ста.
Для поиска и сравнения моделей WER удобен тем, что сводит различия к одному числу. Но он не учитывает смысловую важность слов. Ошибка в фамилии, отрицании или сумме может быть критичной, хотя математически считается как одна замена.
Как собрать тестовый набор, который отражает ваши записи
Начните с аудио, похожего на реальные входные данные: те же микрофоны, кодеки, длина фраз, шум и манера речи. Если система будет расшифровывать телефонные звонки, записи из тихой студии не дадут надёжной оценки. Отдельно включите случаи с акцентами, перебиваниями, именами, числами и профессиональной лексикой, если они встречаются в продукте.
Для каждого аудиофрагмента подготовьте эталон — проверенную человеком расшифровку. Один файл должен соответствовать одному эталонному тексту. Определите, что считать границей фрагмента: слишком короткие обрезки могут лишать слова контекста, а чрезмерно длинные осложняют проверку и локализацию ошибок.
Практический минимальный набор действий:
Отберите записи из разных условий, а не только наиболее чистые.
Составьте эталон вручную и проверьте спорные места по аудио.
3. Зафиксируйте правила для пунктуации, чисел, сокращений и неречевых звуков.
4. Не используйте эти же примеры для настройки параметров, если затем хотите оценить качество на независимых данных.
5. Сохраните список записей и эталонов, чтобы повторять тест после смены модели или настроек.
Размер набора зависит от разнообразия данных и цены ошибки. Небольшая выборка подходит для быстрой диагностики, но может случайно не включить редкие имена или сложные условия. Поэтому вместе с общим числом WER полезно показывать результаты по группам: например, чистая речь, шумная запись, телефонный канал.
Как нормализовать русский текст перед сравнением
Результат метрики зависит от того, какие текстовые различия вы считаете ошибками. В одном выводе модель может поставить запятую, в другом — нет; число может быть записано цифрами или словами. Если такие отличия не важны для вашей задачи, нормализация позволяет не смешивать форматирование с ошибками распознавания.
Для русского теста заранее решите:
- удалять ли пунктуацию и приводить ли текст к нижнему регистру;
- считать ли «12» и «двенадцать» эквивалентными;
- как обрабатывать «ё» и «е»;
- удалять ли слова-паразиты и повторы;
- включать ли в эталон звуки вроде смеха и пометки о неразборчивой речи.
Универсально правильного набора правил нет. Если пользователь увидит в интерфейсе пунктуацию и написание чисел, эти свойства могут быть частью качества продукта. Если задача — найти нужное слово в архиве, нормализация может быть уместна, но её правила должны соответствовать поисковому сценарию.
Ключевое требование — одинаково обрабатывать эталон и гипотезу. Нельзя очищать только результат модели или менять правила после просмотра итогового числа: так оценка перестанет быть сопоставимой.
Как посчитать WER на своих данных с jiwer
Библиотека `jiwer` предоставляет функции для расчёта метрик распознавания. Установите её в отдельном окружении Python, затем передайте одинаково подготовленные эталон и гипотезу:
bash
python -m pip install jiwer
python
from jiwer import wer, Compose, ToLowerCase, RemovePunctuation, RemoveMultipleSpaces, Strip
normalize = Compose([
ToLowerCase(),
RemovePunctuation(),
RemoveMultipleSpaces(),
Strip(),
])
reference = «Здравствуйте, я хотел узнать статус заказа.»
hypothesis = «Здравствуйте я хотел узнать статус заказа»
score = wer(
normalize(reference),
normalize(hypothesis),
)
print(f»WER: {score:.3f}»)
В этом примере пунктуация и регистр не влияют на оценку. Это демонстрационное правило, а не рекомендуемая настройка для любого проекта. Например, если пунктуация важна для последующей публикации субтитров, сравнивайте её отдельно или не удаляйте при расчёте.
Для набора файлов нужно суммировать число замен, пропусков и вставок по всем примерам и делить на общее число слов в эталонах. Не следует просто усреднять WER каждого фрагмента: тогда короткая реплика получит тот же вес, что и длинная. Для диагностики можно дополнительно вывести оценки по отдельным записям, но итоговое агрегированное значение должно быть рассчитано на общей сумме ошибок и эталонных слов.
Перед запуском на полном наборе проверьте скрипт на нескольких вручную разобранных парах. Убедитесь, что он корректно обрабатывает пустую гипотезу, пустой эталон и выбранные правила нормализации. Зафиксируйте версию библиотеки и код оценки: при повторном тесте это часть воспроизводимости.
Как сравнить две модели без скрытого преимущества
Сравнивайте модели на тех же аудиофайлах, с одинаковыми эталонами и правилами обработки. Если одна система получила более длинные записи, а другая — только чистые фрагменты, разница в WER не позволяет понять, какая модель лучше.
Для каждого запуска сохраняйте не только итоговое значение, но и:
- название и версию модели;
- параметры запроса, включая язык и режим генерации, если они доступны;
- дату теста и версию скрипта;
- гипотезы по каждому аудио;
- ошибки, сгруппированные по типу или условию записи.
Если используется API, фиксируйте имя модели и актуальные параметры согласно документации провайдера. Интерфейсы и доступность моделей меняются, поэтому в отчёте полезно записать дату, а не полагаться на то, что один и тот же идентификатор всегда означает неизменный результат.
Сравнение общего WER дополняйте выборочной проверкой одинаковых сложных категорий. Модель с меньшей средней ошибкой может чаще ошибаться именно в именах или отрицаниях — а для конкретного сервиса это важнее нескольких лишних слов в длинных репликах.
Почему WER не заменяет проверку смысла и стоимости
WER считает слова, а не последствия. Пропущенное «не» — одна ошибка, как и замена нейтрального слова. Для медицинских, юридических и финансовых записей одной общей метрики недостаточно: нужна отдельная проверка критичных сущностей и смысловых ошибок, а также подходящий процесс человеческой верификации.
Метрика также чувствительна к расхождениям в токенизации и нормализации. «Санкт-Петербург» и «Санкт Петербург» могут быть посчитаны по-разному, хотя для конкретного поиска это может не иметь значения. Обратная ситуация тоже возможна: низкий WER не гарантирует, что важные детали сохранены.
Если решение принимается для рабочего процесса, измеряйте и другие показатели: долю фрагментов, требующих ручной правки, время редактора на проверку, ошибки в именах и числах, стоимость обработки и задержку. Эти измерения отвечают на разные вопросы и не должны подменяться одним числом.
Что проверить перед тем, как доверять результату
Перед выводом о качестве убедитесь, что эталоны проверены, правила нормализации одинаковы, выборка соответствует реальным записям, а сравниваемые модели получили одни и те же данные. Посмотрите не только на общий WER, но и на сами ошибочные фрагменты: повторяющиеся проблемы часто указывают на конкретный тип записи или словарь.
Затем повторите тест после изменения модели, параметров или обработки аудио на неизменном контрольном наборе. Для нового типа данных заведите отдельную группу, чтобы улучшение на одном сценарии не скрывало ухудшение на другом. WER даст воспроизводимую точку сравнения; решение о пригодности системы всё равно зависит от того, какие ошибки допустимы именно в вашем продукте.









