Downloads · 30 days
12
5% of all-time downloads
PrinceAlhassanNasamu/tekyerema-tts-eng
tekyerema-tts-eng is a text-to-speech model from PrinceAlhassanNasamu. Use it when you need text read aloud. The card lists the license as cc-by-nc-4.0.
Downloads · 30 days
12
5% of all-time downloads
All-time downloads
256
Public
Parameters
36.3M
290 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors145 MB · 100%
From the Hugging Face model README
Author: Prince Nasamu Alhassan
Fine-tuned from facebook/mms-tts-eng on ghana_english_single: 549 clips, 70.9 minutes, one speaker.
One speaker on purpose. The larger ghana_english_tts has 25 hours and no speaker labels, and VITS has no speaker conditioning, so training on it averages every broadcaster into one muddy persona. The cost is that 549 rows is a small corpus and the speaker reads formally.
6,000 steps, and that number is not modesty. On 549 rows, 20,000 steps is 583 epochs. The first attempt was queued at 20,000 before anyone checked what that meant for a corpus this size, and was restarted.
It is the weakest link in the English loop, measured. The same sentence was synthesised five times and transcribed by two recognisers. VITS samples noise in its duration predictor, so every take differs:
| take | our recogniser heard | whisper-large-v3-turbo heard |
|---|---|---|
| 1 | Water is by Battery evil. | What is my battery evil? |
| 2 | What is my battery evil? | or it's his way back to evil. |
| 3 | What is one but retrieval. | Why is his way in a bad truth evil? |
| 4 | What is my battery level? | what is made by truth evil. |
| 5 | What is my battery level? | What is my bad retrieval? |
The text was What is my battery level? every time. Our recogniser recovered it exactly twice in five and the baseline never did — so the recogniser is fine and the voice is not. It mispronounces level consistently enough that both models hear evil.
More steps will not fix this: 6,000 is already 175 epochs over 549 clips. It needs more voice data, and the obvious source — ghana_english_tts, 6,614 rows over 24.8 hours — has no speaker labels, and VITS has no speaker conditioning, so training on it averages every broadcaster into one muddy persona. That is a real dead end, not a to-do.
import torch, soundfile as sf
from transformers import AutoTokenizer, VitsModel
repo = "PrinceAlhassanNasamu/tekyerema-tts-eng"
tok = AutoTokenizer.from_pretrained(repo)
model = VitsModel.from_pretrained(repo).eval()
text = "your text here".lower() # LOWERCASE IS NOT OPTIONAL -- see below
with torch.no_grad():
wav = model(**tok(text, return_tensors="pt")).waveform[0]
sf.write("out.wav", wav.numpy(), model.config.sampling_rate)
Read this before sending it real text. These VITS tokenisers are CHARACTER-level, and a character outside the vocabulary is dropped silently -- no error, no gap in the audio.
Measured 2026-09-23 on 6,945 real agent commands (
tekyerema-distill-agent-v2, the utterance-disjoint corpus), per voice, not borrowed from a sibling:
voice raw text after .lower()after .lower()+ number verbalisationtekyerema-tts-eng6.8% 1.2% 0.00% tekyerema-tts-twi10.4% 5.5% 0.01% tekyerema-tts-hau12.0% 6.8% 0.00% tekyerema-tts-kus12.6% 8.0% 1.72% tekyerema-tts-ewe12.8% 7.6% 0.00% Between 98% and 100% of real commands lose at least one character if you send them raw.
The single largest cause is capitalisation, and it was missing from every earlier version of this card. None of these five vocabularies contains
A-Z. Uppercase accounts for 36-82% of everything dropped -- 81.8% for English. "Send Kwame 50 cedis" loses itsS, itsKand its digits.text.lower()is a one-line fix and it is the highest-value thing on this page.Digits are the second cause. Vocabulary coverage is erratic rather than absent: Ewe and Kusaal have no digits, Hausa has only
6, Twi has only2and3, and English has0-6but not7,8or9-- which is worse than having none, because it fails invisibly. Spell numbers into words before synthesis.Kusaal keeps a 1.72% residual after both fixes that the other voices do not: its 35-character vocabulary has no
c, so cedis is spoken as edis -- the word naming the money in a payment confirmation. Route words whose letters this voice lacks to a voice that has them.AGENT/agent_core.pydoes the number and routing halves (verbalize_numbers,sayable_segments); the lowercasing is on you.Reproduce:
overnight/exp003_tts_coverage.pyandovernight/exp003b_tts_fix.pyin the Tɛkyerɛma repo.
Trained on the Ghana Speech dataset and related Ghanaian corpora, licensed CC BY-NC 4.0.
Non-commercial use only (CC BY-NC 4.0). This is inherited from the training data and required by the terms under which the compute was granted: models trained in that window are non-commercial by condition of access, not by inference.
waxal_dag — 13,228
training rows, 1,750 validation rows, ~71 hours, 1,041 speakers with
the largest at 1%. Trained on it, tekyerema-asr-mms-dag scores
36.94 / 11.71, against the 86.59 / 33.95 this project had believed
was the ceiling. It still loses to
FarmerlineML/w2v-bert-2.0_2026_dagbani_ASR at 29.20 / 9.27, which
is what the agent actually serves. A number carried across from a
translation table into a speech claim was then repeated on every card
here until 2026-09-22.Recognisers
whisper-large-v3-turbo-tekyerema-eng-foundation — Ghanaian English ASR — course 1 (foundation)kusaal-whisper-small-lora — Kusaal ASR (Whisper-small LoRA, superseded)kasa42-asr — KASA-42 (Kusaal, third-party export)tekyerema-asr-ctc — Twi ASR (w2v-BERT CTC)tekyerema-asr-mms-ewe — Ewe ASR (MMS adapter)tekyerema-asr-mms-dag — Dagbani ASR (MMS adapter)tekyerema-asr-mms-hau — Hausa ASR (MMS adapter)tekyerema-asr-mms-kus — Kusaal ASR (MMS adapter)whisper-large-v3-turbo-tekyerema-eng — Ghanaian English ASR (Whisper large-v3-turbo)Voices
tekyerema-tts-twi — Twi TTS (VITS)tekyerema-tts-kus — Kusaal TTS (VITS)tekyerema-tts-ewe — Ewe TTS (VITS)tekyerema-tts-hau — Hausa TTS (VITS)tekyerema-tts-eng — Ghanaian English TTS (VITS)Agent models
tekyerema-1-reply — Tɛkyerɛma-1 reply adapter (arm ①)tekyerema-1-native-reply — Tɛkyerɛma-1 reply adapter (arm ②)tekyerema-1-tool — Tɛkyerɛma-1 tool adapter (arm 1)tekyerema-audio-native — Tɛkyerɛma-1 audio-native (arm 3)tekyerema-audio-native-4k — Tɛkyerɛma-1 audio-native, 4,000 clips (arm 3 v2)tekyerema-1-native-tool — Tɛkyerɛma-1 tool adapter (arm 2)Translation
tekyerema-nllb600m-v1 — Tɛkyerɛma MT v1 (NLLB-600M)kusaal-nllb-600M — Kusaal MT specialist (NLLB-600M)Routing
tekyerema-intent-afroxlmr — Intent classifier (AfroXLMR)Compute resources provided by AI Skills and Compute Africa (AISCA).
Trained on the Ghana NLP H200 GPU. Please keep derivatives non-commercial
and share improvements back with the Ghana NLP community
(ghananlpcommunity).