Instructions to use nur-dev/kk-ru-asr-tdt-accuracy with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- NeMo
How to use nur-dev/kk-ru-asr-tdt-accuracy with NeMo:
import nemo.collections.asr as nemo_asr asr_model = nemo_asr.models.ASRModel.from_pretrained("nur-dev/kk-ru-asr-tdt-accuracy") transcriptions = asr_model.transcribe(["file.wav"]) - Notebooks
- Google Colab
- Kaggle
KK/RU ASR TDT Accuracy
Accuracy-focused Kazakh and Russian ASR/STT model packaged as a NeMo .nemo checkpoint.
This model is intended for high-quality offline or server-side transcription where accuracy is prioritized over minimum latency.
Files
kk_ru_asr_tdt_accuracy.nemo- NeMo ASR checkpoint.examples/offline_asr.py- batch/file transcription example.examples/serve_fastapi.py- minimal HTTP service example.metadata/eval.json- evaluation summary.
Model Characteristics
- Task: automatic speech recognition / speech-to-text.
- Languages: Kazakh (
kk) and Russian (ru). - Format: NVIDIA NeMo
.nemo. - Decoder: RNNT/TDT.
- Recommended decoding for best accuracy: RNNT beam search with beam size 4.
- Fast decoding option: RNNT greedy or beam size 2.
- Input audio: mono 16 kHz PCM WAV or another format supported by your NeMo audio stack.
This is not a TTS model, not a diarization model, and not a cache-aware streaming checkpoint.
Evaluation
WER/CER on held-out local evaluation sets:
| Decode | Set | Overall WER | Overall CER | KK WER | RU WER | RTF |
|---|---|---|---|---|---|---|
| Greedy | clean | 3.321% | 0.680% | 2.351% | 5.719% | 0.0019 |
| Greedy | original/noisy | 10.549% | 6.481% | 13.221% | 5.719% | 0.0020 |
| Beam 2 | clean | 3.257% | 0.656% | 2.308% | 5.602% | 0.0047 |
| Beam 2 | original/noisy | 10.468% | 6.454% | 13.156% | 5.607% | 0.0048 |
| Beam 4 | clean | 3.197% | 0.644% | 2.229% | 5.588% | 0.0121 |
| Beam 4 | original/noisy | 10.430% | 6.443% | 13.107% | 5.588% | 0.0121 |
Recommended deployment default:
- Use
beam_size=4when accuracy is the priority. - Use
beam_size=2when latency/cost matters. - Use greedy only for maximum throughput.
Install
Use an environment with NVIDIA NeMo ASR support and CUDA-enabled PyTorch.
pip install "nemo_toolkit[asr]" huggingface_hub soundfile fastapi uvicorn python-multipart
Download
from huggingface_hub import hf_hub_download
model_path = hf_hub_download(
repo_id="nur-dev/kk-ru-asr-tdt-accuracy",
filename="kk_ru_asr_tdt_accuracy.nemo",
token=True,
)
print(model_path)
Offline Inference
python examples/offline_asr.py \
--model kk_ru_asr_tdt_accuracy.nemo \
--audio /path/to/audio.wav \
--strategy beam \
--beam-size 4
Python:
from nemo.collections.asr.models import EncDecHybridRNNTCTCBPEModel
from omegaconf import OmegaConf
model = EncDecHybridRNNTCTCBPEModel.restore_from("kk_ru_asr_tdt_accuracy.nemo")
model.freeze()
decoding_cfg = OmegaConf.create(OmegaConf.to_container(model.cfg.decoding, resolve=True))
decoding_cfg.strategy = "beam"
decoding_cfg.beam.beam_size = 4
decoding_cfg.beam.return_best_hypothesis = True
model.change_decoding_strategy(decoding_cfg=decoding_cfg, decoder_type="rnnt")
text = model.transcribe(["/path/to/audio.wav"], batch_size=1, return_hypotheses=False)[0]
print(text)
Serve With FastAPI
MODEL_PATH=kk_ru_asr_tdt_accuracy.nemo \
ASR_STRATEGY=beam \
ASR_BEAM_SIZE=4 \
uvicorn examples.serve_fastapi:app --host 0.0.0.0 --port 8000
Request:
curl -X POST "http://localhost:8000/transcribe" \
-F "file=@/path/to/audio.wav"
Response:
{"text": "..."}
Best Practices
- Resample incoming audio to mono 16 kHz before inference.
- Use beam size 4 for final transcription.
- Use beam size 2 or greedy for interactive previews.
- Batch multiple files for throughput-oriented jobs.
- Do not use this checkpoint as a diarizer; combine it with a separate diarization model for speaker labels.
- For audio with many speakers or heavy overlap, use diarization and segment-level transcription before merging the final transcript.
Evaluation (independently measured)
Held-out public test sets, measured directly โ not self-reported (seed 42, uniform multilingual-Whisper normalization). FLEURS test = 500 utterances/language; ISSAI KSC2 test = 1000 utterances (in-domain Kazakh, spanning crowd/parliament/podcasts/radio/talkshow).
| Test set | Lang | WER (%) | CER (%) |
|---|---|---|---|
FLEURS kk_kz |
kk | 11.48 | 6.04 |
FLEURS ru_ru |
ru | 12.75 | 6.99 |
FLEURS en_us |
en | 100.47 | 90.47 |
| ISSAI KSC2 | kk | 9.75 | 3.50 |
Macro WER (kk/ru/en): 41.57% (unweighted mean; penalises models that do not cover all three languages).
Note. The card reports author clean-set KK 2.35 / RU 5.72. On held-out data: FLEURS kk 11.48 and KSC2 9.75 โ still the best Kazakh in this account and robust across broadcast domains. It has no English: English audio is transcribed as Cyrillic phonetics, so EN WER exceeds 100%.
License & commercial use
Non-commercial use only (CC BY-NC 4.0). For commercial licensing or other inquiries, please reach out to the author, Nurgali Kadyrbek, on LinkedIn: https://www.linkedin.com/in/nurgali-kadyrbek-504260231/
- Downloads last month
- 12