Instructions to use idrock/piyola-v2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- NeMo
How to use idrock/piyola-v2 with NeMo:
import nemo.collections.asr as nemo_asr asr_model = nemo_asr.models.ASRModel.from_pretrained("idrock/piyola-v2") transcriptions = asr_model.transcribe(["file.wav"]) - Notebooks
- Google Colab
- Kaggle
parakeet-tdt-uz-finetune
Uzbek automatic speech recognition, fine-tuned from
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:
pip install "nemo_toolkit[asr]"
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:
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 emit2014. - 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-v2encoder.
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, inherited from the
nvidia/parakeet-tdt-0.6b-v2 base model.
Citation
The base model:
@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:
@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}
}
- Downloads last month
- 24
Model tree for idrock/piyola-v2
Base model
nvidia/parakeet-tdt-0.6b-v2Collection including idrock/piyola-v2
Evaluation results
- Test WER on FeruzaSpeech (test)self-reported6.080
- Test CER on FeruzaSpeech (test)self-reported1.050
- Test WER on FLEURS (uz, test)self-reported10.670
- Test CER on FLEURS (uz, test)self-reported2.780