Modeldan foydalanish uchun ruxsat soʻrash

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Ushbu modeldan foydalanish muallif ruxsati bilan beriladi. Iltimos, quyidagi maʼlumotlarni toʻldiring — soʻrovingiz koʻrib chiqilgach, model fayllari sizga ochiladi.

Log in or Sign Up to review the conditions and access this model content.

Oʻzbekcha streaming nutqni tanish modeli — tinish belgilari bilan

Oʻzbek tili (lotin yozuvi) uchun real vaqtda ishlaydigan nutqni matnga aylantirish (STT/ASR) modeli. Matnni tinish belgilari bilan (. , ?) chiqaradi. Model ONNX formatida, sherpa-onnx kutubxonasi bilan ishlatiladi.

assalomu alaykum hammaga. ovoz, video yaxshi borayotgan boʻlsa, plyus qoʻyib yuborsanglar tekshirib olamiz, keyin boshlaymiz.

WER: 17,74 % (IT mavzusidagi nutq) · 18,10 % (yangiliklar) · 19,78 % (umumiy) — soʻzlar boʻyicha

  • Tinish belgilari: nuqta, vergul va soʻroq belgisini model oʻzi qoʻyadi — alohida model kerak emas
  • Streaming: odam gapirayotgan paytda matn paydo boʻlib boradi, kechikish ≈ 320 ms
  • Tez: bitta CPU yadrosida real vaqtdan 25 barobar tez (RTF 0,04), 4 ta yadroda 32 barobar (int8)
  • Yengil: ~70 MB (int8) — kompyuter, server, Android, iOS va brauzerda (WebAssembly) ishlaydi
  • Koʻp diktorli: ~400 soatlik tabiiy oʻzbekcha YouTube nutqi asosida oʻqitilgan (IT, yangiliklar, podkastlar)

Natijalar

Soʻzlarni tanish

Test qismi WER (soʻz xatosi)
IT mavzusidagi nutq 17,74 %
Yangiliklar 18,10 %
Umumiy 19,78 %

Tinish belgilari hisobga olinmaydi (salom, = salom). Tinish belgilari bilan hisoblanganda (salom, ≠ salom) umumiy WER — 26,34 %.

Tinish belgilari

Belgi Precision (qoʻyilganining toʻgʻriligi) Recall (topilgani) F1
Nuqta . 76,9 % 72,3 % 74,5 %
Soʻroq ? 75,7 % 59,3 % 66,5 %
Vergul , 67,3 % 56,0 % 61,1 %

Natijalar real vaqt (streaming) rejimida, 320 ms kechikish bilan olingan. Dev va test qismlari xuddi shu YouTube manbalaridan tasodifiy ajratilgan (diktorlar boʻyicha ajratilmagan). Boshqa sohalarda (telefon qoʻngʻiroqlari, shovqinli audio, oʻqilgan matn) natija farq qilishi mumkin.

Tezlik

int8 model, Intel Core i9-14900K, GPU'siz, 10,8 daqiqalik audio (60 ta fayl), audio 100 ms li boʻlaklarda uzatilgan:

CPU oqimlari (num_threads) RTF Real vaqtdan 100 ms audioni qayta ishlash (oʻrtacha / p95)
1 0,040 25 barobar tez 3,8 ms / 12,9 ms
2 0,034 29 barobar tez 3,3 ms / 10,9 ms
4 0,032 32 barobar tez 3,0 ms / 10,2 ms
  • RTF (real time factor) = hisoblash vaqti ÷ audio davomiyligi. RTF 0,04 da 1 daqiqalik audio ~2,4 soniyada qayta ishlanadi.
  • Model xotiraga ~1,6 soniyada yuklanadi.
  • Natijalar CPU'ga bogʻliq: oddiyroq protsessorlarda yoki telefonlarda sekinroq boʻladi.

Fayllar

Fayl Tavsif
encoder-epoch-35-avg-10-chunk-16-left-128.int8.onnx Encoder — modelning asosiy qismi, audioni "eshitadi"
decoder-epoch-35-avg-10-chunk-16-left-128.int8.onnx Decoder — yozilgan matnni eslab turadi
joiner-epoch-35-avg-10-chunk-16-left-128.int8.onnx Joiner — ikkalasini birlashtirib, keyingi tokenni tanlaydi
tokens.txt 500 ta token roʻyxati (tinish belgilari ham alohida token)

Ishlatish uchun 3 ta ONNX fayl va tokens.txt kerak.

Har bir ONNX faylning ikki varianti bor:

  • .int8.onnx (~70 MB) — CPU uchun: kichikroq va tezroq. Koʻp hollarda shuni ishlating.
  • .onnx (fp32, ~265 MB) — GPU uchun (provider="cuda"); int8 GPU'da samarali ishlamaydi.

Ishlatish (Python)

pip install sherpa-onnx soundfile numpy
import numpy as np
import sherpa_onnx
import soundfile as sf

name = "epoch-35-avg-10-chunk-16-left-128.int8.onnx"
recognizer = sherpa_onnx.OnlineRecognizer.from_transducer(
    encoder=f"encoder-{name}",
    decoder=f"decoder-{name}",
    joiner=f"joiner-{name}",
    tokens="tokens.txt",
    num_threads=4,
    sample_rate=16000,
    feature_dim=80,
    decoding_method="greedy_search",
)

audio, sr = sf.read("audio.wav", dtype="float32", always_2d=True)
audio = audio[:, 0]                       # bitta kanal; istalgan chastota avtomatik 16 kHz ga oʻtkaziladi

stream = recognizer.create_stream()
chunk = sr // 10                          # mikrofondagidek, har safar 100 ms dan uzatamiz
for i in range(0, len(audio), chunk):
    stream.accept_waveform(sr, audio[i:i + chunk])
    while recognizer.is_ready(stream):
        recognizer.decode_stream(stream)
    print("\r" + recognizer.get_result(stream), end="")   # oraliq natija

stream.accept_waveform(sr, np.zeros(sr // 2, dtype=np.float32))   # oxirgi soʻzlar chiqishi uchun
stream.input_finished()
while recognizer.is_ready(stream):
    recognizer.decode_stream(stream)
print("\r" + recognizer.get_result(stream))

Mikrofon bilan ishlatish: sounddevice.InputStream(samplerate=16000) orqali 100 ms li boʻlaklarni oʻqib, xuddi shu tarzda uzating. enable_endpoint_detection=True qoʻshsangiz, matn pauzalarda gaplarga boʻlinadi.

Natija koʻrinishi

  • Kichik harflar bilan, tinish belgilari: . , ? (! nuqta, : va ; vergul sifatida oʻrganilgan)
  • Bosh harf kerak boʻlsa — gap boshida va . / ? dan keyin oddiy qoida bilan qoʻyish mumkin
  • oʻ, gʻ va tutuq belgisi uchun U+02BB ʻ belgisi ishlatiladi
  • Raqamlar soʻz bilan yoziladi (yigirma besh), raqam koʻrinishida emas

Cheklovlar

  • Vergul eng qiyin belgi (F1 61 %): model ba'zan vergulni tushirib qoldiradi.
  • Jonli suhbat va shevalarda (masalan, Toshkent shevasidagi podkastlar) WER yuqoriroq — taxminan 25 %.
  • Faqat YouTube nutqida oʻqitilgan: telefon (8 kHz), juda shovqinli yoki uzoqdan yozilgan audioda sifat pasayadi.
  • Raqamli gaplar traindan chiqarilgan, shuning uchun sana, summa va raqamlar kamroq aniqlik bilan taniladi.
  • Nutqdagi ruscha va inglizcha soʻzlar faqat transkripsiyalarda uchragan darajada taniladi.
  • Faqat lotin yozuvi; kirill yozuvidagi oʻzbekcha qoʻllab-quvvatlanmaydi.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Evaluation results

  • Test WER, soʻzlar (streaming, 320 ms, greedy) on Oʻzbekcha YouTube nutqi (it + news + podcasts), test qismi
    self-reported
    19.780
  • Test WER, tinish belgilari bilan (streaming, 320 ms, greedy) on Oʻzbekcha YouTube nutqi (it + news + podcasts), test qismi
    self-reported
    26.340