Results
Scored with whisper-eval.py on a held-out test split the model never saw
during training (same dataset slice, same seed 42, same 80/10/10 carve).
Table with columns: Metric, Value| Metric | Value |
|---|
| Test WER | 11.45% |
| Test CER | 3.08% |
| Test examples scored | 2000 of 17700 |
| Best per-epoch eval WER | 17.62% |
| Final train loss | 0.01 |
| Steps trained | 26550 |
| Epochs completed | 3.00 |
Checkpoint comparison
Every checkpoint scored on the same test clips, best first.
Table with columns: Checkpoint, WER, CER| Checkpoint | WER | CER |
|---|
checkpoint-26550 | 11.45% | 3.08% |
checkpoint-17700 | 13.40% | 3.54% |
The weights in this repo are the best row.
Training configuration
Table with columns: Parameter, Value| Parameter | Value |
|---|
| Base model | openai/whisper-large-v3 |
| Language / task | nepali / transcribe |
| Epochs | 3.0 |
| Learning rate | 5e-06 |
| LR schedule | linear with 5% warmup ratio |
| Per-device train batch | 1 |
| Grad accumulation steps | 16 |
Data
The training corpus is clean single-speaker studio audio, so expect degraded accuracy
on noisy real-world recordings with background noise, multiple speakers, or strong accents.
Usage
import torchfrom transformers import WhisperForConditionalGeneration, WhisperProcessor model_id = "milanakdj/whisper-large-v3-nepali-final"device = "cuda" if torch.cuda.is_available() else "cpu" processor = WhisperProcessor.from_pretrained(model_id, language="nepali", task="transcribe")model = WhisperForConditionalGeneration.from_pretrained(model_id).to(device) # audio: 1-D float32 numpy array at 16kHzinputs = processor(audio, sampling_rate=16000, return_tensors="pt").to(device)with torch.inference_mode(): ids = model.generate(inputs.input_features, max_new_tokens=225) print(processor.batch_decode(ids, skip_special_tokens=True)[0])