Bambara VITS — pseudo-IPA experiment

RobotsMali/bam-vits-pseudo-ipa is an experimental 20-speaker Bambara VITS checkpoint from RobotsMali AI4D Lab. It differs from RobotsMali/bam-vits in its text input representation, not its VITS architecture: Bambara spelling is converted by a deterministic pseudo-IPA cleaner before tokenization.

Research checkpoint — substantially undertrained. The model is substantially undertrained. It received 200 epochs on a small, noisy corpus, far below the hundreds of thousands of optimizer steps normally used for VITS (approximately 200,000 is our reference budget). No formal evaluation is available; expect unstable, noisy, or unintelligible output.

Research question and finding

The experiment tested whether IPA-like inputs would improve quality or convergence when adapting an English checkpoint trained with English phonetic inputs. We observed no remarkable improvement. Plain-orthography checkpoints often sounded slightly more natural. Bambara orthography is already largely phonetic, and the large Bambara–English acoustic difference likely gave the transferred HiFi-GAN-style generator little useful guidance from either spelling scheme. This is an informal result from undertrained models, not a controlled conclusion.

Usage

The tokenizer does not perform pseudo-IPA conversion itself. Apply the same function used in training before every inference request:

import re


def clean_bambara_pseudo_ipa(text):
    """
    Translates pure Bambara text into pseudo-IPA form.
    Normalizes nasalizations and specific consonants (c -> tʃ, j -> dʒ).
    """
    if not text or not isinstance(text, str):
        return ""

    text = text.lower()

    nasal_map = {
        "aan": "ãã", "ɛɛn": "ɛ̃ɛ̃", "een": "ẽẽ", "iin": "ĩĩ",
        "ɔɔn": "ɔ̃ɔ̃", "oon": "õõ", "uun": "ũũ", "an": "ã",
        "ɛn": "ɛ̃", "en": "ẽ", "in": "ĩ", "ɔn": "ɔ̃", "on": "õ",
        "un": "ũ",
    }
    for ortho, ipa in nasal_map.items():
        text = re.sub(rf"{ortho}(?![aeɛioɔu])", ipa, text)

    sound_alignments = {"j": "dʒ", "c": "tʃ", "ɲ": "ɲ", "ŋ": "ŋ"}
    for b_char, ipa_char in sound_alignments.items():
        text = text.replace(b_char, ipa_char)

    text = re.sub(r"[^a-zɛɔɲŋãẽĩõṹ̀̂̌̄\s.,!?ʃʒ]", "", text)
    return re.sub(r"\s+", " ", text).strip()
import soundfile as sf
import torch
from transformers import AutoTokenizer, VitsModel

repo_id = "RobotsMali/bam-vits-pseudo-ipa"
text = clean_bambara_pseudo_ipa("An ka taa sugu la.")
tokenizer = AutoTokenizer.from_pretrained(repo_id)
model = VitsModel.from_pretrained(repo_id)
inputs = tokenizer(text, return_tensors="pt")

with torch.no_grad():
    waveform = model(**inputs, speaker_id=0).waveform[0]

sf.write("bambara.wav", waveform.cpu().numpy(), model.config.sampling_rate)

Use speaker IDs 0–19. Their mapping to original AfVoices participant IDs was not exported and should not be treated as identity metadata.

Training

The model was initialized from ylacombe/vits-vctk-with-discriminator and trained on the 21,253-train/1,128-test top20-speakers split of RobotsMali/afvoices-notag. This is spontaneous, variably noisy ASR speech, not studio TTS data. Transcripts with semantic/acoustic tags were excluded.

The configuration is config/bam-vits-pseudo-ipa.yaml: 200 epochs, per-device batch size 80, learning rate 0.0005, FP16, 0.2–20-second audio, maximum 450 tokens, and seed 789. Audio was resampled to 22.05 kHz. The published checkpoint is inference-only VitsModel; its discriminator was removed.

Intended use and limitations

This is a baseline for research into Bambara text representations, low-resource transfer, and continued fine-tuning—not a production voice. No MOS, intelligibility, pronunciation, speaker-similarity, safety, bias, memorization, or voice-similarity evaluation was performed. The dataset and short training can yield noise, poor prosody, pronunciation errors, speaker leakage, and demographic imbalance. The cleaner is only a heuristic: it is not a linguistic IPA transcription or a complete grapheme-to-phoneme system. Numbers, abbreviations, code-switching, foreign words, unusual punctuation, and long/non-Bambara text may fail.

Do not use the model for safety-critical speech, impersonation, or deceptive audio. Disclose synthetic use and verify all output by listening.

Related resources

Questions are welcome in the project repository or this model's Community tab.

Downloads last month
35
Safetensors
Model size
39.6M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for RobotsMali/bam-vits-pseudo-ipa

Finetuned
(4)
this model
Finetunes
1 model

Dataset used to train RobotsMali/bam-vits-pseudo-ipa

Collection including RobotsMali/bam-vits-pseudo-ipa