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.

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}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for mohamedmaslouh/anis-transcribe

Quantized
(119)
this model

Datasets used to train mohamedmaslouh/anis-transcribe