You need to agree to share your contact information to access this model

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

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

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=4 when accuracy is the priority.
  • Use beam_size=2 when 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
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support