Инструмент для сравнения эталонного текста с результатом автоматического распознавания речи (ASR) с расчетом метрик WER, CER и детальным анализом ошибок.
Доступно:
- 🐍 Python CLI скрипт
- 🚀 FastAPI REST API сервер
# Основные зависимости
uv sync
# С dev зависимостями (для тестирования)
uv sync --all-extraspython main.py# Запуск с uvicorn
uvicorn app:app --reload --host 0.0.0.0 --port 8000
# Или через Python
python app.pyСервер будет доступен на http://localhost:8000
После запуска сервера:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
Информация о API
Проверка работоспособности сервиса
Сравнение эталонного и ASR текстов
Request body:
{
"reference_text": "всем добрый день у нас 2024 год",
"hypothesis_text": "Всем добрый день. У нас две тысячи двадцать четвёртый год."
}Response:
{
"wer": 0.0,
"cer": 0.0,
"total_errors": 0,
"substitutions": 0,
"deletions": 0,
"insertions": 0,
"total_words": 7,
"reference_normalized": "всем добрый день у нас две тысячи двадцать четыре год",
"hypothesis_normalized": "всем добрый день у нас две тысячи двадцать четыре год"
}curl -X POST "http://localhost:8000/compare" \
-H "Content-Type: application/json" \
-d '{
"reference_text": "всем добрый день у нас 2024 год",
"hypothesis_text": "Всем добрый день. У нас две тысячи двадцать четвёртый год."
}'import requests
response = requests.post(
"http://localhost:8000/compare",
json={
"reference_text": "всем добрый день у нас 2024 год",
"hypothesis_text": "Всем добрый день. У нас две тысячи двадцать четвёртый год."
}
)
result = response.json()
print(f"WER: {result['wer']:.2%}")
print(f"CER: {result['cer']:.2%}")# Установите dev зависимости если еще не установили
uv sync --all-extras
# Запустите тесты
pytest test_app.py -vpython test_app.pyЭтот скрипт запустит набор тестов без pytest и покажет результаты в консоли.
-
Нормализация чисел (Пока что не работает):
- Преобразует все цифры в единый текстовый формат
- Корректно обрабатывает телефонные номера ("8 800 200" → "восемь восемьсот двести")
- Преобразует большие числа ("2200000" → "два миллиона двести тысяч")
-
Предобработка текста:
- Приведение к нижнему регистру
- Замена "ё" на "е"
- Удаление пунктуации
- Нормализация пробелов
-
Расчет метрик:
- WER (Word Error Rate) - процент ошибок на уровне слов
- CER (Character Error Rate) - процент ошибок на уровне символов
- Подсчет замен (S), удалений (D) и вставок (I)
-
Визуализация отличий (только CLI):
- Построчный вывод всех различий между текстами
- Показывает типы ошибок: замена, удаление, вставка
--- 📊 МЕТРИКИ ---
Word Error Rate (WER): 3.45%
Character Error Rate (CER): 1.23%
--------------------
Всего ошибок (S+D+I на уровне слов): 12
- Замены (S): 8
- Удаления (D): 2
- Вставки (I): 2
Всего слов в оригинале: 347
--- 🔍 СПИСОК ОШИБОК (по словам) ---
[ЗАМЕНА] 'александра' -> 'александр'
[УДАЛЕНО] 'конференция'
[ВСТАВЛЕНО] 'а'