Swahili asr
# Swahili ASR — Offline, On-Device (Zindi Challenge Starter)
Colab‑ready baseline + repo skeleton for building a **Kiswahili ASR** system that runs **fully offline** and fits the challenge constraints (**single NVIDIA T4 ≤16 GB**, strong WER, good Real‑Time Factor).
> ⚠️ **Follow Zindi rules.** Use only the datasets provided by the challenge for training and evaluation. Pretrained **open** models are allowed unless the challenge page states otherwise. Do not use paid APIs or private data/services. Always set random seeds.
---
## Quickstart (Colab)
1. Open the notebook: `notebooks/Swahili_ASR_Baseline.ipynb` in Google Colab.
2. Upload/clone this repo into Colab (or mount Google Drive).
3. Place the Zindi audio & metadata into `data/` as instructed in the notebook.
4. Run all cells to:
- Install deps (open‑source only)
- Transcribe with a **faster‑whisper** baseline (int8_float16 on T4)
- Produce `artifacts/submission.csv` with columns: `filename,text`
- Measure **RTFx** (Real‑Time Factor) and peak GPU memory
- (Optional) Evaluate WER on a validation split you create from the provided training set
---
## Repo Layout
```
.
├── config/
│ └── config.yaml # model + decoding defaults
├── data/ # put Zindi-provided data here (not tracked)
│ └── README.md
├── notebooks/
│ └── Swahili_ASR_Baseline.ipynb # Colab-ready notebook
├── scripts/
│ ├── infer_fasterwhisper.py # CLI baseline inference -> submission.csv
│ ├── compute_wer.py # WER scorer (filename-aligned)
│ ├── train_wav2vec2_ctc.py # (skeleton) HF CTC fine-tune (rules-compliant)
│ └── measure_rtf_memory.py # log RTFx and peak GPU usage
├── swahili_asr/
│ ├── __init__.py
│ ├── data.py # dataset loaders (wav paths + labels)
│ ├── text.py # normalization for WER/submission
│ ├── decoding.py # faster-whisper decoder helpers
│ ├── metrics.py # WER compute utils …