Skip to content

sh1man/differ

Repository files navigation

ASR Differ - Инструмент для оценки качества распознавания речи

Инструмент для сравнения эталонного текста с результатом автоматического распознавания речи (ASR) с расчетом метрик WER, CER и детальным анализом ошибок.

Доступно:

  • 🐍 Python CLI скрипт
  • 🚀 FastAPI REST API сервер

Установка

# Основные зависимости
uv sync

# С dev зависимостями (для тестирования)
uv sync --all-extras

Использование

1. CLI версия (Python скрипт)

Базовое использование

python main.py

1. FastAPI REST API сервер

Запуск сервера

# Запуск с uvicorn
uvicorn app:app --reload --host 0.0.0.0 --port 8000

# Или через Python
python app.py

Сервер будет доступен на http://localhost:8000

Документация API

После запуска сервера:

Endpoints

GET /

Информация о API

GET /health

Проверка работоспособности сервиса

POST /compare

Сравнение эталонного и 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

curl -X POST "http://localhost:8000/compare" \
  -H "Content-Type: application/json" \
  -d '{
    "reference_text": "всем добрый день у нас 2024 год",
    "hypothesis_text": "Всем добрый день. У нас две тысячи двадцать четвёртый год."
  }'

Пример использования с Python

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%}")

3. Тестирование

Запуск тестов с pytest

# Установите dev зависимости если еще не установили
uv sync --all-extras

# Запустите тесты
pytest test_app.py -v

Запуск локальных тестов

python test_app.py

Этот скрипт запустит набор тестов без pytest и покажет результаты в консоли.

Что делает инструмент

  1. Нормализация чисел (Пока что не работает):

    • Преобразует все цифры в единый текстовый формат
    • Корректно обрабатывает телефонные номера ("8 800 200" → "восемь восемьсот двести")
    • Преобразует большие числа ("2200000" → "два миллиона двести тысяч")
  2. Предобработка текста:

    • Приведение к нижнему регистру
    • Замена "ё" на "е"
    • Удаление пунктуации
    • Нормализация пробелов
  3. Расчет метрик:

    • WER (Word Error Rate) - процент ошибок на уровне слов
    • CER (Character Error Rate) - процент ошибок на уровне символов
    • Подсчет замен (S), удалений (D) и вставок (I)
  4. Визуализация отличий (только CLI):

    • Построчный вывод всех различий между текстами
    • Показывает типы ошибок: замена, удаление, вставка

Пример вывода (CLI)

--- 📊 МЕТРИКИ ---
Word Error Rate (WER): 3.45%
Character Error Rate (CER): 1.23%
--------------------
Всего ошибок (S+D+I на уровне слов): 12
  - Замены (S):     8
  - Удаления (D):   2
  - Вставки (I):    2
Всего слов в оригинале: 347

--- 🔍 СПИСОК ОШИБОК (по словам) ---
  [ЗАМЕНА]  'александра' -> 'александр'
  [УДАЛЕНО] 'конференция'
  [ВСТАВЛЕНО] 'а'

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published