--- license: cc-by-4.0 language: - uz library_name: nemo pipeline_tag: automatic-speech-recognition base_model: nvidia/parakeet-tdt-0.6b-v2 tags: - automatic-speech-recognition - speech - audio - asr - nemo - parakeet - tdt - fastconformer - uzbek metrics: - wer - cer model-index: - name: parakeet-tdt-uz-finetune results: - task: type: automatic-speech-recognition name: Automatic Speech Recognition dataset: name: FeruzaSpeech (test) type: k2speech/FeruzaSpeech args: uz metrics: - type: wer value: 6.08 name: Test WER - type: cer value: 1.05 name: Test CER - task: type: automatic-speech-recognition name: Automatic Speech Recognition dataset: name: FLEURS (uz, test) type: google/fleurs args: uz_uz metrics: - type: wer value: 10.67 name: Test WER - type: cer value: 2.78 name: Test CER --- # parakeet-tdt-uz-finetune Uzbek automatic speech recognition, fine-tuned from [`nvidia/parakeet-tdt-0.6b-v2`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2) (0.6B-parameter FastConformer encoder with a Token-and-Duration Transducer head). The English head and tokenizer of the base model are replaced with a purpose-built Uzbek SentencePiece BPE-1024 tokenizer, and the whole model is then fine-tuned for Uzbek speech. - **Language:** Uzbek (Latin script) - **Sample rate:** 16 kHz mono - **Architecture:** FastConformer encoder (608M) + RNNT/TDT decoder (7.2M) + joint (1.7M) — 617M parameters total - **Vocabulary:** 1024 SentencePiece BPE tokens - **Decoding:** greedy batched TDT (durations `[0, 1, 2, 3, 4]`) ## Results All numbers are greedy TDT decoding, **no language model**, no rescoring. Reference and hypothesis text are normalized identically (lowercase, unified apostrophe, punctuation stripped). ### Across benchmarks | Benchmark | Utterances | WER | CER | |---|---:|---:|---:| | **FeruzaSpeech** (test) | 672 | **6.08 %** | **1.05 %** | | **FLEURS** (uz, test) | 658 | **10.67 %** | **2.78 %** | | uzbek-speech-corpus (test) | 3,184 | 11.86 % | 3.22 % | | Omnilingual (test) | 252 | 25.57 % | 10.10 % | The spread is the point: **~6 % on clean studio read speech, ~11 % on crowdsourced read speech, ~26 % on spontaneous/noisy audio.** Pick the row that matches your audio, not the best one. FLEURS is the most useful single number for comparing against other published Uzbek ASR systems. ### Comparison against the base model The base checkpoint is English-only, so it cannot transcribe Uzbek at all — it maps Uzbek phonetics onto English subwords. Measured on the same evaluation set, same decoding: | Model | Test WER | Test CER | |---|---:|---:| | `nvidia/parakeet-tdt-0.6b-v2` (base, zero-shot) | 105.37 % | 64.67 % | | **`idrock/parakeet-tdt-uz-finetune`** | **12.89 %** | **3.80 %** | Base-model WER exceeds 100 % because it inserts more words than the reference contains. For a sense of what that looks like: ``` REF: shu o'rinda odam emassiz hayvonsiz desam qo'polligim uchun ranjiysiz BASE: Shurunda Odami Masas Haivanses Desam Kopaligim Uchundran Jesus. OURS: shu o'rinda odam emassiz hayvonsiz desam qo'polligim uchun ranjiysiz ``` ## Usage Requires [NeMo](https://github.com/NVIDIA/NeMo): ```bash pip install "nemo_toolkit[asr]" ``` ```python from huggingface_hub import hf_hub_download from nemo.collections.asr.models import EncDecRNNTBPEModel path = hf_hub_download("idrock/parakeet-tdt-uz-finetune", "parakeet-tdt-uz-finetune.nemo") model = EncDecRNNTBPEModel.restore_from(path) model.eval() hyps = model.transcribe(["audio.wav"], batch_size=8) print(hyps[0].text) ``` Audio must be **16 kHz mono**. Resample first if yours is not: ```bash ffmpeg -i input.mp3 -ar 16000 -ac 1 audio.wav ``` Long files should be chunked — the model was trained on clips of **0.1–20 s** and has not been tuned for long-form decoding. ## Limitations - **Latin script only.** The model does not output Cyrillic Uzbek. - **No punctuation or casing.** Output is lowercase and unpunctuated. The apostrophe (as in `bo'lgan`, `o'sha`) is part of the vocabulary and is produced. - **No digits.** The vocabulary is exactly `a-z`, apostrophe and space. Numbers are produced as words if at all; the model can never emit `2014`. - **Short-form audio.** Trained on 0.1–20 s clips. FeruzaSpeech utterances beyond 20 s showed no meaningful penalty, but that was clean single-speaker read audio — chunk long or multi-speaker recordings rather than relying on this. - **Narrowband/telephony audio is out of domain.** Training audio is wideband 16 kHz. 8 kHz telephony upsampled to 16 kHz (energy cutoff at ~3.4 kHz) degrades badly and is not represented in any number above. Fine-tuning on telephony-band data is required for call-center use. - **Domain skew.** The model performs best on read/crowdsourced speech. Spontaneous, noisy, far-field, or heavily accented speech will degrade — the 25.6 % WER on the Omnilingual slice illustrates this. - **No language model.** Numbers above are greedy decoding; an external LM or beam search would likely improve them. - Inherits the biases and failure modes of the `parakeet-tdt-0.6b-v2` encoder. ## Repository contents | File | Purpose | |---|---| | `parakeet-tdt-uz-finetune.nemo` | the fine-tuned model (load with `EncDecRNNTBPEModel.restore_from`) | | `model_config.yaml` | model config extracted from the `.nemo`, for inspection | | `tokenizer/` | SentencePiece BPE-1024 model and vocabulary | ## License [CC-BY-4.0](https://spdx.org/licenses/CC-BY-4.0.html), inherited from the `nvidia/parakeet-tdt-0.6b-v2` base model. ## Citation The base model: ```bibtex @misc{parakeet-tdt-0.6b-v2, title = {Parakeet TDT 0.6B V2}, author = {NVIDIA NeMo Team}, year = {2025}, url = {https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2} } ``` The TDT decoder: ```bibtex @inproceedings{xu2023efficient, title = {Efficient Sequence Transduction by Jointly Predicting Tokens and Durations}, author = {Xu, Hainan and Jia, Fei and Majumdar, Somshubra and Huang, He and Watanabe, Shinji and Ginsburg, Boris}, booktitle = {ICML}, year = {2023} } ```