First ASR baseline for Kamba (Kikamba), a Kenyan Bantu language. Fine-tunes facebook/w2v-bert-2.0 on 10 hours of speech achieving 28.7% WER. Built for low-resource African language speech research.
# Kamba ASR — Fine-tuning ASR models for Kamba (Kikamba)
> **Kamba (Kikamba)** is a Bantu language spoken by approximately 4 million people in Kenya.
> This repository contains a Wav2Vec-BERT 2.0 baseline and a reusable Whisper Small workflow for Kamba, fine-tuned on 10 hours of speech from the Kamba-ASR-Data-Subset-484H corpus.
---
## Results
| Split | WER ↓ | CER ↓ | Score ↑ |
|---|---|---|---|
| Validation | 28.66% | 8.27% | 81.54% |
**Model:** `facebook/w2v-bert-2.0` · **Training data:** 10 hours · **Epochs:** 10 · **GPU:** T4
---
## Dataset
| Split | Clips | Duration |
|---|---|---|
| Train | 3,673 | 10.00 hours |
| Validation | 500 | ~1.5 hours |
| Test | 500 | ~1.5 hours |
Splits are created by streaming the first 500 clips as test, the next 500 as validation, and the remainder (up to 10 hours) as training — ensuring no overlap. The dataset has only a `train` split on HuggingFace; splits are created locally.
## Reusable benchmark data
Materialize the selected subset once, then point every model at it. This downloads and stores only the selected raw audio and transcripts; it does **not** cache the complete 484-hour corpus or model-specific features.
```shell
python scripts/materialize_kamba_subset.py --output_dir data/kamba_10h_v1
```
The directory contains `dataset/` (self-contained 16 kHz WAV audio and metadata) and `benchmark_manifest.json` (the exact source row indices and selection policy). Keep it outside Git—`data/` is ignored—and back it up to Drive or durable local storage. It is the fixed benchmark for all experiments.
Do not persist Whisper log-Mel features with `Dataset.map`: 30-second Whisper features are nearly 1 MB per clip and create a large model-specific disk cache. The Whisper workflow extracts them only for the current batch.
The sequential split deliberately reproduces the existing Wav2Vec-BERT setup. The source has six speakers, so it is not speaker-disjoint; report that limitation and create a separate, explicitly versione …