CoolFace
Datasetpublic

ghananlpcommunity/Ghana_English-Twi_Code-switching_Speech-ipa

KasaSpeech English–Twi Code-Switching Speech — IPA A phonemised version of ghananlpcommunity/Ghana_English-Twi_Code-switching_Speech (KasaSpeech) with one added column: ipa. Every other column — audio included — is carried over byte-for-byte, and row order is unchanged, so this dataset aligns one-to-one with the original. The ipa column Each transcript is converted to a phoneme sequence with ghanag2p-uni, the Twi-only grapheme-to-phoneme library built on ghana-g2p… See the full description on the dataset page: https://huggingface.co/datasets/ghananlpcommunity/Ghana_English-Twi_Code-switching_Speech-ipa.

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes84downloads
Dataset Card

KasaSpeech English–Twi Code-Switching Speech — IPA

A phonemised version of ghananlpcommunity/Ghana_English-Twi_Code-switching_Speech (KasaSpeech) with one added column: `ipa`.

Every other column — audio included — is carried over byte-for-byte, and row order is unchanged, so this dataset aligns one-to-one with the original.

The ipa column

Each transcript is converted to a phoneme sequence with ghanag2p-uni, the Twi-only grapheme-to-phoneme library built on ghana-g2p, run with normalise=True.

One language, applied throughout. ghanag2p-uni phonemises everything under Twi rules — there is no language switch and no per-token language detection. Because KasaSpeech is code-switched, the English stretches are rendered as a Twi speaker's phonology rather than with an English G2P. That is the intended behaviour, and it is what makes the column consistent, but it is the key thing to understand before training on it.

Phoneme units are separated by single spaces, so the column tokenises by splitting on whitespace. Arabic numerals are expanded to English words before conversion ("5" → five). Punctuation is dropped.

`transcript``ipa`
Ɛyɛ den oo, but I’ll try.ɛ j ɛ d e n o b u t ɪ ʔ l l t ɾ j
"Nsuo no asa? I’m feeling very thirsty."n s u o n o a s a ɪ ʔ m f e e l ɪ ŋ v e ɾ j t h ɪ ɾ s t j
"Laptop no ayɛ hye dodo, turn it off."l a pʰ t o pʰ n o a j ɛ ʃ e d o d o t u ɾ n ɪ t o f f

Two rows in the source whose transcript is punctuation only (]) have an empty ipa string.

Aligned to an existing phoneme inventory

The phonemes are not raw Twi IPA. They are mapped onto the 79-token inventory of KoelLabs/xlsr-english-01, so this column can be used as a CTC target for that model with no vocabulary extension and no resized head. Across all 2,676,779 phoneme tokens here, 100% fall inside that inventory — 33 of its tokens are used, and <unk> cannot occur.

Getting there is lossy, by design:

t͡ʃ d͡ʒtie bar dropped — same phoneme, written untied
tʰ → tthe inventory has kʰ and pʰ, but no tʰ
oː iːvowel length is not contrastive there
ç → ʃ, ɲ → n jTwi hy and ny have no counterpart
kʷ → k w, hʷ → h wlabialisation becomes a glide
ie → i e, oɔ → o ɔvowel clusters split into their parts

If you want faithful Twi IPA rather than model-aligned phonemes, regenerate the column with GhanaG2PUni(normalise=False) from the transcript field.

Usage

python
from datasets import load_dataset, Audio

ds = load_dataset(
    "ghananlpcommunity/Ghana_English-Twi_Code-switching_Speech-ipa",
    split="train",
)
ds = ds.cast_column("audio", Audio(sampling_rate=16000))

sample = ds[0]
print(sample["transcript"])
print(sample["ipa"].split())   # phoneme tokens

Reproduce the column yourself:

python
from ghanag2p_uni import GhanaG2PUni

g = GhanaG2PUni(normalise=True)
g.ipa("Ɛyɛ den oo, but I'll try.", sep=" ")
# 'ɛ j ɛ d e n o b u t ɪ ʔ l l t ɾ j'

Splits

SplitSamplesDuration
Train50,96583.94 hours
Validation2,1596.80 hours
Test1,7314.84 hours
Total54,85595.58 hours

Fields

FieldTypeDescription
speaker_idstringAnonymous speaker identifier
age_rangestringSpeaker age group
genderstringSpeaker gender
prompt_setstringPrompt category used during recording
transcriptstringHuman-annotated English–Twi code-switched transcript
durationfloat32Audio duration in seconds
splitstringDataset split label
audioAudioSpeech recording (stored at 48 kHz)
file_namestringOriginal audio filename
errorstringOptional annotation or recording error label
`ipa`stringSpace-separated phonemes of `transcript`, in the KoelLabs inventory

Notes carried over from the source

  • —Audio is stored at 48 kHz; cast to 16 kHz for most speech models.
  • —The split column does not always agree with the file a row lives in — trust the split you loaded, not the column.
  • —Demographic representation is not perfectly balanced, and recording conditions vary across devices and environments.
  • —Minor transcription inconsistencies may remain.

Credit

All speech, transcripts and metadata are the work of the original KasaSpeech authors; this derivative adds only the ipa column.

bibtex
@dataset{kasaspeech2026,
  title={KasaSpeech: A Large-Scale English--Twi Code-Switching Speech Dataset},
  author={Dotse, Kenneth},
  year={2026},
  url={https://huggingface.co/datasets/Kennethdot/Ghana_English-Twi_Code_switching_ASR}
}

Licence: Apache-2.0, as the source dataset.