Downloads · 30 days
47
16% of all-time downloads
mohdali1/whisper-small-balti
whisper-small-balti is a automatic speech recognition model from mohdali1. Use it when you need speech turned into text. It is set up for transformers. The card lists the license as apache-2.0.
First public Automatic Speech Recognition model for Balti, a critically low-resource Tibetic language spoken in Gilgit-Baltistan, Pakistan.
Downloads · 30 days
47
16% of all-time downloads
All-time downloads
288
Public
Parameters
242M
1.9 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors967 MB · 100%
From the Hugging Face model README
First public Automatic Speech Recognition model for Balti, a critically low-resource Tibetic language spoken in Gilgit-Baltistan, Pakistan.
📦 Dataset • 🎧 Live Demo • 💻 GitHub • 📄 Paper
This model is a fine-tuned version of openai/whisper-small for Automatic Speech Recognition (ASR) in the Balti language (bft).
Balti is a Tibetic language with roughly 400,000 speakers, written in Nastaliq (Arabic-based) script. Before this work, no publicly available ASR models or datasets existed for Balti. This model transcribes Balti speech into native Nastaliq text.
| Model | WER (%) | CER (%) |
|---|---|---|
| Whisper-small (zero-shot) | 159.19 | 152.52 |
| Whisper-base (fine-tuned) | 44.54 | 15.61 |
| Whisper-small (fine-tuned, this model) | 26.74 | 8.67 |
Zero-shot WER above 100% indicates hallucination — the model generates words not present in the reference. Fine-tuning on 16.8 hours of Balti speech reduces this to an impressive 26.74% WER and 8.67% CER on the 538-utterance speaker-disjoint validation set.
pip install transformers torch librosa
from transformers import pipeline
asr = pipeline(
"automatic-speech-recognition",
model="mohdali1/whisper-small-balti",
generate_kwargs={"language": "urdu", "task": "transcribe"}
)
result = asr("your_balti_audio.wav")
print(result["text"])
from transformers import WhisperForConditionalGeneration, WhisperProcessor
import torch
import librosa
model_id = "mohdali1/whisper-small-balti"
processor = WhisperProcessor.from_pretrained(
model_id, language="urdu", task="transcribe"
)
model = WhisperForConditionalGeneration.from_pretrained(model_id)
audio, sr = librosa.load("your_balti_audio.wav", sr=16000)
inputs = processor(audio, sampling_rate=16000, return_tensors="pt")
with torch.no_grad():
generated_ids = model.generate(inputs.input_features)
transcription = processor.batch_decode(
generated_ids, skip_special_tokens=True
)[0]
print(transcription)
GroupShuffleSplit on
client_id, seed 42)| Split | Samples | Speakers |
|---|---|---|
| Train | 9,519 | 122 |
| Validation | 538 | 14 |
| Parameter | Value |
|---|---|
| Base model | openai/whisper-small |
| Language token | urdu (closest Nastaliq script in Whisper) |
| Task | transcribe |
| Learning rate | 1e-5 |
| Effective batch size | 16 (8 × 2 gradient accumulation) |
| Max steps | 1,000 |
| Optimizer | AdamW |
| Precision | fp16 |
| Gradient checkpointing | Enabled |
| Hardware | NVIDIA Tesla T4 (Google Colab) |
| Training time | 1h 54m |
| Step | Train Loss | Val Loss | Raw WER (%) |
|---|---|---|---|
| 250 | 0.7905 | 0.4037 | 40.19 |
| 500 | 0.5968 | 0.3208 | 33.37 |
| 750 | 0.4542 | 0.2963 | 31.37 |
| 1000 | 0.4652 | 0.2830 | 30.07 |
Note: The raw training WER at step 1,000 was 30.07%. However, the final normalized evaluation (with punctuation removed) on the speaker-disjoint held-out set yielded the reported 26.74% WER and 8.67% CER, confirming the model generalizes well to unseen speakers.
Estimated using the ML Impact Calculator (Lacoste et al., 2019).
If you use this model or the associated dataset in your research, please cite:
@misc{ali2026baltivoice,
author = {Muhammad Ali},
title = {BaltiVoice: A Speech Corpus and Fine-tuned Whisper ASR System for the Balti Language},
year = {2026},
eprint = {2606.03504},
archivePrefix = {arXiv},
primaryClass = {cs.CL},
url = {https://arxiv.org/abs/2606.03504}
}