Build Nepali speech-to-text with Whisper
Published 12 October 2026 · prices on this page are live
Whisper already understands some Nepali, but not well enough for most products. In our own test, Whisper large-v3 got about one character in four wrong on the FLEURS Nepali test set (a character error rate of 25.6%). After fine-tuning on 10,000 clips of public Nepali speech, about ten hours, the error rate fell to 13.9%: almost half the mistakes gone, trained on a single 16 GB GPU.
Nepali speech data you can use
Check every licence before you train a model you will sell. CC BY asks only for attribution; CC BY-SA also asks you to share changed versions of the dataset itself under the same licence; NC means non-commercial use only.
| Dataset | What it is | Size | Licence |
|---|---|---|---|
| OpenSLR 54, Large Nepali ASR | Read speech, many speakers | About 157,000 clips, roughly 165 hours | CC BY-SA 4.0 |
| AI4Bharat IndicVoices (Nepali) | Mostly natural, unscripted speech | About 106 hours | CC BY 4.0; accept the terms on Hugging Face first |
| AI4Bharat IndicVoices-R (Nepali) | Cleaned, studio-quality speech | About 104 hours | CC BY 4.0; gated the same way |
| Vaani (IISc and ARTPARK) | Spontaneous speech | About 24 hours transcribed | CC BY 4.0; gated |
| Google FLEURS (ne_np) | Read sentences | About 12 hours | CC BY 4.0; keep it for testing |
| Mozilla Common Voice (Nepali) | Volunteer recordings | A few hours | CC0 |
Some Nepali sets, such as OpenSLR 143, are for non-commercial use only. Keep a test set the model never trains on: FLEURS is a good one, because your results can be compared with published ones.
Which GPU to rent
LoRA fine-tuning of Whisper large-v3 fits on a 16 GB card with a small batch and gradient accumulation; our 13.9% run used a 16 GB RTX A4000. A 24 GB card such as the RTX 3090 or RTX 4090 takes bigger batches and finishes sooner, and an A100 is faster still. Today's lowest prices:
| GPU | Memory | USD | INR | NPR |
|---|---|---|---|---|
| RTX A4000 | 16 GB | USD 0.18 | INR 17 | NPR 27 |
| RTX 3090 | 24 GB | USD 0.24 | INR 24 | NPR 37 |
| RTX 4090 | 24 GB | USD 0.63 | INR 61 | NPR 96 |
| A100 SXM4 | 80 GB | USD 0.65 | INR 63 | NPR 99 |
Step by step
- Rent the machine. Pick a 16–24 GB GPU with the PyTorch + JupyterLab software and at least 100 GB of disk: OpenSLR 54 alone is about 9 GB of zip files.
- Install the libraries in a JupyterLab terminal:
pip install transformers datasets peft accelerate evaluate jiwer soundfile librosa - Download the data. OpenSLR 54 comes as 16 zip files, asr_nepali_0.zip to asr_nepali_f.zip, plus utt_spk_text.tsv, which lists each clip's id, speaker and transcript. Each clip is at asr_nepali/data/ followed by the first two characters of its id, then the id with .flac on the end.
- Prepare the model with LoRA, so you train a few million weights instead of all 1.5 billion:
from transformers import WhisperForConditionalGeneration, WhisperProcessor from peft import LoraConfig, get_peft_model processor = WhisperProcessor.from_pretrained("openai/whisper-large-v3", language="nepali", task="transcribe") model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-large-v3", torch_dtype="auto") model = get_peft_model(model, LoraConfig(r=32, lora_alpha=64, lora_dropout=0.05, target_modules=["q_proj", "v_proj"])) model.print_trainable_parameters() - Train with Hugging Face's Seq2SeqTrainer, as in their guide to fine-tuning Whisper for multilingual speech recognition. A learning rate of 1e-4 worked for us; if the loss jumps around, halve it. Save a checkpoint every few hundred steps.
- Pick the best checkpoint by character error rate on your held-out test set, not by training loss.
- Serve it fast. Merge the LoRA weights into the model and convert it with CTranslate2 for faster-whisper, which runs up to four times faster than the original code, and faster still with 8-bit weights.
Phone calls need phone-quality training audio
Phone recordings are narrow-band (8 kHz) and compressed, and a model trained only on clean audio does much worse on them. No public Nepali telephone corpus exists, so simulate one: downsample a share of your clips to 8 kHz, pass them through G.711 μ-law encoding, add a little line noise, and resample them back. In our test, degrading about two thirds of the training clips this way cut the error rate on phone-quality audio from 31.0% to 18.7%, while clean audio still improved to 13.9%.
Quality beats quantity. When we added thousands of noisier, machine-labelled clips, the model got worse, not better: a few thousand clean, correctly transcribed clips beat twice as many doubtful ones.
What it costs
Training time depends on how many clips and steps you run. As a guide, a four-hour session costs, on today's cheapest hosts:
| GPU | Memory | USD | INR | NPR |
|---|---|---|---|---|
| RTX A4000 | 16 GB | USD 0.72 | INR 68 | NPR 108 |
| RTX 3090 | 24 GB | USD 0.96 | INR 96 | NPR 148 |
| RTX 4090 | 24 GB | USD 2.52 | INR 244 | NPR 384 |
Using the finished model is cheap too: Whisper large-v3 transcribes about 100 hours of audio in roughly three hours on an RTX 4090. See speech-to-text on a rented GPU.
Questions
Does Whisper support Nepali out of the box?
Yes. Whisper’s language code for Nepali is "ne", and large-v3 writes it in Devanagari. Accuracy on real-world audio is the problem, and that is what fine-tuning fixes.
How much Nepali audio do I need?
Gains start with a few thousand clips. Our 10,000-clip run, about ten hours of speech, cut the error rate almost in half; more clean audio that sounds like your real users helps further.
Can I sell a model trained on these datasets?
CC BY and CC0 data can be used commercially with attribution, and CC BY-SA asks you to share changed versions of the dataset under the same licence. Non-commercial (NC) sets cannot go into a paid product. This is not legal advice; read each licence.
Should I use Whisper large-v3 or a smaller model?
Start with large-v3 for accuracy. If you need speed on a small GPU, fine-tune whisper-small or whisper-medium the same way: they are faster but make more mistakes.