Multilingual Automatic Speech Recognition (ASR) system for African languages built for the Google WAXAL ASR Challenge on Zindi. Features fine-tuned speech models evaluated on WER and CER metrics.
# Google WAXAL ASR Challenge
Multilingual ASR for **Lingala (`lin`)**, **Shona (`sna`)**, and **Luganda (`lug`)**,
built on the WAXAL dataset
(Google Research + Makerere University, University of Ghana, Digital Umuganda).
Zindi challenge:
zindi.africa
Evaluation: `0.5 * WER + 0.5 * CER` (lower is better). Phase 1 = HF train/val/test
splits, leaderboard-visible. Phase 2 = a held-out unseen audio set released ~1
week before close — no labels, no language metadata, final ranking is Phase 2 only.
Inspired by the modeling approach from a past project,
afrivoices-asr-hack
(Whisper-small fine-tuning for 6 East African languages) — same eval-harness
shape, same "prepare data / train / infer" separation, adapted here for
WAXAL's languages and Zindi's submission format.
## Why this repo runs on Colab, not locally
This machine has **no GPU and 3.8GB RAM** — not enough to load even a
1B-parameter ASR model comfortably, let alone fine-tune one. So:
- **Local (this repo):** eval harness, CSV/text-only data exploration
(`notebooks/00_data_exploration.py` — no audio, no GPU needed), scaffolding.
- **Colab (`notebooks/01_...ipynb`):** everything that needs a GPU or audio —
loading WaxalNLP audio, model inference, submission generation.
- **Zindi**: the community `zindi` pip package needs interactive
username/password login, not a real token/API — Zindi doesn't currently
expose a public developer API. Given that, submission is a deliberate
**manual step**: the notebook downloads `submission.csv` to your machine
and you upload it by hand on the Zindi Submissions tab. No third-party
package touches your Zindi credentials anywhere in this pipeline.
- **Hugging Face**: `google/WaxalNLP` isn't gated, but the dataset card
recommends logging in (`huggingface_hub.login()`) — that prompt runs
inside Colab too, same reasoning.
## Data — verified against the actual downloaded files
Files come from the Zindi "Data" tab (`Train.csv`, `Test …