Оглавление
Вступление
В продуктах, построенных поверх моделей распознавания речи (Automatic Speech Recognition models, ASR), качество распознавания речи напрямую влияет на пользовательский опыт.
О том, какие есть методы оценки качества таких моделей, какие у них ограничения и как мы измеряем качество их работы — и пойдет речь.
Бизнес-ценность и определение проблемы
Если упрощать, в нашем продукте основной юз кейс основан на создании пользователями автоматических транскрипций речи. Соответственно, чем точнее модель обрабатывает речь, тем более корректный текст получает пользователь.
Таким образом, ASR — ключевой компонент продукта, а метрики качества транскрипций выступают основными прокси-метриками для нашего продукта:
-
Банальный health-check — модель может деградировать, и важно это вовремя заметить;
-
Возможность проводить market-review и выбирать более точные модели;
-
Возможность оптимизировать стоимость, выбирая более дешевые модели при сопоставимом качестве.
Как измеряется качество распознавания речи?
В качестве индустриального стандарта используются две основные метрики — WER и CER:
-
Word Error Rate (WER) — показывает долю ошибок в тексте на уровне слов.
WER основан на расстоянии Левенштейна, алгоритме, используемом для измерения различий между двумя последовательностями. В контексте ASR эти последовательности — это транскрипция, созданная системой распознавания речи («гипотеза»), и фактический текст, который был произнесен («эталонная транскрипция»).
Вычисление WER включает подсчет количества преобразований — вставок, удалений и замен, необходимых для преобразования гипотезы в эталонную транскрипцию; -
Character Error Rate (CER) — аналогичная метрика, но на уровне символов.
В статье далее будем говорить только про WER, так как CER мы не используем в наших оценках.
В целом, можно просто опираться на данные от самих разработчиков модели. Например, вот данные для разных языков одной из наиболее популярных моделей, Whisper от OpenAI:
Недостатки индустриального стандарта
Несмотря на широкое распространение, стандартный подход имеет ряд ограничений:
-
На выходе мы получаем только агрегированное значение WER, чего часто недостаточно для принятия решений;
-
Датасеты у разных моделей отличаются, поэтому сравнение не всегда корректно;
-
Отсутствует детализация: непонятно, где именно модель ошибается.
В результате WER без декомпозиции может вводить в заблуждение.
Почему это важно
Чтобы понять ограничения WER, посмотрим на саму формулу:
где:
-
S (Substitution) — количество замен;
-
D (Deletion) — количество удалений;
-
I (Insertion) — количество вставок;
-
N — количество слов в эталонной транскрипции.
Как видно из формулы, здесь учитывается лишь общее количество преобразований с разложением на замены, удаления и вставки.
Рассмотрим простой пример:
Две модели имеют одинаковый WER = 10%.
Модель 1:
-
2% ошибок в общеупотребительной лексике;
-
8% ошибок в распознавании именованных сущностей (имена собственные и т. д.);
Модель 2:
-
8% ошибок в общеупотребительной лексике;
-
2% ошибок в распознавании именованных сущностей (имена собственные и т. д.).
Подобный взгляд позволяет точнее увидеть качество. На уровне общего WER модели выглядят одинаково, но структура ошибок показывает принципиально разное качество. При пересчете на сотни часов речи и сотни тысяч слов разница для пользователей, и как следствие для всего продукта может быть колоссальной.
Проблематика в нашем случае
Исторически в продукте использовалась единственная модель, которая казалась приемлемой.
Однако пользователи жаловались на качество транскрипций. После того как мы верхнеуровнево проанализировали транскрипции и ошибки, родилась гипотеза о том, что чаще всего ошибки встречаются в именованных сущностях (имена собственные и прочее). Более того, подобные ошибки являются наиболее критичными для пользователей.
Чтобы это проверить, мы решили измерять качество на собственных данных и расширили стандартный подход.
Как мы измеряем точность моделей у себя
Оценка в разрезе семантических категорий
Мы не ограничиваемся одним значением WER. Вместо этого используем расширенную версию, которая учитывает ошибки в разрезе семантических категорий:
-
Общеупотребительная лексика;
-
Именованные сущности:
-
Имена людей;
-
Организации;
-
География;
-
События;
-
Даты и время.
-
Процесс
Для того, чтобы перейти от общего WER и внедрить анализ по семантическим категориям нам пришлось решить несколько ключевых задач.
Задача 1: Получить корректный датасет и сделать результаты сопоставимыми
Для корректного сравнения моделей мы используем единый эталонный датасет. Это важно, потому что различия в данных, качестве аудио и самой разметке могут искажать результаты оценки.
Статистическая значимость датасета
В первую очередь при создании датасета нам необходимо гарантировать, что разница в WER — это не шум, а статистически значимый результат. Поэтому нам необходимо понять, какое количество данных необходимо в эталонной транскрипции.
Так как WER рассчитывается на уровне слов, размер датасета определяется минимальным количеством слов, необходимым для статистически значимой оценки.
Однако, тут стоит сразу оговориться: так как для нас важен не только общий WER, но и точность распознавания в разрезе именованных сущностей, то и n мы будем рассчитывать с учетом доли именованных сущностей в тексте.
Поэтому размер выборки дополнительно масштабируется с учетом доли именованных сущностей в корпусе.
При расчете размера датасета мы опираемся на следующие требования статистической значимости:
-
Уровень достоверности – 95%;
-
Требуемая точность – ±1%.
Таким образом количество слов рассчитывается по следующей формуле:
где:
-
n — количество слов в транскрипции;
-
Z ≈ 1.96 (при уровне достоверности 95%);
-
p — вероятность ошибки, используемая для оценки минимального размера выборки.
В качестве консервативного допущения используется p = 50%, так как при p=0.5 выражение p(1−p) достигает максимального значения. Это соответствует максимальной дисперсии и позволяет получить наиболее безопасную (наибольшую) оценку необходимого размера выборки независимо от качества исследуемой модели; -
E — требуемая точность (±1%);
-
— дополнительный коэффициент позволяющий обеспечить статистическую значимость ошибок на уровне именованных сущностей, определяется как 1/доля именованных сущностей.
Если именованные сущности составляют 15.5% текста, то при обычном расчете выборки статистически значимых данных для анализа на уровне именованных сущностей может не хватить. Поэтому размер выборки увеличивается обратно пропорционально доле именованных сущностей: 1 / 0.155 ≈ 6.45.
Задача 2: Понять, где именно ошибка и к какой категории она относится
Без понимания, где именно находится ошибка и к какой семантической категории она относится, все дальнейшие действия в нашем фреймворке невозможны.
Для решения этой задачи мы прибегаем к дополнительному шагу при подготовке нашего датасета. Мы обогащаем его некоторыми метаданными – создаем аннотацию именованных сущностей при помощи Named Entity Recognition.
Named Entity Recognition (NER)
Named Entity Recognition (NER, Распознавание именованных сущностей) — технология NLP, которая автоматически находит в тексте ключевые объекты и классифицирует их по категориям: имена людей, названия компаний, локации, даты, суммы денег и так далее.
В рамках этой аннотации каждому слову присваивается тег семантической категории. Это позволяет анализировать ошибки WER не только на общем уровне, но и отдельно по типам сущностей.
Классификация
Мы используем следующую классификацию:
-
Общеупотребительная лексика (GENERAL);
-
Именованные сущности (NE):
-
Имена людей (PERSON);
-
Названия организаций (ORG);
-
Названия стран, регионов и географических объектов (GPE);
-
Названия различных событий (Например, «Саммит большой семерки») (EVENT);
-
Дата и время (DATE/TIME).
-
Инструменты, используемые для получения аннотации
Для получения аннотаций мы используем NER-модели/библиотеки, такие как spaCy, Hugging Face Transformers, на основе архитектуры mBERT, которые позволяют автоматизировать этот процесс. В этой статье я не буду рассказывать подробно, как это работает, так как это довольно сложный процесс – поэтому кому интересно, рекомендую почитать отдельно.
На выходе NER-модель возвращает позиции сущностей и их категории.
Пример аннотации именованных сущностей
On March 12, 2024, representatives from Greenfield Energy met with officials from the City Council of Brighton to discuss a new urban sustainability initiative. The project, called «Clean Streets Program,» is expected to launch in June 2024 and will initially cover several districts in southern England. According to project lead Anna Carter, the initiative aims to reduce emissions and improve waste management efficiency across the region.
Таблица 1 – Пример аннотации именованных сущностей в эталонной транскрипции
|
Тип сущности |
Текст сущности |
Позиция |
|
DATE |
March 12, 2024 |
2–4 |
|
ORG |
Greenfield Energy |
7–8 |
|
ORG |
City Council |
12–13 |
|
GPE |
Brighton |
15–15 |
|
EVENT |
Clean Streets Program |
26–28 |
|
DATE |
June 2024 |
34–35 |
|
GPE |
southern England |
43–44 |
|
PERSON |
Anna Carter |
50–51 |
Задача 3: Объединить ошибки и семантику
На данном этапе у нас уже есть полностью готовый датасет, состоящий из:
-
Эталонной транскрипции;
-
Аннотации именованных сущностей.
Но мы всё ещё не знаем, как связать ошибки с сущностями, поэтому теперь нам нужно объединить базовые преобразования WER (удаления, вставки и замены) с семантической разметкой.
Использование jiwer для базовых операций WER
Для расчета базовых преобразований WER мы использовали библиотеку jiwer, которая реализует сравнение эталонной транскрипции и гипотезы на основе алгоритма редактирования (Расстояние Левенштейна).
Библиотека позволяет автоматизировать процесс и выполняет нормализацию текста, токенизацию и выравнивание последовательностей, после чего рассчитывает количество операций вставки, удаления и замены, необходимых для того, чтобы привести гипотезу к эталону.
Так как ошибки возникают в гипотезе, а теги существуют только для эталонной транскрипции, то при расчетах нам нужно сопоставить ошибки и их позиции с типами сущностей из аннотации для получения детальной картины.
Таким образом базовые S, D, I превращаются в декомпозированный список преобразований с учетом семантических категорий:
-
S – общее количество замен:
-
S_GENERAL, S_PERSON, S_ORG, S_GPE, S_EVENT, S_DATE/TIME – количество замен, отдельно в разрезе по семантическим категориям;
-
-
D – общее количество удалений:
-
D_GENERAL, D_PERSON, D_ORG, D_GPE, D_EVENT, D_DATE/TIME – количество удалений, отдельно в разрезе по семантическим категориям;
-
-
I – общее количество вставок:
-
I_GENERAL, I_PERSON, I_ORG, I_GPE, I_EVENT, I_DATE/TIME – количество вставок, отдельно в разрезе по семантическим категориям.
-
Например:
-
Эталонная транскрипция: Anna Carter met officials;
-
Гипотеза: Anna Cartel met officials.
jiwer определяет:
-
S – substitution (Carter → Cartel).
Слово Carter имеет тег PERSON, таким образом мы получаем одну ошибку типа S_PERSON.
Далее мы считаем все ошибки и агрегируем их по категориям, после чего рассчитываем нужные показатели.
Задача 4: Расчеты. Использование и интерпретация результатов
Набор моделей
Теперь перейдём к финальной части – получению результатов и их интерпретации.
Для упрощения, в качестве результатов я приведу лишь часть данных и ASR моделей, которые мы тестировали. Я хочу лишь показать картину и подход в целом, использовав наиболее показательные данные.
В нашем случае 4 модели:
-
Модель А — наша дефолтная модель, которая использовалась в продукте с самого начала;
-
Модели B, C и D — альтернативные модели ASR.
Плотность именованных сущностей
Так как наш контент содержит высокую плотность именованных сущностей (новости, политический контент), важно учитывать их долю отдельно.
Ниже я добавлю данные о долях семантических категорий, которые мы получили сделав разметку нашего датасета:
Таблица 2 – Распределение семантических категорий в эталонном датасете
|
Категория |
Доля относительно всего текста |
|
General (общеупотребительная лексика) |
84.5% |
|
Именованные сущности (NE): |
15.5% |
|
– PERSON |
4.5% |
|
– ORG |
3.0% |
|
– GPE |
3.5% |
|
– EVENT |
1.0% |
|
– DATE/TIME |
3.5% |
Доля именованных сущностей в тексте составляют 15.5%. Важно учесть это для дальнейшей интерпретации.
Общий WER
В таблице ниже я привел данные по замерам общего (стандартного) WER. Пока что я намеренно делаю это без разложения по семантическим категориям.
Таблица 3 – Сравнение общего WER и базовых типов ошибок для тестируемых ASR-моделей
|
Метрика |
Модель A (дефолтная) |
Model B |
Model C |
Model D |
|
Общий WER |
17.0% |
9.0% |
7.0% |
8.0% |
|
Замен всего (S) |
10.0% |
6.0% |
4.0% |
5.0% |
|
Удалений всего (D) |
4.0% |
2.0% |
2.0% |
2.0% |
|
Вставок всего (I) |
3.0% |
1.0% |
1.0% |
1.0% |
Если опираться только на эти данные мы можем сделать вывод о том, что модель С наиболее подходящая для нас. Однако здесь и становится полезен наш подход и разложение ошибок по семантическим категориям, что позволяет взглянуть на эти модели глубже.
Ошибки в разрезе семантических категорий
Теперь я введу понятие – показатель WER отдельно для каждой семантической категории. То есть это WER на подмножестве i, где i – семантические категории (GENERAL, PERSON и т. д.). Он показывает, насколько часто модель ошибается внутри каждой категории:
Таблица 4 – Ошибки распознавания в разрезе семантических категорий для тестируемых ASR-моделей
|
Метрика |
Определение |
Модель A |
Модель B |
Модель C |
Модель D |
|
|
% распознанных с ошибкой токенов общеупотребительной лексики |
14.6% |
7.9% |
6.4% |
8.2% |
|
|
% токенов именованных сущностей, распознанных с ошибкой |
29.8% |
15.2% |
10.3% |
7.0% |
|
|
% токенов PERSON распознанных с ошибкой |
36.0% |
20.0% |
15.0% |
9.0% |
|
|
% токенов ORG распознанных с ошибкой |
30.0% |
15.0% |
10.0% |
7.0% |
|
|
% токенов GPE распознанных с ошибкой |
27.0% |
13.0% |
8.0% |
6.0% |
|
|
% токенов EVENT распознанных с ошибкой |
32.0% |
16.0% |
10.0% |
8.0% |
|
|
% токенов DATE/TIME распознанных с ошибкой |
24.0% |
11.0% |
7.0% |
5.0% |
Основные наблюдения:
Рассматривая ошибки по семантическим категориям, мы видим, что дефолтная модель распознает примерно:
-
15% общеупотребительной лексики — с ошибками
но для именованных сущностей:
-
Почти 30% токенов распознаются неверно.
Это означает, что примерно треть всех именованных сущностей транскрибирована неверно.
В то же время лучшей моделью — именно для именованных сущностей — является Модель D, с показателем ошибок всего 7%.
Это справедливо, даже несмотря на то, что модель D не демонстрирует наилучший общий показатель WER:
-
Модель D — 8%;
-
Модель C — 7%.
Модель D на самом деле является более предпочтительным выбором для бизнеса, поскольку она демонстрирует более высокую эффективность в наиболее критически важных сценариях использования.
Вклад каждой категории ошибок в общий WER
Также я введу понятие – показатель отношения количества ошибок подмножества i (подмножество семантической категории) к общему количеству ошибок. Он показывает, какой вклад каждая категория вносит в общий показатель WER:
Таблица 5 – Вклад семантических категорий в общее значение WER
|
Метрика |
Определение |
Модель A |
Модель B |
Модель C |
Модель D |
|
|
% всех ошибок приходящихся на общеупотребительную лексику |
72.6% |
74.2% |
77.3% |
86.6% |
|
|
% всех ошибок приходящихся на именованные сущности |
27.2% |
26.1% |
22.9% |
13.5% |
|
|
% всех ошибок приходящихся на сущности PERSON |
9.5% |
10.0% |
9.6% |
5.1% |
|
|
% всех ошибок приходящихся на сущности ORG |
5.3% |
5.0% |
4.3% |
2.6% |
|
|
% всех ошибок приходящихся на сущности GPE |
5.6% |
5.1% |
4.0% |
2.6% |
|
|
% всех ошибок приходящихся на сущности EVENT |
1.9% |
1.8% |
1.4% |
1.0% |
|
|
% всех ошибок приходящихся на сущности DATE/TIME |
4.9% |
4.3% |
3.5% |
2.2% |
Несмотря на то что именованные сущности составляют лишь около 15% от общего объема текста, они вносят свой вклад:
-
27% от общего показателя WER для дефолтной модели.
Это убедительно подтверждает идею о том, что повышение качества распознавания именованных сущностей представляет огромную ценность.
Например, в Модели D — демонстрирующей наилучшие результаты в отношении именованных сущностей — вклад ошибок распознавания именованных сущностей снижается до 13,5%.
Заключительный вывод
Анализ показывает, что, хотя модель C обеспечивает наименьший общий показатель WER, значительная часть оставшихся ошибок по-прежнему сосредоточена в именованных сущностях.
Модель D, несмотря на несколько более высокий показатель WER, демонстрирует более сбалансированное распределение ошибок и значительно более низкий уровень ошибок в критически важных категориях, таких как PERSON.
Это указывает на то, что:
-
Модель C оптимизирует общее качество транскрипции;
-
Модель D лучше сохраняет семантически важную информацию.
В результате модель D была выбрана в качестве оптимальной модели для использования и заменила модель A.
В задачах, где различные типы ошибок имеют разную ценность, агрегированная метрика может скрывать критические различия между моделями.
Также хочу отдельно отметить, что данные в таком разрезе позволяют гораздо более тонко надстраивать методы постобработки поверх самой модели, а также развивать их, повышая качество не вторгаясь в работу самой модели. В нашем конкретном случае это обеспечило возможность развивать кастомные словари и автозамену.
P.S.
Уже после завершения основной работы я наткнулся на исследование «Named Entity Extraction from Speech» (Авторы: Фрэнсис Кубала, Ричард Шварц, Ребекка Стоун и Ральф Вайшедель.), где авторы пришли к похожему выводу: классический WER недостаточно хорошо отражает качество сохранения смысловой информации, а ошибки в именованных сущностях требуют отдельного внимания. Интересно, что production-задача спустя десятилетия приводит к тем же выводам, но уже в прикладной форме — через декомпозицию WER по семантическим категориям.
Автор: nikulec


