# Kusaal ASR
Speech recognition for **Kusaal** (`kus`, ISO 639-3) — a Gur language spoken by
roughly 350,000 people in Ghana's Upper East Region and adjacent Burkina Faso.
This repository holds the code, notebooks, and documentation behind the Kusaal
ASR dataset and the Whisper-small LoRA model. The heavy artefacts live on
Hugging Face and Kaggle:
| Artefact | Where |
|---|---|
| **Model** — Whisper-small + LoRA | `PrinceAlhassanNasamu/kusaal-whisper-small-lora` |
| **Dataset** — 30,820 clips, 81.7 h | HF · Kaggle |
| **Live demo** (Kusaal tab) | `spaces/PrinceAlhassanNasamu/kusaal-asr` |
| **Quickstart notebook** | Kaggle |
## Results
| Split | Books held out | WER |
|---|---|---|
| val | LUK, PHP, PRO, PSA | **~30.4%** |
Whisper-small (241M) + LoRA (rank 32, `q_proj`/`v_proj`, 1.44% trainable),
2 epochs / 3,074 steps, ~4h14m on a Kaggle T4. Splits are **book-held-out**:
adjacent verses share names and phrasing heavily, so a random clip-level split
would leak lexically and overstate generalisation.
For a cross-corpus reference point: KASA-42
(42-language model, never trained on this corpus) scores 37.9% WER on this
dataset's independent books — see the dataset card for why only some splits are
valid for models trained on `ghana-speech`.
## The dataset
Verse-level clips force-aligned (CTC segmentation) from chapter-level scripture
recordings against the GILLBT Kusaal Bible text, sliced and resampled to 16 kHz
mono 16-bit PCM.
| Split | Clips | Hours | Books |
|---|---|---|---|
| train | 24,597 | 69.33 | 55 |
| val | 4,622 | 8.80 | LUK, PHP, PRO, PSA |
| test | 1,601 | 3.58 | JON, MAT, REV, RUT |
Transcripts are lowercase orthographic Kusaal, including **ŋ ɔ ɛ ʋ**.
```python
from datasets import load_dataset
ds = load_dataset("PrinceAlhassanNasamu/kusaal-asr-dataset")
print(ds["train"][0]["sentence"])
```
## Use the model
```bash
pip install torch transformers peft soundfile
```
```python
import soundfile as sf
import torch
from peft import PeftModel …