Request access to yora-tts
This repository is publicly accessible, but you have to accept the conditions to access its files and content.
This model is released for research and institutional evaluation only (see "Research use only" below). Weights are not distributed through the automatic request flow on this page — email gworldsoft.ai@gmail.com with your name, affiliation, and intended use, and access will be granted manually. Prefer to see it working first? A live Gradio demo (no request needed) is linked in the model card below — or email for a dedicated demo session with the research team.
Log in or Sign Up to review the conditions and access this model content.
- yora-tts (v2)
- Access
- Research use only (v1 / v2) — v3 will be commercial
- Not a fine-tune
- Model family: v1 vs v2
- Architecture (shared by v1 and v2)
- Evaluation methodology
- v1 — evaluation results
- v2 — evaluation results (full run, milestone checkpoints)
- v3 — dataset and roadmap (commercial track, in progress)
- Usage
- License and attribution
- Limitations
yora-tts (v2)
Trained from scratch by Godspower Uyanga (Senior Data Scientist). Questions or collaboration: gworldsoft.ai@gmail.com
Access
This repository is gated. To request the weights, email gworldsoft.ai@gmail.com with your name, affiliation, and intended use — access is granted manually, not automatically through the Hub's request button.
Try it now, no request needed: live Gradio demo — type English text, get back the Yorùbá transcript. Audio output is restricted on this public demo (the server doesn't synthesize or send audio for these requests at all — not a UI-level block); email the address above to request full audio access or a dedicated demo session with the research team. This runs on a temporary tunnel and may go offline between sessions — email for a fresh link if it's dead.
Training diagnostics
Interactive CER-vs-training-step chart → — hover any point on the curve to see the checkpoint's exact step and CER, across all 120 checkpoints evaluated over the full run.
Research use only (v1 / v2) — v3 will be commercial
v1 and v2 are strictly for research purposes. Both are trained end-to-end on a single-domain corpus (Bible narration — see "Not a fine-tune" below), so their voice carries a religious-narration register and neither has been evaluated for deployment accuracy, safety, or robustness in a commercial or regulated setting.
v3 is the commercial-track model (in progress). It is trained on a substantially larger, multi-domain, multi-language dataset purpose-built to generalize across real deployment sectors — banking, education, healthcare, telecom, government, and more (full composition below). v3 is the version intended to become available for commercial licensing and deployment to real users in those sectors, once training and evaluation are complete.
Not a fine-tune
v1 and v2 are both trained from scratch (randomly initialized weights, no pretrained checkpoint reused) on BibleTTS Yorùbá (OpenSLR SLR129, CC-BY-SA-4.0) — a single studio-quality speaker reading scripture narration, ~25 hours. This is not a fine-tune of any existing Yorùbá or multilingual TTS model. One direct consequence: the model's prosody and vocabulary coverage reflect a religious-narration domain — it has not seen banking, medical, legal, or everyday conversational Yorùbá during training. See "v3 dataset" below for the dataset built to close that gap.
Model family: v1 vs v2
| v1 | v2 | |
|---|---|---|
| Sampling rate | 16,000 Hz | 22,050 Hz |
| Generator parameters | 36.3M | 36.3M |
| Training data | BibleTTS Yorùbá (SLR129), ~25h, single speaker | Same corpus, reprocessed at 22,050 Hz |
| Training regime | From scratch, GAN + KL + mel + duration loss, AdamW, lr 2e-4 | Same |
| Steps trained | ≈311,000 (300-epoch config ceiling) | 800,125 (925-epoch ceiling — run to completion) |
| Best measured CER | 22.8% (≈step 260,000, n=20 test sentences) | 11.5% (step 775,000, n=15 test sentences) |
| Checkpoint selection | Best available tracked checkpoint, not necessarily final step | Best of full run, not necessarily final step (final step 800,125 scored 12.4%) |
| License | CC BY-SA-4.0 | CC BY-SA-4.0 |
v1's and v2's CER numbers used different held-out test-sentence counts (20 vs. 15) and were measured against different-sampling-rate audio, so treat the comparison as directional (v2 clearly more intelligible), not a strictly controlled A/B.
Architecture (shared by v1 and v2)
| Parameter | Value |
|---|---|
| Architecture | VITS (conditional VAE + normalizing flow + HiFi-GAN decoder + stochastic duration predictor) |
| Generator parameters | 36.3M (measured; discriminator, generator-only weights excluded — not needed for inference) |
| Vocabulary | 49 tokens — character-level Yorùbá letters, tone diacritics, punctuation (custom tokenizer, not reused from any pretrained model) |
| Hidden size | 192 |
| Transformer layers | 6 |
| Attention heads | 2 |
| FFN dim | 768 |
| Flow layers | 4 |
| Speaker embedding | none (single-speaker) |
Evaluation methodology
Intelligibility was tracked as character error rate (CER), measured end-to-end on the TTS system itself, not on any translation step:
- Synthesize a fixed, held-out set of Yorùbá reference sentences (from the BibleTTS test split — the model's own reference text, not machine- translated from English).
- Transcribe the synthesized audio back to text with an independent ASR
model (
facebook/mms-1b-all). - Compute character-level edit distance between the ASR transcript and the original Yorùbá reference text.
This is a proxy for "can this be understood as Yorùbá speech by an
independent listener (the ASR model)" — it is not a naturalness score,
and it does not evaluate the separate EN→YO translation pipeline
documented below (that pipeline's own errors, like mistranslating short
idioms, are a distinct and separately-known failure mode — see
pipeline.py).
Other per-checkpoint signals were also tracked for v2: pitch (F0) variation, spectral flatness (artifact/noise proxy), silence fraction, clipping, and word-count ratio against reference — summarized in the table below alongside CER, since a single metric can hide problems the others catch.
v1 — evaluation results
| Checkpoint (step) | CER |
|---|---|
| 100,000 | 34.7% |
| 130,000 | 28.8% |
| 150,000 | 30.5% |
| 167,000 | 28.8% |
| ≈260,000 (deployed) | 22.8% |
v2 — evaluation results (full run, milestone checkpoints)
| Step | CER | F0 std (Hz) | Spectral flatness | Silence % | Word-count ratio |
|---|---|---|---|---|---|
| 125,000 | 23.3% | 393.1 | 0.0090 | 23.7% | 0.971 |
| 126,000 | 24.5% | 23.9 | 0.0110 | 22.8% | 0.944 |
| 225,000 | 17.6% | 21.9 | 0.0082 | 23.6% | 0.964 |
| 235,000 | 17.4% | 113.3 | 0.0079 | 24.4% | 0.954 |
| 240,000 | 19.4% | 408.3 | 0.0078 | 24.5% | 0.944 |
| 250,000 | 17.7% | 132.7 | 0.0075 | 21.6% | 0.989 |
| 275,000 | 19.5% | 22.3 | 0.0084 | 22.4% | 0.969 |
| 300,000 | 15.6% | 24.1 | 0.0082 | 24.4% | 0.960 |
| 325,000 | 17.4% | 21.0 | 0.0077 | 24.9% | 0.970 |
| 350,000 | 16.5% | 23.9 | 0.0083 | 24.0% | 0.960 |
| 375,000 | 16.2% | 362.3 | 0.0072 | 22.1% | 0.963 |
| 400,000 | 15.0% | 23.9 | 0.0125 | 22.0% | 0.968 |
| 425,000 | 13.9% | 21.6 | 0.0076 | 23.6% | 0.983 |
| 450,000 | 15.5% | 21.1 | 0.0140 | 23.3% | 0.958 |
| 475,000 | 15.9% | 20.5 | 0.0082 | 22.8% | 0.943 |
| 500,000 | 14.0% | 21.2 | 0.0268 | 23.0% | 0.975 |
| 525,000 | 14.1% | 20.9 | 0.0158 | 21.8% | 0.960 |
| 550,000 | 13.8% | 21.3 | 0.0632 | 22.8% | 0.968 |
| 575,000 | 14.7% | 22.3 | 0.0420 | 19.9% | 0.973 |
| 600,000 | 13.0% | 20.7 | 0.0106 | 24.1% | 0.966 |
| 625,000 | 14.2% | 21.4 | 0.0082 | 23.0% | 0.928 |
| 650,000 | 13.4% | 21.0 | 0.0126 | 23.1% | 0.957 |
| 675,000 | 14.2% | 21.9 | 0.0080 | 21.4% | 0.938 |
| 700,000 | 12.5% | 21.3 | 0.0268 | 22.2% | 0.966 |
| 725,000 | 12.9% | 21.8 | 0.0080 | 22.8% | 0.955 |
| 750,000 | 12.7% | 21.5 | 0.0080 | 20.4% | 0.980 |
| 775,000 | 11.5% | 22.1 | 0.0507 | 23.6% | 0.970 |
| 800,000 (final) | 12.4% | 21.9 | 0.0089 | 24.1% | 0.961 |
Checkpoint 775,000 (this repo) was chosen because it scored lowest CER across the full run — not because it was the final step. Two things worth reading honestly from this table rather than hiding:
- Steps 235,000–250,000 show an F0-std spike (113–408 Hz vs. a stable ~20–25 Hz baseline elsewhere) — a transient GAN-training instability (generator/discriminator balance wobble), a known characteristic of adversarial TTS training. It self-corrected by step 255,000 without intervention; CER during that window stayed in-band (17–19%), so it did not corrupt the model, but it is a genuine artifact in the run, not cleaned from this table.
- Spectral flatness is noisy in the back half of training (spikes at 500k, 550k, 575k, 700k, 775k) — worth independent listening verification at 775,000 specifically, since it's the checkpoint shipped here.
v3 — dataset and roadmap (commercial track, in progress)
v3 moves off the single-domain Bible corpus entirely. Its training corpus is 70,731 files (English, Yorùbá, and Ibibio), split into a 67,031-file (94.77%) general/narrative corpus and a 3,700-file (5.23%) sector-tagged templated corpus, with the following keyword-verified domain distribution across the full 70,731 files:
| Domain | Files | % of corpus |
|---|---|---|
| Watchtower/JW religious & Bible-based | 10,705 | 15.13% |
| Templated everyday-life notifications (banking, telecom, health, transport, school, legal, utilities) | 8,440 | 11.93% |
| Secular health, illness & medicine | 6,139 | 8.68% |
| Family, marriage & parenting | 1,289 | 1.82% |
| Science, nature & environment | 1,087 | 1.54% |
| News, politics & current affairs | 822 | 1.16% |
| Crime, war & social issues | 668 | 0.94% |
| Yorùbá proverbs (òwe) | 245 | 0.35% |
| Secular legal, judicial & security | 225 | 0.32% |
| Traditional culture, chieftaincy, history & Ifá religion | 138 | 0.20% |
| Oríkì / praise poetry & lineage chants | 83 | 0.12% |
| Academic linguistics / language research | 20 | 0.03% |
| Unmatched by keyword (hand-sampled, n=80) — majority further Watchtower/JW narrative; remainder secular narrative (health tips, family advice, world news, road-safety, birthday greetings, culture commentary) and off-pattern templates | 40,870 | 57.78% |
Within the 3,700-file sector-tagged subset specifically, 95.46% resolves into sixteen micro-domains:
| Micro-domain | Files | % of sector subset |
|---|---|---|
| Telecom, internet & devices | 516 | 13.95% |
| Education & schools | 432 | 11.68% |
| Healthcare & medicine | 312 | 8.43% |
| Banking & finance | 305 | 8.24% |
| Transportation & travel | 234 | 6.32% |
| Legal & judicial matters | 232 | 6.27% |
| Business & employment | 223 | 6.03% |
| Utilities (power & water) | 206 | 5.57% |
| Retail & commerce | 202 | 5.46% |
| Government records, ID & civic matters | 178 | 4.81% |
| Insurance | 158 | 4.27% |
| Agriculture & livestock | 143 | 3.86% |
| Entertainment, sports & media | 143 | 3.86% |
| Housing & real estate | 125 | 3.38% |
| Hospitality, food & tourism | 116 | 3.14% |
| Emergency & support services | 7 | 0.19% |
| Long tail (other everyday-life templates) | 168 | 4.54% |
This dataset spans three languages — English, Yorùbá, and Ibibio — and is available upon request for research purposes and institutional use, including banks. Contact gworldsoft.ai@gmail.com.
Usage
import torch
from transformers import AutoTokenizer, VitsModel
model_id = "Doctorgp1/yora-tts-v2"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = VitsModel.from_pretrained(model_id)
model.eval()
text = "Bawo ni?" # Yorùbá text in
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
waveform = model(**inputs).waveform
import soundfile as sf
sf.write("out.wav", waveform.squeeze().numpy(), model.config.sampling_rate)
Input is Yorùbá text (with tone marks where available). This model on its own does not translate — the example above expects Yorùbá text already.
Full pipeline: English text → Yorùbá text + speech
For English input, this repo also ships pipeline.py, which
chains an EN→YO translator (NLLB-200) in front of this model and returns
both the Yorùbá text and the audio — so you always get something to
sanity-check the translation against, not just a black-box wav file:
from huggingface_hub import hf_hub_download
path = hf_hub_download("Doctorgp1/yora-tts-v2", "pipeline.py")
import importlib.util
spec = importlib.util.spec_from_file_location("yora_pipeline", path)
yora_pipeline = importlib.util.module_from_spec(spec)
spec.loader.exec_module(yora_pipeline)
yoruba_text, waveform, sampling_rate = yora_pipeline.speak("Thank you for testing this voice.")
print(yoruba_text) # -> "O ṣeun fún lílo ohùn rẹ."
import soundfile as sf
sf.write("out.wav", waveform, sampling_rate)
(Or just download pipeline.py directly from the Files tab and
from pipeline import speak.)
Yorùbá is low-resource for machine translation — idioms are sometimes mistranslated (e.g. an earlier internal test rendered "thank you" as "my friends"). Always read the returned Yorùbá text before trusting the audio for anything important.
License and attribution
Trained on BibleTTS Yorùbá (OpenSLR SLR129), licensed CC-BY-SA-4.0. This model's weights inherit that license: commercial use is allowed; attribution and share-alike terms apply. Whether the ShareAlike clause formally propagates from training data to model weights is legally unsettled — get this reviewed before deploying in a regulated context (bank, hospital, government). See "Research use only" above — v1/v2 are not intended for such deployment regardless.
Limitations
- Single speaker only (no voice selection/cloning).
- Trained entirely on read-aloud scripture narration — prosody and vocabulary reflect that formal, religious-narration register, not conversational or sector-specific speech (see v3 for the dataset built to address this).
- CER is an ASR-proxy metric, not a human naturalness judgment.
- No explicit handling of code-switched or non-Yorùbá text; behavior on out-of-vocabulary characters is undefined.
- Research-only release (see above) — not evaluated for commercial or regulated-sector deployment.
- Downloads last month
- 22