Оценка качества¶
stt-ru evaluate, stt_ru.evaluation
Описание¶
Команда распознает записи из вашей разметки одной или несколькими моделями и считает долю ошибок слов (WER) и символов (CER) и скорость. Так можно выбрать модель для своих записей: звонков, лекций, диктовки. Нужно дополнение eval:
pip install "stt-ru[eval]"
stt-ru evaluate eval.csv # модель по умолчанию
stt-ru evaluate eval.csv -m gigaam-v3-e2e-rnnt -m gigaam-v3-rnnt -o report.json
Модель WER, % CER, % Скорость Записей Ошибок
gigaam-v3-e2e-rnnt 0.0 0.0 49.8x 2 0
gigaam-v3-rnnt 0.0 0.0 52.4x 2 0
- WER и CER - доли замен, пропусков и вставок слов и символов (расстояние Левенштейна) по всем записям вместе: сумма ошибок, деленная на сумму слов или символов эталонов. Пробелы входят в CER.
- Скорость - во сколько раз распознавание быстрее реального времени, вместе с чтением файла.
- Записей и Ошибок - сколько строк разметки и сколько из них не распознано.
Модели загружаются по очереди; модель, которая не загрузилась, отмечается в таблице, остальные оцениваются. Ход работы и ошибки выводятся в stderr, таблица - в stdout.
Разметка¶
Разметка - CSV, JSON Lines или каталог. Файлы - в UTF-8, пути к записям - относительно файла разметки.
CSV с колонками audio, text и необязательной channel. Разделитель - запятая, точка с запятой (как сохраняет Excel в русской локали) или табуляция, имена колонок - в любом регистре, пустые строки пропускаются. Текст с разделителем берется в кавычки: строка, в которой значений больше, чем колонок, - ошибка с ее номером.
audio,text,channel
calls/0001.wav,"Добрый день, компания «Ромашка», чем могу помочь?",1
calls/0001.wav,"Здравствуйте, хочу узнать статус заказа.",0
lectures/intro.mp3,"Сегодня мы поговорим о распознавании речи.",
JSON Lines с теми же полями:
{"audio": "calls/0001.wav", "text": "Добрый день, компания «Ромашка», чем могу помочь?", "channel": 1}
{"audio": "lectures/intro.mp3", "text": "Сегодня мы поговорим о распознавании речи."}
Каталог, где у каждого аудиофайла есть эталон с тем же именем: call.wav и call.txt.
channel - номер канала стереозаписи, где канал - говорящий: эталон сравнивается только с текстом этого канала. Если дорожка одна (монозапись, --mono или одинаковые каналы), сравнивается весь текст; канал, совпавший с другим каналом записи, сравнивается с текстом того канала. Файл, который встречается в разметке несколько раз, распознается один раз.
Нормализация¶
Перед подсчетом эталон и распознанный текст приводятся к одному виду: нижний регистр, «ё» как «е», все, кроме букв и цифр, - пробел. Разложенные буквы с диакритикой собираются, знаки ударения и невидимые символы (мягкий перенос, пробел нулевой ширины) удаляются.
Числа не переводятся из цифр в слова. Если цифры есть только в эталоне или только в распознанном тексте, после таблицы выводится предупреждение: WER завышен из-за разной записи чисел. GigaAM-v3 E2E пишет числа цифрами, а GigaAM-v3 RNN-T и CTC - словами, поэтому для честного сравнения таких моделей записывайте числа в эталоне так, как их пишет нужная модель, или сравнивайте на записях без чисел.
Параметры¶
| Параметр | По умолчанию | Описание |
|---|---|---|
РАЗМЕТКА |
- | CSV, JSONL или каталог |
-m, --model |
gigaam-v3-e2e-rnnt |
Модель; можно повторить, повтор имени учитывается один раз |
-o, --output |
- | Подробный отчет в JSON |
-q, --quiet |
выключен | Не выводить ход работы; ошибки выводятся всегда |
Остальные параметры модели и поиска речи - на странице Модели; --model-dir задается только для одной модели. Разметка и аргументы, в том числе имена моделей onnx-asr и путь отчета, проверяются до загрузки моделей; модель с Hugging Face (имя с «/») проверяется при загрузке.
Код выхода - 1, если модель не загрузилась, запись не распознана или отчет не сохранен; 2 - неверные аргументы или разметка; 130 - прерывание Ctrl+C: таблица и отчет сохраняются по моделям, оцененным целиком.
Отчет¶
-o report.json сохраняет путь к разметке и для каждой модели - model, error (ошибка загрузки), wer, cer, speed, число записей files и ошибок failed, digits_mismatch и results по строкам разметки: audio, channel, reference, hypothesis, duration, seconds, words, substitutions, deletions, insertions, chars, char_errors, wer, cer и error. По hypothesis и числам ошибок удобно искать записи, на которых модель ошибается больше всего.
Библиотека Python¶
>>> from stt_ru import Transcriber
>>> from stt_ru.evaluation import evaluate, format_table, load_manifest
>>> samples = load_manifest("eval.csv")
>>> report = evaluate(Transcriber("gigaam-v3-e2e-rnnt"), samples)
>>> report.wer, report.cer
(0.0, 0.0)
>>> print(format_table([report]))
Модель WER, % CER, % Скорость Записей Ошибок
gigaam-v3-e2e-rnnt 0.0 0.0 48.6x 2 0
load_manifest возвращает список Sample(audio, text, channel), evaluate - ModelReport с результатами записей FileResult и сводными wer, cer и speed. normalize(text) - нормализация перед подсчетом.