Anis Transcribe 1.0
Speech recognition for Egyptian Arabic dictation with English terms kept in English letters, small enough to run on a phone. It writes speech like "عايزك تعمل الـ deploy على الـ server" exactly that way: Arabic in Arabic letters, English terms in Latin letters, numbers as digits. It is the model behind the local mode of the Anis dictation app.
- Model page with all the charts: https://maslooh.com/ai/anis-transcribe
- Code, training and benchmark: https://github.com/MohamedMaslooh/anis-transcribe
- Author: Mohamed Maslooh (in Arabic: محمد مصلوح, written with ص, not س)
Read this first: it is a personal model
Anis Transcribe 1.0 was fine-tuned on its author's own voice (32 h of his dictations, about 10% of the training audio), and every test clip below is his voice. On that voice it is very good. On other speakers it is not yet good: it has not been trained on large general data, and other speakers get 43-66% WER without a dictionary. Think of it as a strong recipe and a starting point for training on your own voice, not as a general Egyptian ASR model.
Results (author's voice)
133 Egyptian Arabic dictation clips with English terms (99 real dictations + 34 read sentences, 4,404 words), one pooled WER:
| System | WER % ↓ | English terms kept ↑ | Runs |
|---|---|---|---|
| Gemini 3.1 Flash-Lite | 9.6 | 77% | cloud |
| Anis Transcribe 1.0 (with the dictionary) | 15.9 | 85% | local, 325M params |
| GPT-audio-mini | 18.7 | 81% | cloud |
| Qwen 3.8 Omni Flash | 18.7 | 86% | cloud |
| Gemini 3.5 Transcribe | 19.0 | 19% | cloud |
| QwenCleo-ASR (Egyptian Qwen3-ASR 1.7B) | 20.7 | 65% | local |
| Whisper large-v3 | 31.0 | 11% | local |
This ONNX file:
- Accuracy: greedy decoding, with no dictionary, gives 18.7 WER on the 99 dictations. The 15.9 above uses the author's personal dictionary, which is not published.
- Speed: 50x real time on 4 CPU threads of a desktop CPU.
- Size and loading: loads in under a second, with about 1.4 GB of process memory.
Files
| File | What |
|---|---|
anis-transcribe-1.0-int8.onnx |
The whole model in one graph (audio encoder with the LoRA merged + CTC reader), int8 MatMul weights, 303 MB. Input features (1, frames, 128 log-mel), output log_probs (1, steps, 80). Opens in ONNX Runtime 1.22+ (CPU), including Android. |
vocab.json |
The 80 CTC symbols (index 0 = blank). |
preprocessor_config.json |
The audio feature extractor (Gemma 4 audio, 16 kHz, 128 mel bins). |
numwords.py |
Rule-based spoken numbers → digits (Egyptian Arabic and English). |
transcribe.py |
A complete example: audio file → text. |
Use
pip install onnxruntime "transformers>=5.19" soundfile numpy
python transcribe.py recording.wav
from transcribe import AnisTranscribe, read16k
model = AnisTranscribe(threads=4)
print(model(read16k("recording.wav")))
Audio is processed in 25 s windows. Greedy CTC is shown here. A word n-gram dictionary with pyctcdecode
(beam 64, alpha 0.5, beta 1.0) lowers WER further. The code to build one from your own text is in the GitHub
repository (training/build_lm.py).
How it was made
- Encoder: the audio encoder of Google's EmbeddingGemma 2 (the Gemma 4 audio tower, 304.8M), adapted with LoRA r=32.
- Reader: a 20M-parameter transformer with a CTC head that spells Arabic letters, Latin letters and digits.
- Training: three stages on one consumer GPU.
| Stage | Data added | Hours | Pooled WER |
|---|---|---|---|
| 0.0 | Doctors' medical lectures | 25 | 29.8 |
| 0.4 | Public Egyptian and code-switched Arabic corpora | 281 | 22.4 |
| 1.0 | The author's own dictations | 32 | 15.9 |
Where the idea came from: Embedding Gemma Transcribe by haku. It showed that EmbeddingGemma 2's audio encoder, kept as it is, becomes a fast on-device English transcriber when only a small reader is trained on top. Anis Transcribe takes that idea to Egyptian Arabic with English terms. Its reader is CTC over characters instead of a nearest-word lookup, and it adds a LoRA on the encoder.
Training data
No training data is released with this model; only the public datasets below are linked.
| Dataset | Hours used | Licence (from the dataset card) |
|---|---|---|
| ehabnegm/masri-podcast-300h-egyptian-tts | 132.8 | CC BY-NC 4.0 |
| ehabnegm/100-hour-Egyption-dataset-single-speaker | 67.8 | CC BY-NC 4.0 |
| ismaeeelxd/Egyptian-Arabic-Lectures | 30.2 | MIT |
| MohamedRashad/arabic-english-code-switching | 15.6 | GPL (as stated on the card) |
| MGB-3 Egyptian adaptation set (ArabicSpeech/MGB-3; Ali et al., ASRU 2017) | 4.4 | research use (MGB challenge terms) |
| Doctors' medical lectures | 25.2 | private, not released |
| The author's own dictations | 32.4 | private, not released |
Thanks to the authors of these datasets. Because two of them are CC BY-NC 4.0 and MGB-3 is for research, the weights are released for non-commercial use only.
Licence
- The model weights in this repository: CC BY-NC 4.0. You may use and share them for non-commercial purposes only, with attribution to Mohamed Maslooh. The non-commercial terms follow from the training data (see the table above).
- The encoder: it is derived from Google's EmbeddingGemma 2, which Google releases under Apache 2.0. This project is independent and is not affiliated with or endorsed by Google.
- Commercial use: contact the author.
Limitations
- Tuned to one speaker. It is weak on other voices for now (see the top of this card).
- Short dictation only. It is weak on long, noisy, multi-speaker audio.
- Spelling counts as error. WER counts Egyptian spelling variants (برضه / برضو, "الـ" / "ال") as errors. Folding those lowers every system by 2-5 points without changing the order.
- Not for clinical use. It is not validated for clinical documentation. Read the text before using it.
Citation
@misc{maslooh2026anistranscribe,
title = {Anis Transcribe: Fast Local Dictation for Egyptian Arabic with English Terms},
author = {Maslooh, Mohamed},
year = {2026},
url = {https://huggingface.co/mohamedmaslouh/anis-transcribe}
}
Model tree for mohamedmaslouh/anis-transcribe
Base model
google/embeddinggemma-2