Fine-tuning Whisper for Pashto ASR: strategies and scale
Organizations: Independent Researcher.
Abstract
Pashto is absent from Whisper's pre-training corpus despite being one of CommonVoice's largest language collections, leaving off-the-shelf models unusable: all Whisper sizes output Arabic, Dari, or Urdu script on Pashto audio, achieving word error rates above 100%. We compare four fine-tuning strategies for whisper-base on CommonVoice Pashto v20: vanilla full fine-tuning, LoRA (rank 64), frozen-encoder (2/6 layers), and multistage Urdu-to-Pashto transfer. We extend vanilla fine-tuning to whisper-small and whisper-large-v3-turbo on CommonVoice Pashto v24 (113 hours). Vanilla fine-tuning achieves WER 21.22% on CV20, outperforming LoRA by 33.36 pp, frozen-encoder by 14.76 pp, and Urdu transfer by 44.56 pp. Frozen-encoder fine-tuning degrades performance on whisper-base (6 encoder layers): layer-function separation does not hold at this depth, and freezing removes a third of trainable capacity. Urdu-to-Pashto transfer fails due to an unverified intermediate checkpoint, phonological mismatch, and insufficient training. On CV24, whisper-small achieves WER 24.89% (2.24 pp over whisper-base at 3.3x parameters); whisper-large-v3-turbo achieves 23.37% (a further 1.52 pp). Diminishing returns indicate whisper-small is the practical optimum at 113 hours. Online augmentation provides 7.25 pp WER benefit over matched training. Error analysis identifies word-final suffix confusion (masculine -ay vs. feminine -a) and retroflex substitutions involving the Pashto-unique consonant /ts/ as dominant failure modes. Fine-tuned checkpoints and evaluation scripts are released on HuggingFace.
Figures & tables
| Split | Samples | Approx. duration | Notes |
|---|---|---|---|
| Train | 49,870 | ~57.7h | Validated + train splits combined; offline augmented (5 types, p=0.7) |
| Test | 2,800 | ~3.2h | Held out; never used in training or model selection |
| Split | Samples | Approx. duration | Notes |
|---|---|---|---|
| train | 79,089 | ~94.3h | Combined with dev for training |
| dev | 13,791 | ~19.1h | Combined with train for training |
| train+dev (training set) | 92,880 | ~113.4h | Used as training set in exp_008, 008b, 009, 010 |
| test | 13,791 | ~20.7h | Held out; never used in training or model selection |
| Component | Version / details |
|---|---|
| Python | 3.10 |
| PyTorch | 2.x (CUDA 12) |
| Transformers | HuggingFace transformers ≥4.40 |
| PEFT | HuggingFace peft (LoRA adapters, exp_002) |
| Datasets | HuggingFace datasets ≥2.18; streaming mode for exp_010 |
| Audiomentations | Speed perturbation and noise injection (CV24 online augmentation) |
| Strategy | Experiment | Trainable params | WER norm. (%) | ∆ vs vanilla (pp) | WER ortho. (%) | CER (%) | Eval loss |
|---|---|---|---|---|---|---|---|
| Zero-shot (pre-trained) | — | 0 | >100 (CV24) [1] | — | — | — | — |
| Vanilla full fine-tuning | exp_001 | 74.4M (100%) | 21.22 | — | 22.56 | 8.52 | 0.0281 |
| Frozen 2/6 encoder layers | exp_003 | ~56M (~75%) | 35.98 | +14.76 | 38.81 | 13.30 | 0.1331 |
| LoRA r=64 | exp_002 | 2.36M (3.15%) | 54.58 | +33.36 | 57.77 | 17.21 | 0.5780 |
| Multistage Urdu→Pashto | exp_004 | 74.4M (100%) | 65.78 | +44.56 | 68.67 | 21.63 | 0.3947 |
| exp_008 (with aug) | exp_008b_low_wer (no aug) | exp_008b (no aug) | |
|---|---|---|---|
| Comparison type | — | Matched (clean) | Confounded |
| Augmentation | speed + noise (p=0.7) | none | none |
| Learning rate | 5e-5 | 5e-5 ✓ | 1e-4 ✗ |
| Eff. batch size | 32 | 32 ✓ | 64 ✗ |
| Precision | BF16 | BF16 ✓ | FP32 ✗ |
| WER norm. (%) | 27.13 | 34.38 | 28.63 |
| Model | Experiment | Parameters | Zero-shot WER (%) | WER norm. (%) | ∆ WER (pp) per 3.3× params | WER ortho. (%) | CER (%) | Eval loss | Convergence |
|---|---|---|---|---|---|---|---|---|---|
| Whisper Base | exp_008 | 74.4M | 171.4 | 27.13 | — | 30.12 | 8.79 | 0.3305 | Step 11K (stable) |
| Whisper Small | exp_009 | 244M | 120.4 | 24.89 | −2.24 pp | 27.73 | 8.08 | 0.3974 | Step 8.5K / epoch 5.85 (stable) |
| Whisper Turbo | exp_010 | 809M | 110.2 | 23.37 | −1.52 pp | 26.77 | 7.64 | 0.3113 | Step 5K / epoch ~11 (non-monotonic) |
| Step | WER norm. (%) | WER ortho. (%) | CER (%) | Val loss |
|---|---|---|---|---|
| 500 | 55.57 | 59.11 | 17.06 | 0.5502 |
| 1,000 | 44.35 | 47.62 | 14.60 | 0.3793 |
| 1,500 | 41.76 | 44.23 | 16.55 | 0.2431 |
| 2,000 | 33.06 | 35.49 | 11.55 | 0.1512 |
| 2,500 | 29.61 | 31.84 | 10.62 | 0.1045 |
| 3,000 | 30.10 | 32.14 | 11.49 | 0.0754 |
| Step | WER norm. (%) | CER (%) | Val loss |
|---|---|---|---|
| 500 | 89.30 | 30.27 | 1.3775 |
| 1,000 | 79.15 | 25.80 | 1.0647 |
| 1,500 | 71.86 | 22.96 | 0.8929 |
| 2,000 | 68.29 | 20.94 | 0.8104 |
| 2,500 | 65.48 | 20.16 | 0.7594 |
| 3,000 | 63.33 | 19.53 | 0.7234 |
| Step | WER norm. (%) | WER ortho. (%) | CER (%) | Val loss |
|---|---|---|---|---|
| 500 | 70.30 | 73.11 | 21.40 | 0.7780 |
| 1,000 | 56.78 | 60.01 | 17.53 | 0.5469 |
| 1,500 | 48.26 | 51.83 | 15.05 | 0.4300 |
| 2,000 | 44.12 | 47.60 | 14.23 | 0.3588 |
| 2,500 | 40.77 | 44.21 | 13.08 | 0.3044 |
| 3,000 | 39.03 | 42.33 | 12.97 | 0.2580 |
| Step | WER norm. (%) | WER ortho. (%) | CER (%) | Val loss |
|---|---|---|---|---|
| 500 | 95.41 | 95.74 | 33.62 | 1.5195 |
| 1,000 | 89.32 | 90.28 | 30.37 | 0.9330 |
| 1,500 | 82.66 | 84.30 | 27.01 | 0.7431 |
| 2,000 | 79.38 | 81.34 | 26.09 | 0.6501 |
| 2,500 | 76.05 | 78.33 | 24.60 | 0.5907 |
| 3,000 | 74.33 | 76.70 | 24.35 | 0.5492 |
| Step | WER norm. (%) | WER ortho. (%) | CER (%) | Val loss |
|---|---|---|---|---|
| 1,000 | 48.33 | 51.33 | 15.64 | 0.5443 |
| 2,000 | 39.72 | 42.66 | 13.28 | 0.4493 |
| 3,000 | 34.29 | 37.29 | 11.07 | 0.3916 |
| 4,000 | 32.85 | 35.81 | 11.14 | 0.3619 |
| 5,000 | 31.02 | 34.05 | 10.47 | 0.3424 |
| 6,000 | 29.88 | 32.83 | 10.02 | 0.3367 |
| Step | WER norm. (%) | WER ortho. (%) | CER (%) | Val loss |
|---|---|---|---|---|
| 500 | 42.95 | 46.03 | 14.74 | 0.4664 |
| 1,000 | 31.48 | 34.42 | 10.16 | 0.3749 |
| 1,500 | 29.41 | 32.36 | 9.46 | 0.3455 |
| 2,000 | 28.44 | 31.32 | 9.19 | 0.3298 |
| 2,500 | 27.15 | 30.21 | 8.95 | 0.3074 |
| 3,000 | 26.17 | 28.91 | 8.57 | 0.3126 |
| Step | WER norm. (%) | CER (%) | Val loss | LR |
|---|---|---|---|---|
| 500 | 32.95 | 9.91 | 0.4038 | 8.60e-6 |
| 1,000 | 30.43 | 9.84 | 0.3546 | 1.72e-5 |
| 1,500 | 28.00 | 9.01 | 0.3326 | 1.94e-5 |
| 2,000 | 30.79 | 11.11 | 0.3208 | 1.84e-5 |
| 2,500 | 25.69 | 8.34 | 0.3155 | 1.74e-5 |
| 3,000 | 24.95 | 8.20 | 0.3015 | 1.65e-5 |
| Model | WER (sample) | Substitutions | Deletions | Insertions | S% of ref words | D% | I% |
|---|---|---|---|---|---|---|---|
| exp_001 (base, CV20) | 20.30% | 123 / 867 | 24 / 867 | 29 / 867 | 14.2% | 2.8% | 3.3% |
| exp_009 (small, CV24) | 24.42% | 148 / 778 | 20 / 778 | 22 / 778 | 19.0% | 2.6% | 2.8% |
Automatic Speech Recognition
Automatic speech recognition converts spoken language into text across speakers, languages, domains, and recording conditions.
See all 459 papers