Instructions to use SaarAI/Amharic-ASR-v1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use SaarAI/Amharic-ASR-v1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("automatic-speech-recognition", model="SaarAI/Amharic-ASR-v1")# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForCTC processor = AutoProcessor.from_pretrained("SaarAI/Amharic-ASR-v1") model = AutoModelForCTC.from_pretrained("SaarAI/Amharic-ASR-v1", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Amharic-ASR-v1
Amharic-ASR-v1 is an Amharic speech recognition (ASR) model by SaarAI, built for real-world and telephone speech. It has two parts:
- Acoustic model: a 600M-parameter w2v-bert-2.0 CTC model that predicts characters. It starts from the Ethio-ASR Amharic model and is fine-tuned further on about 191k Amharic utterances, with environmental-noise and telecom-channel augmentation. This acoustic model is the best training setup (full data + 10% telecom augmentation) from the TeleASR-Amharic paper.
- Language model: a word 4-gram KenLM model trained on about 200M words of Amharic text. During beam-search decoding (pyctcdecode) it fixes spelling and word-boundary errors made by the acoustic model.
Everything is in this one repo. transformers loads the model, feature
extractor, tokenizer and language model together.
| Developed by | SaarAI |
| Language | Amharic (am, Ge'ez script) |
| Task | Speech recognition (speech → text) |
| Architecture | w2v-bert-2.0 encoder + 1 adapter layer + CTC head (411 character tokens) + KenLM 4-gram beam search |
| Size | 0.61B parameters (acoustic model) + 613 MB language model |
| Input | 16 kHz mono audio |
| Output | Lowercased Amharic text, no punctuation |
| Built on | Ethio-ASR (badrex/Ethio-ASR-amharic) |
| Related paper | TeleASR-Amharic: A Benchmark for Robust Amharic ASR in Realistic Telecommunication Conditions |
| License | CC-BY-4.0 |
🎧 Quick start
pip install transformers torch torchaudio pyctcdecode kenlm # kenlm needs Python <= 3.12
Pipeline (the language model is used automatically)
from transformers import pipeline
asr = pipeline("automatic-speech-recognition",
model="SaarAI/Amharic-ASR-v1",
device=0) # device=-1 for CPU
print(asr("audio.wav")["text"])
# long recordings: chunked inference
print(asr("call_recording.wav", chunk_length_s=20, stride_length_s=4)["text"])
Full control over decoding
import torch, torchaudio
from transformers import AutoModelForCTC, Wav2Vec2ProcessorWithLM
repo = "SaarAI/Amharic-ASR-v1"
processor = Wav2Vec2ProcessorWithLM.from_pretrained(repo)
model = AutoModelForCTC.from_pretrained(repo).eval().to("cuda")
wav, sr = torchaudio.load("audio.wav")
wav = torchaudio.functional.resample(wav.mean(0), sr, 16_000)
inputs = processor(wav.numpy(), sampling_rate=16_000, return_tensors="pt").to("cuda")
with torch.no_grad():
logits = model(**inputs).logits
# beam search with the 4-gram LM (defaults: alpha=0.5, beta=1.5)
text = processor.batch_decode(logits.cpu().numpy(), beam_width=100).text[0]
# no-LM decoding (most likely character per frame): fastest, for comparison
no_lm = processor.tokenizer.batch_decode(logits.argmax(-1))[0]
Decoding a batch on many CPU cores
from multiprocessing import get_context
with get_context("fork").Pool(16) as pool:
texts = processor.batch_decode(logits.cpu().numpy(), pool=pool, beam_width=100).text
When inputs are padded into a batch, trim each item's logits to its real length before decoding, e.g. with
model._get_feat_extract_output_lengths(inputs["attention_mask"].sum(-1)).
📈 Results
Effect of the language model (dev sets)
Same acoustic model; only the decoding differs. WER and CER are computed after lowercasing and removing punctuation.
| Dev set | Utterances | Decoding | WER ↓ | CER ↓ |
|---|---|---|---|---|
FLEURS am_et validation + test |
739 | no LM | 21.83% | 6.92% |
| + 4-gram LM | 18.62% | 6.29% | ||
SaarAI/waxal-amharic-combined validation |
600 | no LM | 23.31% | 9.70% |
| + 4-gram LM | 21.40% | 9.45% |
The LM cuts WER by about 15% (relative) on FLEURS and about 8% on WAXAL, and lowers CER on both. These are the sets the decoder settings were tuned on, so treat the numbers as slightly optimistic.
Example (FLEURS validation):
| Transcript | |
|---|---|
| Reference | … ብሔራዊነት እና ሀገሪቱ … ማህበራዊ እና ፖለቲካዊ ተፅእኖዎች አሉ |
| No LM | … ብሔራዊነትእና ሀገሪቱ … ማህበራዊና ፖለቲካዊ ተጽዕኖች አሉ |
| With LM | … ብሔራዊነት እና ሀገሪቱ … ማህበራዊ እና ፖለቲካዊ ተጽዕኖዎች አሉ |
SaarAI ASR leaderboard (TeleASR-Amharic, WAXAL, AfriSwitch)
The amharic_amh test sets are the
TeleASR-Amharic benchmark: 15,965 Ethio
Telecom-style customer-service utterances (30.63 h). Eight speakers recorded
them, and they are released in seven acoustic and telecom-channel conditions.
waxal_amh (3,420 utterances) and afriswitch_amh (1,229 utterances) are
also part of the
SaarAI ASR leaderboard.
All three models below were run on the full test sets with the same
open_asr_leaderboard pipeline and normaliser, so the numbers are directly
comparable. Amharic-ASR-v1 is the full model with the 4-gram LM
(alpha 0.5, beta 1.5, beam 100). The no LM column is the same acoustic model
with no-LM decoding (SaarAI/03082026-135002-01-aug-full-data).
| Test set | badrex/Ethio-ASR-amharic |
Acoustic model, no LM | Amharic-ASR-v1 (+ LM) |
|---|---|---|---|
| waxal_amh (WAXAL read speech, test) | 23.82% | 27.38% | 25.10% |
| TeleASR-Amharic: clean studio | 38.64% | 27.46% | 21.93% |
| TeleASR-Amharic: ambient room noise | 40.89% | 27.27% | 21.42% |
| TeleASR-Amharic: distant / low-volume mic | 38.69% | 29.13% | 22.30% |
| TeleASR-Amharic: harsh environment | 44.40% | 30.05% | 23.79% |
| TeleASR-Amharic: wideband phone (VoLTE) | 47.53% | 30.89% | 24.38% |
| TeleASR-Amharic: randomized phone channel | 48.97% | 31.62% | 24.83% |
| TeleASR-Amharic: narrowband 2G + packet loss | 77.59% | 56.33% | 48.20% |
| afriswitch_amh (Amharic–English code-switching) | 48.28% | 43.92% | 41.78% |
| Average (9 test sets) | 45.42% | 33.78% | 28.19% |
- The LM lowers WER on every test set: 5.6 points on average (33.78% → 28.19%, about 17% relative), and 5.5–8.1 points on the TeleASR-Amharic conditions.
- Compared with
badrex/Ethio-ASR-amharic, average WER falls from 45.42% to 28.19%. On narrowband 2G + packet loss it falls from 77.59% to 48.20%. - WAXAL read speech is the one exception: there
badrex/Ethio-ASR-amharicis still 1.3 points better. - Amharic-ASR-v1 has the lowest average WER of the 28 models evaluated on all nine Amharic test sets of the leaderboard.
- Speed: with beam search on the CPU, throughput is about 77× real time on one A100 GPU plus a 16-process decoding pool (RTFx 76.6). No-LM decoding is about 120× real time.
These numbers use the leaderboard normaliser. The TeleASR-Amharic paper
normalises text differently (it converts digits to Amharic words), so its
numbers are not directly comparable. For example, it reports 40.57% clean
studio and 79.36% narrowband 2G WER for badrex/Ethio-ASR-amharic.
The model's transcripts for every test set are in
SaarAI/asr-benchmark-outputs
(data/amharic/*__saarai-amharic-asr-v1.jsonl).
🏗️ How it was built
1. Acoustic model
Starting point:
badrex/Ethio-ASR-amharic, the monolingual Amharic w2v-bert-2.0 model from the Ethio-ASR project.Training code: the Ethio-ASR codebase (
scripts/train_model.py), with CTC loss and Ethio-ASR's 411-token character vocabulary (Ge'ez syllables, Ethiopic numerals and punctuation, Latin letters, digits).- learning rate 3e-5, linear schedule, 10% warm-up, bf16
- full encoder fine-tuning with 1 adapter layer
- final checkpoint after about 4.2 epochs, on one A100 80 GB
Training data (
SaarAI/waxal-amharic-combined; Table 2 of the TeleASR-Amharic paper):Source Utterances Hours WaxalNLP (amh) 38,022 189.0 WAXAL auto-labelled (amh), from Ethio-ASR 80,321 398.1 BDU Amharic ASR 32,901 101.0 Common Voice (amh) 563 0.9 Leyu: Gonder dialect 11,339 112.8 Leyu: Wello dialect 10,010 114.7 Leyu: Gojjam dialect 10,095 95.8 Leyu: Shewa dialect 8,180 102.6 Train total 191,431 1,115.0 Validation (WaxalNLP) 2,912 14.0 Telecom-aware augmentation: 10% of training utterances get one pipeline (at most one telecom pipeline per utterance). The pipelines were designed from an analysis of recordings made over the Ethio Telecom network:
- ambient room noise: a low noise floor plus slow volume fluctuation
- distant / low-volume microphone: uniform attenuation
- harsh environment: strong attenuation, heavy noise and fast volume fluctuation
- wideband phone (VoLTE): 16 kHz codec, band-pass filter, compression, noise and 50 Hz hum
- narrowband 2G + packet loss: 8 kHz codec, narrow band-pass, heavy compression, tanh overdrive, heavy noise, hum and 1–3 dropouts
- randomized phone channel, standard and severe variants: parameters are sampled for each utterance, and the severe variant adds 1–5 full or partial dropouts
Gaussian noise and random gain changes are also applied.
Number handling: digits are converted to Amharic words (e.g.
123→አንድ መቶ ሃያ ሶስት) in the training text. Customer-service calls are full of phone numbers, balances and dates.
In the TeleASR-Amharic ablation, this setup (full data + 10% augmentation) beat both data scaling alone and augmentation alone on every degraded condition. On narrowband 2G + packet loss it cut WER from 0.794 to 0.607, a 23.6% relative reduction.
2. Language model
Type: word-level 4-gram KenLM with modified Kneser-Ney smoothing. Pruning is
0 1 1 2: singleton bigrams and trigrams are dropped, and 4-grams seen fewer than 3 times are dropped. Stored as a binary trie.Size: 4.07M unigrams, 15.8M bigrams, 17.4M trigrams, 3.2M 4-grams.
Training text: about 12.3M sentences / 200M words:
Source Sentences HuggingFaceFW/fineweb-2(amh_Ethi, train)8.87M SaarAI/amh-post-training(v1 + v2, train)3.24M SaarAI/waxal-amharic-combined(train transcripts)0.28M wikimedia/wikipedia(20231101.am)0.13M Text normalisation:
- NFC Unicode normalisation and lowercasing
- punctuation and symbols removed, the same way the evaluation normaliser does it
- only characters the acoustic model can output are kept
- sentences that are mostly non-Ge'ez are dropped
- global de-duplication
Test-leakage guard: a sentence was removed if it is identical to, or shares any 8-word sequence with, a sentence in an evaluation or tuning set:
- all TeleASR-Amharic conditions
waxal_amhandafriswitch_amh- the waxal-amharic-combined test split
- FLEURS
am_etvalidation/test
About 7.7k sentences were removed this way.
3. Decoder tuning
The LM weight alpha and word-insertion bonus beta were grid-searched with
beam width 100 on two held-out dev sets (FLEURS am_et validation+test and
waxal-amharic-combined validation). The chosen setting gives the largest mean
relative reduction of 0.5·WER + 0.5·CER across both:
| Parameter | Value |
|---|---|
alpha (LM weight) |
0.5 |
beta (word insertion bonus) |
1.5 |
beam_width |
100 (300 gave no further gain) |
unk_score_offset |
-10.0 |
You can override these at inference time with
processor.batch_decode(..., alpha=..., beta=..., beam_width=...). A 5-gram LM
was also tested and scored the same as the 4-gram, so the smaller 4-gram is
shipped.
📁 Repository contents
| File | Purpose |
|---|---|
model.safetensors, config.json |
w2v-bert-2.0 CTC acoustic model |
preprocessor_config.json |
SeamlessM4T feature extractor (80-dim log-mel, 16 kHz) |
vocab.json, tokenizer_config.json, special_tokens_map.json, added_tokens.json |
CTC character tokenizer |
alphabet.json |
pyctcdecode alphabet (token id → character) |
language_model/amh_4gram.bin |
KenLM 4-gram (binary trie) |
language_model/unigrams.txt |
LM vocabulary (4.07M words) |
language_model/attrs.json |
default decoder settings (alpha, beta, unknown-word offset) |
decoding_config.json |
decoder settings for the SaarAI open_asr_leaderboard kenlm_ctc runner |
alpha_beta.json |
record of the tuned decoder settings |
⚠️ Limitations
- Output format: lowercased text without punctuation. Numbers come out as Amharic words. Add punctuation / inverse text normalisation if you need formatted text such as digits for phone numbers.
- Very poor channels: narrowband 2G audio with packet loss is still hard (48.2% WER with the LM, 56.3% without).
- Code-switching: Amharic–English speech is much harder (41.8% WER on
afriswitch_amh). There is little English in Latin script in the LM text. - Rare words and names: the LM can push uncommon names or new terms
towards more frequent words. Lower
alpha, or use pyctcdecodehotwords, for domain names and terms. - Speed: beam search runs on the CPU, so it is slower than no-LM decoding. Use a multiprocessing pool for batches, or use the tokenizer's no-LM decoding when latency matters most.
- Coverage and bias: the training data covers several dialects (Gonder, Wello, Gojjam, Shewa), but not all Amharic varieties, speaker groups or recording conditions. The TeleASR-Amharic benchmark speakers are Addis Ababa / Shewa only. Accuracy may vary by speaker and domain. See the Ethio-ASR paper for a gender-bias analysis of the base models.
🙏 Acknowledgements
This model is built directly on the Ethio-ASR project. We thank the Ethio-ASR team; their open models, training code and analysis made this work possible:
- Base model:
badrex/Ethio-ASR-amharic - Code: github.com/badrex/Ethio-ASR (training pipeline, character vocabulary, text normalisation, augmentation)
- Paper: Ethio-ASR: Joint Multilingual Speech Recognition and Language Identification for Ethiopian Languages (arXiv:2603.23654)
- Demo: Ethio-ASR multilingual demo
The acoustic model, its training data mix and the telecom augmentation come from the TeleASR-Amharic work (arXiv:2610.26448): HiLCoE School of Computer Science and Technology, GSMA, gheero and Saarland University. We thank Ethio Telecom experts for reviewing the benchmark dialogues, and the gheero contributors who recorded them.
We also thank the creators of the training data and tools:
- Google for WAXAL
- Bahir Dar University for the BDU Amharic speech corpus
- Mozilla Common Voice and the Leyu Amharic dialect project
- Meta AI for w2v-bert-2.0
- Hugging Face for FineWeb-2
- the Wikimedia community for Amharic Wikipedia
- the authors of KenLM and pyctcdecode
📚 Citation
If you use this model, please cite:
@misc{marilign2026teleasramharic,
title = {TeleASR-Amharic: A Benchmark for Robust Amharic ASR in Realistic Telecommunication Conditions},
author = {Dagnachew Mekonnen Marilign and Enrique Molero and Abrham Haile and Louis Powell and Israel Abebe Azime},
year = {2026},
eprint = {2610.26448},
archivePrefix = {arXiv},
primaryClass = {cs.CL},
note = {Accepted to the AACL-IJCNLP 2026 TrustAudio Workshop},
url = {https://arxiv.org/abs/2610.26448}
}
@misc{abdullah2026ethioasr,
title = {Ethio-ASR: Joint Multilingual Speech Recognition and Language Identification for Ethiopian Languages},
author = {Badr M. Abdullah and Israel Abebe Azime and Atnafu Lambebo Tonja and Jesujoba O. Alabi and
Abel Mulat Alemu and Eyob G. Hagos and Bontu Fufa Balcha and Mulubrhan A. Nerea and
Debela Desalegn Yadeta and Dagnachew Mekonnen Marilign and Amanuel Temesgen Fentahun and
Tadesse Kebede and Israel D. Gebru and Michael Melese Woldeyohannis and
Walelign Tewabe Sewunetie and Bernd M{\"o}bius and Dietrich Klakow},
year = {2026},
eprint = {2603.23654},
archivePrefix = {arXiv},
primaryClass = {cs.CL},
url = {https://arxiv.org/abs/2603.23654}
}
- Downloads last month
- 16