Spark-TTS 0.5B for Eʋegbe (Ewe) — mixed-register

A text-to-speech model for Ewe (Eʋegbe), a tonal Gbe language spoken by roughly five million people in southeastern Ghana and southern Togo.

This is the mixed-register variant. It was adapted in a second stage on non-scriptural speech, to move the voice away from the slow, declamatory delivery that training on Bible readings alone produces.

For the scriptural-register version, see analist/spark-tts-ewe-cotia.

A research baseline, not a production voice. Read the limitations before using it for anything.

Status

Stage 1 data ~69 h single-speaker scriptural read speech
Stage 2 data WAXAL Ewe (google/WaxalNLP)
Eval loss 3.31 (stage 1 finished at 3.427)
Formal evaluation none — no MOS, no intelligibility study

Caveat on that loss figure: the evaluation split is drawn from the mixture, so it is still majority scriptural and does not directly measure whether the register shifted. The register claim rests on listening, not on the number.

Audio samples

No audio samples are published with this release yet.

Usage

The text normaliser is not optional. Ewe is routinely typed with confusable codepoints — Greek ε for ɛ, γ for ɣ, ϕ for ƒ — which a byte-level tokenizer treats as unrelated symbols. This model was trained on canonicalised text, so text that skips normalisation is mispronounced with no obvious sign of what went wrong. ewe_text.py is included for exactly this reason.

from ewe_text import normalize_ewe
text = normalize_ewe("Ŋdi na mi. Èfɔa?", digit_policy="verbalize")

See inference_example.py for a full script. You also need the Spark-TTS source:

git clone https://github.com/SparkAudio/Spark-TTS
pip install omegaconf einx soundfile librosa soxr

Temperature 0.5–0.6. Pass <|im_end|> and <|end_semantic_token|> as stop tokens or generation runs past the end of the utterance.

Training

Two stages. The first teaches the language; the second only shifts register, which is a far smaller adjustment and needs a much lower learning rate.

Stage 1 Stage 2
Data BibleTTS Ewe mixture, 35% new register
Epochs 4 2
Learning rate 3e-5 8e-6
Init from Spark-TTS 0.5B stage-1 weights

Stage 2 deliberately retains a majority of the stage-1 data. A pure second-register run on a few thousand clips overfits quickly and can undo the phonetics learned in stage 1 — the model stops seeing scriptural vocabulary and forgets how to pronounce it.

Text pipeline in both stages: Unicode NFC, confusable-codepoint repair, digits dropped from training text, over-length sequences dropped rather than truncated (truncation removes the trailing <|im_end|> and teaches the model never to stop).

Limitations

  • Register is shifted, not solved. Stage 2 data is still largely read speech. Spontaneous conversational prosody remains out of domain.
  • Tone is implicit. Ewe is tonal; there is no tone-aware front end. Tone is learned from acoustics and is not reliable on minimal pairs.
  • No formal evaluation. No MOS, no intelligibility testing, no native speaker panel.
  • Alignment unverified in the stage-1 corpus.

Intended use

Research on low-resource and African-language TTS; a checkpoint for further fine-tuning; prototyping where output is checked by a speaker. Not for unsupervised production use.

Attribution

Stage 1 speech data from BibleTTS (Meyer et al., Interspeech 2022; OpenSLR 129), CC BY-SA 4.0. Stage 2 speech data from WAXAL (Google Research and the Gates Foundation, 2026; google/WaxalNLP), Ewe portions collected by the University of Ghana, CC BY-4.0. Base model Spark-TTS by SparkAudio. Fine-tuning with Unsloth.

Licensing note: WAXAL's Ewe data is CC BY-4.0, which is permissive, but ShareAlike propagates from BibleTTS — so this model is released under CC BY-SA 4.0. Credit both corpora.

Contributions welcome

The binding constraint is still data: genuinely spontaneous, multi-speaker Ewe speech would do more for this model than any change to architecture or compute.

Downloads last month
13
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for analist/spark-tts-ewe-conv

Finetuned
(5)
this model