metadata
license: mit
language:
- ar
- en
tags:
- speech
- asr
- automatic-speech-recognition
- ctc
- conformer
- egyptian-arabic
- code-switching
- arabic
- audio
- pytorch
library_name: metro-asr
pipeline_tag: automatic-speech-recognition
datasets:
- AlaaSamir/custom-egy-tts
- OmarAhmedSobhy/egyption-with-emotion-dataset
- MightyStudent/Egyptian-ASR-MGB-3
- MAdel121/arabic-egy-cleaned
- MAdel121/Continuation-egy-for-ultravox-v1
- Raniahossam33/Egyptian_TTS3RS
- ahmedbasemdev/egyptain-tts-dataset
- MohamedRashad/arabic-english-code-switching
- librispeech_asr
metrics:
- wer
- cer
model-index:
- name: Metro-ASR Small
results:
- task:
type: automatic-speech-recognition
name: Speech Recognition
dataset:
type: custom
name: Egyptian Arabic + Code-Switching Test Set
config: all
split: test
metrics:
- type: wer
value: 46.85
name: WER (All)
- type: cer
value: 28.41
name: CER (All)
- type: wer
value: 37.24
name: WER (Arabic)
- type: cer
value: 17.45
name: CER (Arabic)
- type: wer
value: 36.32
name: WER (Code-Switching)
- type: cer
value: 17.44
name: CER (Code-Switching)
Metro-ASR Small (61M)
Non-Autoregressive CTC Speech Recognition for Egyptian Arabic + Code-Switching
Model Description
Metro-ASR Small is a 61M parameter non-autoregressive CTC-based ASR model built on a modern Conformer encoder. It is specifically designed for Egyptian Arabic (العامية المصرية) with native Arabic-English code-switching support.
Architecture
| Component | Details |
|---|---|
| Encoder | Conformer (12 layers, d_model=384, 6 heads) |
| Position Encoding | RoPE (Rotary Position Embeddings) |
| Feed-Forward | SwiGLU (Macaron-style dual FFN) |
| Normalization | RMSNorm (Pre-norm) |
| Convolution | SE-Gated Depthwise Separable (kernel=31) |
| Regularization | Stochastic Depth (rate=0.05) |
| Auxiliary Loss | Intermediate CTC at layer 6 |
| Tokenizer | BPE (SentencePiece, vocab=5000) |
| Decoding | CTC Greedy / Beam Search + KenLM |
| Parameters | 61.6M |
Performance
| Split | WER (%) | CER (%) |
|---|---|---|
| All | 46.85 | 28.41 |
| Arabic Only | 37.24 | 17.45 |
| Code-Switching | 36.32 | 17.44 |
Speed: RTF ~0.002 on CPU (500x faster than real-time)
Usage
Install
pip install metro-asr
Quick Start
from metro_asr import MetroASREngine
engine = MetroASREngine.from_pretrained("small") # Auto-downloads this model
result = engine.transcribe("audio.wav")
print(result.text)
With Language Model (Beam Search)
engine = MetroASREngine.from_pretrained(
"small",
lm_path="lm_5gram.bin", # Download from this repo
beam_width=100,
lm_alpha=0.5,
lm_beta=5.0,
)
result = engine.transcribe("audio.wav", beam_search=True)
print(result.text)
Batch Transcription
results = engine.transcribe_batch(["audio1.wav", "audio2.wav", "audio3.wav"])
for r in results:
print(f"{r.text} (RTF={r.rtf:.4f})")
Files in this Repository
| File | Description | Size |
|---|---|---|
model.pt |
Model checkpoint (weights + optimizer state) | ~706MB |
config.yaml |
Model architecture configuration | <1KB |
bpe.model |
SentencePiece BPE tokenizer model | ~200KB |
bpe.vocab |
BPE vocabulary file | ~100KB |
lm_5gram.bin |
KenLM 5-gram language model (optional) | ~6GB |
Training
Trained on a combination of open-source Egyptian Arabic datasets and custom YouTube data:
- Audio data: 130K+ samples from 8 datasets + YouTube Egyptian Arabic content
- Text data: 1.9M Egyptian sentences for LM training
- Training: 440K steps, batch size 32, 4x gradient accumulation, AdamW + Cosine LR
- Hardware: Single GPU training
Limitations
- Optimized for Egyptian Arabic dialect; MSA and other dialects may have higher error rates
- Code-switching support is Arabic-English only
- Best performance on audio 0.5s-30s in duration
- The language model significantly improves accuracy but adds ~6GB to download
Citation
@software{metro-asr-2025,
title = {Metro-ASR: Non-Autoregressive CTC-based ASR for Egyptian Arabic and Code-Switching},
author = {Mohammed Aly},
year = {2025},
url = {https://github.com/mohammedaly22/Metro-ASR}
}
License
MIT