Что такое WER и как измеряют точность распознавания речи
Основы4 минРедакция Innovialabs
Коротко
WER — доля слов, которые система распознавания речи заменила, пропустила или добавила по сравнению с эталонной расшифровкой; измерять его нужно на ваших собственных записях, потому что цифры вендоров получены на чистой речи и не отражают шум, телефонию и смешение языков.
Короткий ответ
WER (Word Error Rate) — основная метрика точности распознавания речи (ASR). Она показывает, какая доля слов распознана с ошибкой по сравнению с эталонной расшифровкой, сделанной человеком.
Формула:
WER = (S + D + I) / N
- S (substitutions) — заменённые слова;
- D (deletions) — пропущенные слова;
- I (insertions) — лишние слова;
- N — количество слов в эталоне.
Чем ниже WER, тем лучше. Из-за вставок WER может быть больше 100%.
Пример расчёта
Эталон: «откройте счёт в банке сегодня» — 5 слов. Распознано: «откройте счет банке сегодня утром».
- «счёт» → «счет» — замена (S = 1);
- «в» пропущено (D = 1);
- «утром» добавлено (I = 1).
WER = 3 / 5 = 60%. Но если перед расчётом заменить «ё» на «е», замена исчезает и WER = 2 / 5 = 40%. Это показывает главное: без единой нормализации текста сравнивать цифры бессмысленно.
Связанные метрики
| Метрика | Что измеряет | Когда полезна |
|---|---|---|
| CER (Character Error Rate) | Ошибки на уровне символов | Языки с длинными словами и суффиксами, например узбекский |
| SER (Sentence Error Rate) | Доля фраз хотя бы с одной ошибкой | Короткие команды, голосовые меню |
| Точность ключевых сущностей | Правильно ли распознаны имена, номера, суммы, названия товаров | Колл-центры, где важны конкретные данные, а не каждое слово |
| Точность диаризации | Верно ли система разделила реплики оператора и клиента | Аналитика звонков |
Для бизнеса часто важнее не общий WER, а то, распознаёт ли система номер договора, сумму и название услуги.
Как измерить WER на своих звонках
- Соберите выборку. Возьмите реальные записи, которые отражают ваши условия: разные операторы и клиенты, шум, плохая связь, русская, узбекская и смешанная речь. Не выбирайте только чистые записи.
- Сделайте эталонные расшифровки. Человек расшифровывает записи дословно, по единым правилам: как писать числа, сокращения, слова-паразиты, переключения языков.
- Нормализуйте текст. Приведите эталон и результат системы к одному виду: нижний регистр, без пунктуации, единое написание «ё», апострофов и чисел.
- Посчитайте метрики отдельно для каждой группы условий: шумные и чистые звонки, русский, узбекский, смешанный.
- Разберите ошибки вручную. Посмотрите, какие слова путаются чаще всего — это подскажет, где нужен словарь терминов или дообучение.
Для расчёта подходит, например, библиотека jiwer для Python:
import re
import jiwer
def normalize(text: str) -> str:
text = text.lower().replace("ё", "е")
text = re.sub(r"[^\w\s]", "", text)
return " ".join(text.split())
reference = normalize("Откройте счёт в банке сегодня.")
hypothesis = normalize("откройте счет банке сегодня утром")
print(jiwer.wer(reference, hypothesis)) # 0.4
print(jiwer.cer(reference, hypothesis))
Почему цифры вендоров не совпадают с вашими
Заявленная точность обычно получена на публичных бенчмарках — чаще всего чистая, прочитанная вслух речь с хорошим микрофоном. Ваши звонки отличаются почти во всём:
- Телефонный канал. Узкая полоса частот и сжатие ухудшают качество звука.
- Шум. Улица, магазин, машина, разговоры на фоне.
- Смешение языков. Клиент начинает по-узбекски, вставляет русские слова и термины — модели, обученные на одном языке, на таких фразах ошибаются чаще.
- Узбекский язык. Он агглютинативный: одно неверное окончание делает всё слово ошибкой, поэтому WER выглядит хуже, чем реальное понимание. Добавляются латиница и кириллица, разные варианты апострофа в o‘ и g‘.
- Специфичная лексика. Названия ваших товаров, тарифов, улиц и имена.
- Разная нормализация. Вендор мог считать WER по своим правилам, которые невозможно сравнить с вашими.
Поэтому выбирайте систему только после теста на собственной выборке, используя одинаковые правила для всех кандидатов.
Частые ошибки
- Сравнивать WER разных вендоров, посчитанный на разных данных.
- Тестировать на нескольких удачных записях.
- Смотреть только на средний WER и не разделять по условиям.
- Забывать, что для задачи важны конкретные сущности, а не все слова.