Распознавание узбекской речи: варианты, точность и подводные камни
Практика3 минРедакция Innovialabs
Коротко
Узбекскую речь распознают облачные API, открытые модели и локальные провайдеры; выбирать нужно по WER на ваших собственных записях звонков, с отдельной проверкой смешанной русско-узбекской речи.
Короткий ответ
Для узбекского языка доступны три группы решений:
- Облачные API крупных платформ — Google Speech-to-Text, Azure Speech и другие, где узбекский указан в списке поддерживаемых языков.
- Открытые модели — например, Whisper от OpenAI и мультиязычные модели семейства wav2vec2/MMS, которые можно запускать на своём сервере и дообучать.
- Локальные провайдеры, которые специализируются на узбекском и обучают модели на местных данных.
Ни одно решение не стоит выбирать по описанию. Качество сильно зависит от ваших записей: телефонная линия, шум, акцент, смешение языков. Решает только тест на реальных данных.
Главные подводные камни
Code-switching. В Узбекистане собеседники постоянно переходят с узбекского на русский внутри одной фразы. Модель, которой задали один язык, начинает искажать слова второго языка или «переводить» их.
Две письменности. Модель может выдать текст латиницей, кириллицей или вперемешку. Для поиска и аналитики это проблема — договоритесь о целевой письменности и нормализуйте результат.
Диалекты и разговорная речь. Ташкентская, ферганская, хорезмская речь заметно различаются. Модели, обученные на дикторском чтении, хуже понимают живой разговор.
Телефонный звук. Записи 8 кГц с сжатием сильно отличаются от студийных. Тестируйте именно на звонках, а не на подкастах.
Имена, бренды, числа. Названия товаров, адреса и суммы ASR ошибается чаще всего, а для бизнеса они самые важные.
Как измерить качество
- Отберите 1–3 часа реальных звонков с разными операторами, клиентами, регионами и уровнем шума.
- Сделайте эталонную расшифровку вручную, по единым правилам: какая письменность, как писать числа, как помечать неразборчивое.
- Посчитайте WER (word error rate — доля ошибок по словам) для каждого кандидата.
- Разбейте результат по сегментам: чисто узбекская речь, чисто русская, смешанная, шумные записи.
- Проверьте бизнес-сущности отдельно: правильно ли распознаны названия продуктов, суммы, номера заказов.
Перед подсчётом WER нормализуйте текст одинаково для эталона и гипотезы — регистр, пунктуация, апострофы:
import re
def normalize(text: str) -> str:
text = text.lower()
text = re.sub(r"[ʻʼ`'‘’]", "’", text)
text = re.sub(r"[^\w\s’]", " ", text)
return " ".join(text.split())
Сам WER можно посчитать готовой библиотекой, например jiwer.
Как улучшить результат
- Подсказки словаря (phrase hints, custom vocabulary) с названиями ваших продуктов, если API это поддерживает.
- Разделение каналов: если АТС пишет оператора и клиента в разные каналы, распознавайте их отдельно.
- Дообучение открытой модели на нескольких десятках часов ваших размеченных звонков.
- Постобработка LLM: исправление очевидных ошибок и приведение к одной письменности. Следите, чтобы модель не «додумывала» содержание.
Как выбрать
| Критерий | Облачный API | Открытая модель | Локальный провайдер |
|---|---|---|---|
| Старт | Быстро | Нужна инфраструктура и GPU | Быстро |
| Данные | Уходят к провайдеру | Остаются у вас | Зависит от договора |
| Дообучение | Ограничено | Полный контроль | По договорённости |