Downloads · 30 days
14
3% of all-time downloads
Amassu/whisper-small-darija
whisper-small-darija is a machine learning model from Amassu. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
Fine-tuned OpenAI Whisper Small for Moroccan Darija speech recognition, trained on the DODa audio dataset. This is the owned ML component of the Multilingual Smart Airport Wayfinding Assistant (Master IT 2026).
Downloads · 30 days
14
3% of all-time downloads
All-time downloads
509
Public
Parameters
242M
967 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors967 MB · 100%
From the Hugging Face model README
whisper-small-darija (DODa fine-tune)Fine-tuned OpenAI Whisper Small for Moroccan Darija speech recognition, trained on the DODa audio dataset. This is the owned ML component of the Multilingual Smart Airport Wayfinding Assistant (Master IT 2026).
Hub repository: Oussamawork/whisper-small-darija
Base model: openai/whisper-small
Training config: config/doda_darija.yaml · Reproduce: notebooks/finetune_whisper_colab.ipynb
Whisper has no dedicated Darija language token; Darija audio is handled under
the arabic token with task=transcribe. Out-of-the-box whisper-small
transcribes Moroccan Darija poorly (wrong script/language on many clips).
This checkpoint is fine-tuned on ~9h46m of parallel Darija speech/text from DODa
using the Arabic-script column darija_Arab_new.
arabic · Task: transcribe| Field | Value |
|---|---|
| Dataset | atlasia/DODa-audio-dataset |
| Size | 12,743 clips (~9h46m); 22 rows with empty darija_Arab_new dropped |
| Text column | darija_Arab_new (Arabic script) |
| Train/eval split | No Hub eval split → 90/10 carve from train, grouped by sentence (no transcript leakage across parallel recordings) |
| Train clips | ~11,462 |
| Eval clips | 1,259 |
| Hyperparameter | Value |
|---|---|
| Base checkpoint | openai/whisper-small |
| Optimizer LR | 1e-5 |
| Warmup steps | 300 |
| Max steps | 3000 |
| Batch size (train / eval) | 16 / 8 |
| FP16 | yes |
| Gradient checkpointing | yes |
| Eval / save every | 300 steps |
| Best checkpoint | lowest eval WER (load_best_model_at_end) |
| Seed | 42 |
Hardware: Google Colab T4 (16 GB) · Wall time: ~3h 23min
cd asr_finetuning
python -m src.train --config config/doda_darija.yaml
Held-out DODa eval split (1,259 samples). Metrics via jiwer (WER/CER reported
as percentages).
| Model | WER ↓ | CER ↓ |
|---|---|---|
Base openai/whisper-small | 108.18% | 63.76% |
| Fine-tuned (this checkpoint) | 28.75% | 9.63% |
| Δ (absolute) | −79.43 pp | −54.13 pp |
| Step | WER | CER |
|---|---|---|
| 300 | 45.43% | 15.67% |
| 600 | 36.50% | 12.17% |
| 900 | 33.13% | 11.81% |
| 1200 | 31.35% | 10.60% |
| 1500 | 30.13% | 10.09% |
| 3000 (final) | 28.75% | 9.63% |
Final metrics are also written to outputs/whisper-small-doda-darija/final_metrics.txt
after training.
from src.transcribe import WhisperTranscriber
stt = WhisperTranscriber("Oussamawork/whisper-small-darija") # or local path
text = stt.transcribe("clip.wav")
import torch
from transformers import WhisperForConditionalGeneration, WhisperProcessor
model_id = "Oussamawork/whisper-small-darija"
processor = WhisperProcessor.from_pretrained(model_id, language="arabic", task="transcribe")
model = WhisperForConditionalGeneration.from_pretrained(model_id).to("cuda" if torch.cuda.is_available() else "cpu")
# ... feature extraction + model.generate (see src/transcribe.py)
python -m src.transcribe --model.name Oussamawork/whisper-small-darija --audio clip.wav
darija_Arab_new), not Arabizi.arabic for Darija; Darija vs MSA is not
disambiguated at the token level.@misc{whisper-small-darija-2026,
title = {whisper-small fine-tuned on DODa for Moroccan Darija ASR},
author = {Oussamawork},
year = {2026},
url = {https://huggingface.co/Oussamawork/whisper-small-darija}
}