dev-ahmedhany/whisper-large-v3-arabic-ft-v3-lora

Model

1

stars

32

commits

1

linked in READMEs

May 2, 2026

updated

arabic
automatic-speech-recognition
lora
model-index
multi-dialect
peft
qlora
safetensors
whisper

README

Whisper-large-v3 — Arabic 4-dialect FT v3 (LoRA adapter)

QLoRA adapter for openai/whisper-large-v3 fine-tuned on 38 hours of dialect-balanced Arabic. The 111 MB adapter file rather than the merged base. Use with peft to load on top of the original Whisper-large-v3, or pull the merged version at whisper-large-v3-arabic-ft-v3 / CT2 int8 at whisper-large-v3-arabic-ft-v3-ct2-int8 for direct inference.

Every checkpoint preserved as a Git revision

This repo is special: every single training save (40+ checkpoints, every 250 steps) is preserved as a Git commit on the main branch. Use revision=<sha> in snapshot_download or from_pretrained to fetch any specific training step.

steprevision SHAavg-4 WER on testnotes
5007d6da5dbad9a33.52%first eval
10009330588e0ab531.90%
15006587814ff6e130.67%first time below 31%
20008cedaf0045aa29.55%first time below 30%
2250c9b4f475b80d28.56%
2500193b269123c928.03%
2750aa8c5d85af1028.05%best MSA (9.78%)
3500e4d40d0a813f27.75%
40006ace7d869a4027.68%
4250a66bd3990a1828.11%best Gulf (39.89%)
4750 ⭐7923fe7bc9b726.63%best avg, recommended for production
5500d06b5408051827.03%best Levantine (29.58%)
5750d849f7bbf51e27.20%

The "main" branch points at the latest checkpoint pushed during training (around step 8250). For the best model, use revision 7923fe7bc9b7 (ckpt-4750).

Headline WER (n=100/dialect, eval at int8/beam=2/threads=8)

50% Casablanca + 50% broadcast for Egyptian/Levantine; 100% Casablanca UAE for Gulf; 100% FLEURS for MSA. Same exact recordings + decoding config used for both rows.

DialectTest compositionZero-shot Whisper-large-v3v3-ft @ ckpt-4750Δ
MSAFLEURS broadcast8.51%10.52%+2.01 pp
Egyptian50 Casablanca + 50 MGB-338.48%23.90%−14.58 pp
Levantine50 Casablanca JO + 50 MASC37.70%30.63%−7.07 pp
GulfCasablanca UAE52.72%41.46%−11.26 pp
avg-434.35%26.63%−7.72 pp

Quickstart with peft

from huggingface_hub import snapshot_download
from peft import PeftModel
from transformers import WhisperForConditionalGeneration, WhisperProcessor
import torch

# Best checkpoint (recommended)
adapter_dir = snapshot_download(
    "dev-ahmedhany/whisper-large-v3-arabic-ft-v3-lora",
    revision="7923fe7bc9b7",  # ckpt-4750 — best avg WER
)

base = WhisperForConditionalGeneration.from_pretrained(
    "openai/whisper-large-v3", torch_dtype=torch.bfloat16
)
proc = WhisperProcessor.from_pretrained("openai/whisper-large-v3", language="arabic", task="transcribe")
model = PeftModel.from_pretrained(base, adapter_dir).to("cuda").eval()

# inference: load audio, pass through processor + model.generate(...)

For continued fine-tuning, load the same adapter and call trainer.train() against your new dataset.

Training recipe

  • Base: openai/whisper-large-v3 (1.55 B params)
  • QLoRA: NF4 + bf16 compute, r=8, α=16, dropout 0.05, target modules q/v/k/out_proj + fc1/fc2
  • Optimizer: paged_adamw_8bit, lr=1e-4, warmup ratio 0.1
  • Effective batch 16 (per-device 4 × grad-accum 4), gradient_checkpointing
  • max_steps=10000, save_steps=250, hub_strategy=every_save (every save pushed here as a Git commit)
  • Training data: ~38 h, 26,817 train / 924 val rows from Casablanca (5 countries) + MGB-3 + cleaned MGB-3 + MASC + Common Voice 18
  • Maghrebi excluded (84.7% zero-shot WER too far gone for QLoRA budget)

Citation

@misc{hany2026whisperarabic,
  title        = {Production-Aware Fine-Tuning of Whisper Variants for Multi-Dialect
                  Arabic ASR: A Cross-Platform CPU Inference Study},
  author       = {Hany, Ahmed},
  year         = {2026},
  howpublished = {Preprint, arXiv (in preparation)},
  url          = {https://github.com/dev-ahmedhany/whisper-arabic-dialects},
}

License

Apache-2.0 (inherits from openai/whisper-large-v3).

Contributors

dev-ahmedhany

32 commits

dev-ahmedhany/whisper-large-v3-arabic-ft-v3-lora

Model

1

stars

32

commits

1

linked in READMEs

May 2, 2026

updated

arabic
automatic-speech-recognition
lora
model-index
multi-dialect
peft
qlora
safetensors
whisper

README

Whisper-large-v3 — Arabic 4-dialect FT v3 (LoRA adapter)

QLoRA adapter for openai/whisper-large-v3 fine-tuned on 38 hours of dialect-balanced Arabic. The 111 MB adapter file rather than the merged base. Use with peft to load on top of the original Whisper-large-v3, or pull the merged version at whisper-large-v3-arabic-ft-v3 / CT2 int8 at whisper-large-v3-arabic-ft-v3-ct2-int8 for direct inference.

Every checkpoint preserved as a Git revision

This repo is special: every single training save (40+ checkpoints, every 250 steps) is preserved as a Git commit on the main branch. Use revision=<sha> in snapshot_download or from_pretrained to fetch any specific training step.

steprevision SHAavg-4 WER on testnotes
5007d6da5dbad9a33.52%first eval
10009330588e0ab531.90%
15006587814ff6e130.67%first time below 31%
20008cedaf0045aa29.55%first time below 30%
2250c9b4f475b80d28.56%
2500193b269123c928.03%
2750aa8c5d85af1028.05%best MSA (9.78%)
3500e4d40d0a813f27.75%
40006ace7d869a4027.68%
4250a66bd3990a1828.11%best Gulf (39.89%)
4750 ⭐7923fe7bc9b726.63%best avg, recommended for production
5500d06b5408051827.03%best Levantine (29.58%)
5750d849f7bbf51e27.20%

The "main" branch points at the latest checkpoint pushed during training (around step 8250). For the best model, use revision 7923fe7bc9b7 (ckpt-4750).

Headline WER (n=100/dialect, eval at int8/beam=2/threads=8)

50% Casablanca + 50% broadcast for Egyptian/Levantine; 100% Casablanca UAE for Gulf; 100% FLEURS for MSA. Same exact recordings + decoding config used for both rows.

DialectTest compositionZero-shot Whisper-large-v3v3-ft @ ckpt-4750Δ
MSAFLEURS broadcast8.51%10.52%+2.01 pp
Egyptian50 Casablanca + 50 MGB-338.48%23.90%−14.58 pp
Levantine50 Casablanca JO + 50 MASC37.70%30.63%−7.07 pp
GulfCasablanca UAE52.72%41.46%−11.26 pp
avg-434.35%26.63%−7.72 pp

Quickstart with peft

from huggingface_hub import snapshot_download
from peft import PeftModel
from transformers import WhisperForConditionalGeneration, WhisperProcessor
import torch

# Best checkpoint (recommended)
adapter_dir = snapshot_download(
    "dev-ahmedhany/whisper-large-v3-arabic-ft-v3-lora",
    revision="7923fe7bc9b7",  # ckpt-4750 — best avg WER
)

base = WhisperForConditionalGeneration.from_pretrained(
    "openai/whisper-large-v3", torch_dtype=torch.bfloat16
)
proc = WhisperProcessor.from_pretrained("openai/whisper-large-v3", language="arabic", task="transcribe")
model = PeftModel.from_pretrained(base, adapter_dir).to("cuda").eval()

# inference: load audio, pass through processor + model.generate(...)

For continued fine-tuning, load the same adapter and call trainer.train() against your new dataset.

Training recipe

  • Base: openai/whisper-large-v3 (1.55 B params)
  • QLoRA: NF4 + bf16 compute, r=8, α=16, dropout 0.05, target modules q/v/k/out_proj + fc1/fc2
  • Optimizer: paged_adamw_8bit, lr=1e-4, warmup ratio 0.1
  • Effective batch 16 (per-device 4 × grad-accum 4), gradient_checkpointing
  • max_steps=10000, save_steps=250, hub_strategy=every_save (every save pushed here as a Git commit)
  • Training data: ~38 h, 26,817 train / 924 val rows from Casablanca (5 countries) + MGB-3 + cleaned MGB-3 + MASC + Common Voice 18
  • Maghrebi excluded (84.7% zero-shot WER too far gone for QLoRA budget)

Citation

@misc{hany2026whisperarabic,
  title        = {Production-Aware Fine-Tuning of Whisper Variants for Multi-Dialect
                  Arabic ASR: A Cross-Platform CPU Inference Study},
  author       = {Hany, Ahmed},
  year         = {2026},
  howpublished = {Preprint, arXiv (in preparation)},
  url          = {https://github.com/dev-ahmedhany/whisper-arabic-dialects},
}

License

Apache-2.0 (inherits from openai/whisper-large-v3).

Contributors

dev-ahmedhany

32 commits