Nawah-ASR-60M-Max-Arabic
A 62.7M-parameter Parakeet-style Token-and-Duration Transducer for Arabic speech recognition β FastConformer encoder, TDT objective β trained from scratch on 8,723 hours of Arabic speech, with no pretrained encoder and no external language model.
On the six test sets of the Open Universal Arabic ASR Leaderboard it reaches 29.86 average WER / 13.13 CER, which places it 4th of 38 evaluated systems.
Every model ranked above it is between 2.35B and 7B parameters or a commercial API. It is 37Γ smaller than the 2.35B system at rank 1, and it is ahead of omniASR_LLM_1B and 3B, Qwen3-Omni-30B-A3B, Voxtral-Small-24B, gemma-4-E4B, Qwen3-ASR-1.7B and every Whisper model.
Leaderboard
Averages are recomputed over these same six sets for every model, so the ordering is consistent. Baseline figures are the leaderboard's published numbers.
| # | Model | Avg WER | Avg CER | Params |
|---|---|---|---|---|
| 1 | audarai/Audar-ASR-V1-Turbo | 23.17 | 9.22 | 2.35B |
| 2 | CohereLabs/cohere-transcribe-arabic-07-2026 | 25.87 | 11.80 | β |
| 3 | omnilingual-asr/omniASR_LLM_7B | 28.32 | 12.52 | 7B |
| 4 | Nawah-ASR-60M-Max-Arabic (this model) | 29.86 | 13.13 | 62.7M |
| 5 | omnilingual-asr/omniASR_LLM_1B | 29.95 | 13.40 | 1B |
| 6 | omnilingual-asr/omniASR_LLM_3B | 29.96 | 13.77 | 3B |
| 7 | CohereLabs/cohere-transcribe-03-2026 | 30.67 | 16.37 | β |
| 8 | Qwen/Qwen3-Omni-30B-A3B-Instruct | 30.71 | 13.66 | 30B |
| 9 | audarai/Audar-ASR-V1-Flash | 32.04 | 13.65 | β |
| 10 | nvidia-conformer-ctc-large-arabic (lm) | 32.91 | 13.85 | 0.12B |
| 12 | google/gemma-4-E4B-it | 32.98 | 13.71 | 4B |
| 13 | Qwen/Qwen3-ASR-1.7B | 33.69 | 12.33 | 1.7B |
| 14 | mistralai/Voxtral-Small-24B-2507 | 34.46 | 15.29 | 24B |
| 18 | openai/whisper-large-v3 | 36.86 | 17.21 | 1.55B |
| 23 | openai/whisper-large-v3-turbo | 40.05 | 18.87 | 0.81B |
| 35 | openai/whisper-small | 55.13 | 21.68 | 244M |
| 38 | speechbrain/asr-wav2vec2-commonvoice-14-ar | 65.74 | 30.93 | β |
Full table in eval/ranking.json.
Per-set results
Scored with the leaderboard's own eval.py β its normalize_arabic_text and NeMo's
word_error_rate β unmodified. Every clip in every set was decoded; nothing was skipped.
| Test set | Clips | Hours | WER | CER |
|---|---|---|---|---|
| MASC clean | 8,612 | 10.49 | 13.04 | 5.37 |
| MGB-2 | 5,365 | 9.58 | 18.15 | 8.01 |
| Common Voice 18 | 10,471 | 12.66 | 20.69 | 7.87 |
| MASC noisy | 9,394 | 8.92 | 26.45 | 11.10 |
| SADA | 6,186 | 10.75 | 41.95 | 19.41 |
| Casablanca | 6,818 | 7.85 | 58.86 | 27.02 |
On MASC noisy (26.45) and MASC clean (13.04) it is ahead of the 2.35B system at rank 1 (28.57 and 18.00).
Usage
import soundfile as sf
from tokenizers import Tokenizer
import parakeet_model as P # ships in this repo
tok = Tokenizer.from_file("tokenizer_bpe1024.json")
model = P.load("nawah_asr_60m_max_arabic.pt") # dims are read from the checkpoint
wav, sr = sf.read("clip.wav", dtype="float32") # 16 kHz mono
print(P.transcribe(model, wav, tok))
Needs torch, torchaudio (for the kaldi fbank) and tokenizers. Nothing else β the three model
files here are self-contained.
No 30-second window
Whisper-family models chunk audio into 30-second pieces. This encoder uses clamped relative position bias, so it transcribes any length in a single pass. Measured on 2 CPU threads:
| Audio | Time | Realtime factor |
|---|---|---|
| 5.7 s clip | 0.08 s | 69Γ |
| 8.3 s clip | 0.09 s | 90Γ |
| 1 minute | 0.9 s | 69Γ |
| 5 minutes | 11.6 s | 26Γ |
The full 46,846-clip leaderboard sweep runs on CPU alone in about 27 minutes.
Architecture
| encoder | FastConformer, 17 layers, d=384, 6 heads, FFN 1536, Γ8 subsampling β 12.5 Hz |
| predictor | 2-layer LSTM, 320 hidden |
| joiner | additive, 384 β 1029 (1024 tokens + 5 duration classes) |
| objective | TDT, durations [0,1,2,3,4], auxiliary CTC head at weight 0.2 |
| tokenizer | 1024-unit Metaspace BPE, blank at id 0 |
| training | 8,723 hours of Arabic speech, 1 epoch, 290,606 steps on one RTX 5090 |
| stability | zero non-finite losses across the run |
The published checkpoint is the final step, which was also the best by held-out WER β the curve was still improving when the schedule ended.
Files
| File | |
|---|---|
nawah_asr_60m_max_arabic.pt |
weights (240 MB fp32) |
parakeet_model.py |
model definition, load() and transcribe() |
fastconformer.py |
the encoder |
parakeet_data.py |
fbank features and encoder-length arithmetic |
tokenizer_bpe1024.json |
the 1024-unit BPE this model was trained with |
config.json |
descriptive architecture config |
eval/leaderboard_results.json |
per-set numbers |
eval/ranking.json |
the recomputed board |
eval/lb_norm.py, eval/run_bench.py |
the scorer and runner, to reproduce the table |
config.json is descriptive only. It is not a transformers config β
AutoModel.from_pretrained will not load this model; use parakeet_model.load(), which reads the
encoder width, depth, head count, FFN size and vocabulary out of the checkpoint rather than
trusting defaults.
Limitations
- Maghrebi is the weakest region by a wide margin: Casablanca 58.86 against 13.04 on MASC clean. It is better than Voxtral-Small-24B and every Whisper model on that set, but the gap to the best system (47.02) is real.
- SADA at 41.95 is the second weakest. Saudi broadcast speech with heavy overlap and code-switching remains hard at this size.
- No punctuation or diacritics. Targets were stripped of tashkeel, and the model emits neither.
- Mixed orthography. The model writes ta-marbuta (Ψ©) in some words and ha (Ω) in others. The leaderboard normalizer does not fold the two, so every such mismatch scores as a word error; folding Ψ©βΩ on both sides is worth about 0.7 WER on the six-set average. The numbers above are the unfolded, as-scored figures.
- Single-pass long audio is lightly tested. Training spans were capped at 20 s. Long audio decodes in one pass and the timings above are real, but accuracy on multi-minute input has not been measured against a reference.
- Test-set overlap was measured acoustically, not assumed. All 1,793,600 training clips were fingerprinted (32-band log-mel at a 50 ms hop, Haitsma-Kalker) against all 46,846 clips of the six test sets, with each candidate confirmed by bit-error rate over the aligned overlap. The detector was validated at 97.9% recall on test clips re-encoded at 48 kbps Opus with 0/960 false positives. Result: 39 training clips (0.0022%) matched a test clip, touching 0.14% of MASC clean, 0.10% of MASC noisy, 0.09% of Casablanca, 0.05% of SADA and 0.00% of MGB-2 and Common Voice 18. Re-scoring with every implicated test clip removed moves the six-set average by β0.007 WER (29.86 β 29.85), so the figures above stand to two decimals. The method does not detect time-scaled, pitch-shifted or differently-cut versions of the same material.
- Downloads last month
- 63