CoolFace
Datasetpublic

Professor/kinyarwanda-speech-data

Kinyarwanda Speech Data (Pooled) A ~989.9-hour pooled Kinyarwanda speech corpus, combining two independently-sourced datasets into one consistently-formatted corpus for speech modeling (TTS / ASR). Part of the AfroNet multi-language TTS data effort — sibling release to the Yoruba/Hausa/Igbo pools, but sourced entirely differently: DSN African Voices, NaijaVoices, and WAXAL (the sources behind the other three languages) don't cover Kinyarwanda at all. Sources… See the full description on the dataset page: https://huggingface.co/datasets/Professor/kinyarwanda-speech-data.

sourceHugging Facecc-by-4.0updated 1mo agoView on Hugging Face
0likes14downloads
Dataset Card

Kinyarwanda Speech Data (Pooled)

A ~989.9-hour pooled Kinyarwanda speech corpus, combining two independently-sourced datasets into one consistently-formatted corpus for speech modeling (TTS / ASR). Part of the AfroNet multi-language TTS data effort — sibling release to the Yoruba/Hausa/Igbo pools, but sourced entirely differently: DSN African Voices, NaijaVoices, and WAXAL (the sources behind the other three languages) don't cover Kinyarwanda at all.

Sources

SourceClipsHoursStyle
**Afrivoice Kinyarwanda** (Digital Umuganda)183,159983.5 hcrowdsourced spoken image descriptions, 5 domains (agriculture/health/finance/government/education)
**Kinyarwanda TTS dataset** (mbazaNLP / Digital Umuganda)3,9926.4 hstudio-recorded, single voice actress, linguist-reviewed text
Total187,151989.9 h

All audio is standardized to 16 kHz mono FLAC (lossless). Clips are 1–30 seconds; empty/garbage transcripts, near-silent clips, and undecodable audio were dropped at ingestion.

On Afrivoice's domain and sampling choices

Afrivoice ships six domains; a sixth, Scripted Education, was deliberately excluded from this pool — its per-clip duration field didn't plausibly match its (much longer, paragraph-length) transcript text, a red flag for a text-audio mismatch that wasn't resolved before this release. The five domains used were each capped at 200 hours (Education came in under cap, at 183.5h, since only ~198.5h total exists for that domain after filtering) to keep the corpus from being dominated by whichever domain happened to have the most raw hours available (Health alone has 994h in the source release).

Format

The dataset ships as WebDataset-style tar shards (shards/shard-00000.tar …, ~1 GB each, one {key}.flac file per clip) plus a single manifest (manifest.parquet / manifest.jsonl) that indexes every clip:

ColumnDescription
key, shardwhich tar file + entry holds this clip's audio
texttranscript (native script). For Afrivoice this is raw_text from the source (natural capitalization/punctuation), not its lowercased/stripped text field, which is ASR-oriented normalization
durationseconds
sourceafrivoice \mbaza_tts
dataset_idinteger id per source (0=afrivoice, 1=mbaza_tts)
splittrain / val (250 clips held out per source for evaluation)
speaker_id, genderspeaker metadata where available (Afrivoice doesn't expose per-speaker IDs; mbaza_tts is single-speaker)
domainAfrivoice's source domain (agriculture/health/financial/government/education); null for mbaza_tts
lufsAfrivoice's own broadcast-standard loudness measurement (LUFS), where available — a more principled loudness signal than the dbfs proxy below
dbfs, clip_ratio, sil_ratiocheap DSP quality proxies computed for every clip: loudness, fraction of clipped samples, fraction of near-silent frames
has_disfluencyalways false here — neither source flags disfluencies the way the Nigerian-language sources' ASR transcripts do

Usage

python
from huggingface_hub import hf_hub_download
import pandas as pd, tarfile, io, soundfile as sf

mp = hf_hub_download("Professor/kinyarwanda-speech-data", "manifest.parquet", repo_type="dataset")
df = pd.read_parquet(mp)

row = df.iloc[0]
shard_path = hf_hub_download("Professor/kinyarwanda-speech-data", f"shards/{row.shard}", repo_type="dataset")
with tarfile.open(shard_path) as tar:
    audio_bytes = tar.extractfile(f"{row.key}.flac").read()
arr, sr = sf.read(io.BytesIO(audio_bytes))

The tar shards are also directly readable by the `webdataset` library for streaming training pipelines.

Intended use & limitations

Built for Kinyarwanda TTS/ASR research, in particular as pooled finetuning data for a multilingual TTS model that doesn't natively support Kinyarwanda. The bulk of this corpus (Afrivoice) is speech describing photographs across five institutional domains — a fairly narrow register (descriptive, matter-of-fact) compared to natural conversation or narrative speech; the small mbaza_tts portion is the only genuinely TTS-purpose-built, studio-quality anchor. This is a research aggregation; usage should respect the terms of each constituent source below.

License

Both constituent sources are CC BY 4.0. Consult each source's own page for full terms: Afrivoice Kinyarwanda · Kinyarwanda TTS dataset.

Citations

If you use this pooled dataset, please cite the original sources it draws from — consult each source's own HuggingFace page for their preferred citation, as neither currently ships a bibtex entry in-repo.

Acknowledgments

Deep thanks to Digital Umuganda for both constituent datasets — the large-scale Afrivoice image-description corpus across five domains, and (via the mbaza project) the studio-quality single-speaker TTS corpus with linguist-reviewed text.

This dataset was pooled by Victor Olufemi and LyngualLabs as part of the AfroNet multi-language TTS data effort.