CoolFace
Modelpublic

boazsew/Ethio-ASR-w2v-bert-2.0-combined-am-uf

sourceHugging Facecc-by-nc-4.0updated 1mo agoView on Hugging Face
0likes48downloads
Model Card

Ethio-ASR-w2v-bert-2.0-combined-am-uf

Amharic ASR — w2v-BERT-2.0 (600 M) CTC, fine-tuned on WAXAL-Amharic (189.7 h) + snapwre/amharic-speech (18.3 h) for a total of 208 h. Same recipe as boazsew/Ethio-ASR-w2v-bert-2.0-uf but Amharic-only and trained on the combined bundle.

Try the live demo: [boazsew/ethio-asr-combined-amharic-demo](https://huggingface.co/spaces/boazsew/ethio-asr-combined-amharic-demo).

Held-out results (post-processed)

Trained on ↓ / Eval on →WAXAL-amsnapwrecombined
A: WAXAL-am (baseline)25.28 % WER28.57 %25.69 %
B: snapwre only39.03 %20.33 %36.57 %
C: WAXAL + snapwre24.71 %18.32 %23.87 %

This checkpoint is model C. Post-processing = Ge'ez homophone normalisation (ha/sa/a/ts'a families) + Ethiopic + Latin punctuation removal (Section 5.2 of the original Ethio-ASR paper).

Δ vs. WAXAL-only baseline

Eval setΔ WERΔ CER
WAXAL-am test−0.57 pp−0.25 pp
snapwre test−10.25 pp−3.89 pp
combined test−1.82 pp−0.76 pp

C wins every cell. See the full study: combined_dataset_experiment paper.

Training

  • —Base model: facebook/w2v-bert-2.0
  • —Data: badrex/waxalNLP-ethiopic-final (amharic filter) + snapwre/amharic-speech, concatenated split-wise
  • —Effective batch: 32 (per-device 8 × 4 GPUs × 1 grad accum)
  • —Optimiser: AdamW, LR 3e-5, linear warmup 10 %
  • —Precision: bfloat16, gradient checkpointing
  • —max_steps: 8 250 (6 epochs on combined bundle)
  • —Compute: 4× NVIDIA B200 on UF HiPerGator, 3 h 11 m wall-clock
  • —Seed: 42
  • —Frozen: convolutional feature encoder

Usage

python
import librosa, torch
from transformers import AutoProcessor, AutoModelForCTC

MODEL = "boazsew/Ethio-ASR-w2v-bert-2.0-combined-am-uf"
processor = AutoProcessor.from_pretrained(MODEL)
model = AutoModelForCTC.from_pretrained(MODEL, torch_dtype=torch.bfloat16).cuda().eval()

y, _ = librosa.load("your_amharic_clip.wav", sr=16000, mono=True)
inputs = processor(y, sampling_rate=16000, return_tensors="pt", padding=True)
with torch.no_grad():
    logits = model(input_features=inputs["input_features"].cuda().bfloat16(),
                   attention_mask=inputs["attention_mask"].cuda()).logits
print(processor.batch_decode(logits.argmax(-1))[0])

For paper-faithful post-processing (Ge'ez homophone collapse + punctuation removal) see the demo's app.py in the linked Space, or the reproduction repo's slurm_scripts/evaluate_ctc.py.

Citation

@techreport{tulu2026combined,
  author = {Boaz Tulu},
  title  = {Does Mixing snapwre with WAXAL Improve Amharic ASR?
            A matched-step, cross-domain study with w2v-BERT-2.0},
  institution = {University of Florida},
  year = {2026}
}

@article{abdullah2026ethioasr,
  author  = {Abdullah, Badr M. and others},
  title   = {Ethio-ASR: A comparative study of low-resource acoustic
             modeling for five Ethiopian languages},
  journal = {arXiv preprint arXiv:2603.23654},
  year    = {2026}
}