CoolFace
Modelpublic

sumanpaudel1997/nepali-asr-mms-1b

sourceHugging Facecc-by-nc-4.0updated 4mo agoView on Hugging Face
0likes4downloads
Model Card

MMS-1B (Nepali)

Fine-tuned multilingual pre-trained ASR for Nepali — part of the controlled six-model Nepali ASR Benchmark released alongside the paper Comparative Analysis of Multilingual Pre-trained Models for Nepali Automatic Speech Recognition.

Model summary

FieldValue
Base model`facebook/mms-1b-all`
Architecture familyCTC self-supervised (Wav2Vec 2.0)
Parameters965M
LanguageNepali (ne), Devanagari script
Fine-tuning corpusOpenSLR SLR54 (~165 hr, speaker-disjoint 80/10/10 split)
Training duration19.2 h on a single NVIDIA L4 (24 GB VRAM)
Best epoch4 (early-stopped)

Benchmark results

Word and character error rate on the three independent test sets, plus inference Real-Time Factor (RTF) on a single NVIDIA L4 with batch size 1 (lower RTF = faster).

Test setWER (%)CER (%)RTF
OpenSLR SLR54 (in-domain)27.286.060.0214
FLEURS (ne_np)39.8310.660.0230
Common Voice (ne-NP)58.6515.080.0197

WER and CER are computed with `jiwer` after NFC normalisation of both reference and hypothesis. Best in-domain performance during training was WER 26.99% / CER 6.09%.

Note on Common Voice (Nepali). As of 2025, Mozilla distributes Common Voice via the Mozilla Data Collective (MDC) instead of the Hugging Face Hub. The benchmark numbers below were produced on the ne-NP test split of CV 25.0 downloaded from MDC.

Usage

python
# pip install transformers librosa soundfile torch
import torch
import librosa
import unicodedata
from transformers import Wav2Vec2ForCTC, AutoProcessor

REPO = "sumanpaudel1997/nepali-asr-mms-1b"
device = "cuda" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu")

processor = AutoProcessor.from_pretrained(REPO)
model = Wav2Vec2ForCTC.from_pretrained(REPO).to(device).eval()

# Load and resample to 16 kHz mono (the training rate).
audio, _ = librosa.load("your_clip.wav", sr=16000, mono=True)

inputs = processor(audio, sampling_rate=16000, return_tensors="pt", padding=True)
with torch.no_grad():
    logits = model(inputs.input_values.to(device)).logits
pred_ids = torch.argmax(logits, dim=-1)
text = processor.batch_decode(pred_ids)[0]
text = unicodedata.normalize("NFC", text).strip()
print(text)
# Example output (depends on clip): 'नेपालको संविधानले सबै नागरिकलाई समान अधिकार प्रदान गर्दछ।'

Training protocol (summary)

  • —Audio resampled to 16 kHz mono, transcriptions Unicode-normalised to NFC.
  • —Utterances shorter than 0.5 s or longer than 30 s removed.
  • —Family-matched optimiser/scheduler: AdamW, family-specific learning rate, warmup, and decay.
  • —SpecAugment applied to every model.
  • —Early stopping when validation WER stagnated for three consecutive evaluation rounds.

Full hyperparameters and the controlled comparison across all six models are in the paper (see Citation).

Limitations

  • —Fine-tuned on read speech only. Performance on spontaneous conversational speech, code-switched (Nepali–English / Hindi) speech, and dialectal variation is out of scope for this release.
  • —No external language model is used during decoding — reported numbers reflect acoustic-model performance only. Shallow fusion / n-best rescoring with a Nepali LM is expected to deliver additional gains, especially on noisy audio.
  • —Crowd-sourced Common Voice (~48 % WER for the best model in the suite) remains the largest open problem; this checkpoint is no exception.

License

Released under CC-BY-NC-4.0 — research/non-commercial use, attribution required. The licences of the source base model (linked above) and of the fine-tuning datasets (OpenSLR SLR54, FLEURS, Common Voice) apply on top of this restriction. For commercial use, contact the authors.

Acknowledgements

M.Sc. (Data Science) thesis carried out at the School of Mathematical Sciences, Institute of Science and Technology, Tribhuvan University, Kathmandu, Nepal, under the supervision of Asst. Prof. Sarbin Sayami (Central Department of Computer Science and Information Technology). Thanks to the open-source teams behind Wav2Vec 2.0, Whisper, MMS, IndicWav2Vec, and NVIDIA NeMo for the publicly released base checkpoints, and to OpenSLR, Google FLEURS, and Mozilla Common Voice for the source corpora.