AfriVoices East Africa ASR (2nd-place solution)
# AfriVoices East Africa ASR — 2nd Place Solution
Single 580M **W2v-BERT 2.0 + CTC** model for six East African languages —
Swahili, Kikuyu, Dholuo, Kalenjin, Maasai, Somali — decoded with per-language
5-gram KenLM shallow fusion, deployed to CPU/edge as **CTranslate2 int8**.
**Final result: 0.34819 macro-WER (2nd of 26 teams), AfriVoices East
Africa ASR Hackathon (Kaggle · Digital Umuganda & Maseno CAAI).** Submitted
model: Checkpoint 11000 of a 1-epoch low-LR continued fine-tune of a previously averaged checkpoint, on an external-data-extended mix.
| | |
|---|---|
| **Model** | leophill/w2v-bert-2.0-afrivoices-ea-6l-asr |
| **Edge (CT2 int8 + ONNX)** | leophill/w2v-bert-2.0-afrivoices-ea-6l-asr-int8-edge |
| **Technical report** | `TECHNICAL_REPORT.md` |
| **Hardware validation** | `HARDWARE_VALIDATION_REPORT.md` |
| **Data card** | `DATA_CARD.md` |
| **Transparency note** | `TRANSPARENCY_NOTE.md` |
## Edge compliance
| Requirement | Limit | Measured | Status |
|---|---|---|---|
| Parameters | 30 s) degradation measurement, windowing + stitch
│ ├── eval_slices.py sliced WER/CER by type/dialect/domain, incl. synthetic long-form
│ ├── longform_decode.py canonical decode core: pyctcdecode+KenLM, window, overlap-aware stitch
│ ├── qc_wer_analysis.py error-bucket profiling (merge/split/edit/OOV/deletion/insertion)
│ └── submissions frozen per-language submission CSVs + the merged submission
│
├── ledgers machine-readable exclusion ledgers (one subtree per language w/ external data)
│ ├── Dholuo per-stage drop logs + _reconciliation.txt (raw N → kept N accounts exactly)
│ ├── Kalenjin "
│ └── Kikuyu "
│
├── logs reproducibility artefacts: SLURM stdout/stderr for the shipped training runs
│ ├── Launch_w2v2-Bert_CTC_Finetuning_Part_1_4801063.err
│ ├── Launch_w2v2-Bert_CTC_Finetuning_P …