Instructions to use VoxCPM-Kernel/VoxCPM2-Arabic-Teacher-v3 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- VoxCPM
How to use VoxCPM-Kernel/VoxCPM2-Arabic-Teacher-v3 with VoxCPM:
import soundfile as sf from voxcpm import VoxCPM model = VoxCPM.from_pretrained("VoxCPM-Kernel/VoxCPM2-Arabic-Teacher-v3") wav = model.generate( text="VoxCPM is an innovative end-to-end TTS model from ModelBest, designed to generate highly expressive speech.", prompt_wav_path=None, # optional: path to a prompt speech for voice cloning prompt_text=None, # optional: reference text cfg_value=2.0, # LM guidance on LocDiT, higher for better adherence to the prompt, but maybe worse inference_timesteps=10, # LocDiT inference timesteps, higher for better result, lower for fast speed normalize=True, # enable external TN tool denoise=True, # enable external Denoise tool retry_badcase=True, # enable retrying mode for some bad cases (unstoppable) retry_badcase_max_times=3, # maximum retrying times retry_badcase_ratio_threshold=6.0, # maximum length restriction for bad case detection (simple but effective), it could be adjusted for slow pace speech ) sf.write("output.wav", wav, 16000) print("saved: output.wav") - Notebooks
- Google Colab
- Kaggle
VoxCPM2 Arabic Teacher v3
One VoxCPM2 model for 17 Arabic dialects; a dialect tag in front of the text picks the dialect. It is the most accurate Arabic model of this project: lower CER and WER than both the 11-adapter model and Teacher-v2.
At a glance
| Base model | openbmb/VoxCPM2 (2B parameters, 48 kHz) |
| Trained | LoRA rank 64 on base_lm (attention and FFN) + 17 dialect tag embeddings: 67M parameters, merged into the weights |
| Checkpoints | main: step 1500 (best validation, recommended); branch last: step 3000 |
| Dialects | 17: msa, egyptian, palestinian, lebanese, syrian, iraqi, saudi, najdi, hejazi, gulf, bahraini, yemeni, sudanese, libyan, tunisian, algerian, moroccan |
| Aliases | emirati, qatari, khaliji โ gulf; jordanian, levantine โ palestinian |
| Training data | Teacher-v2's 135 h, reweighted, with noisy reference voices |
| Size | 5.23 GB |
| License | CC BY-NC-SA 4.0 (non-commercial) |
Files
| path | what it is |
|---|---|
model.safetensors, audiovae.pth, config.json |
the merged model, loaded as a normal VoxCPM2 checkpoint |
tokenizer.json, tokenizer_config.json, special_tokens_map.json, chat_template.jinja |
the tokenizer, with the dialect tags as special tokens |
dialects.json |
dialect โ tag token, and the aliases |
lora/trainable.safetensors, lora/train_state.json |
the unmerged LoRA and tag embeddings, and the training settings |
Results
Held-out evaluation set: 17 dialects ร 40 sentences ร 2 seeds (iraqi and moroccan: 30 sentences) = 1320 clips. Its speakers and texts are not in the training data. Every model reads the same sentences with the same voices and seeds.
| model | CER | WER | UTMOS | speaker sim | dialect region | late stop |
|---|---|---|---|---|---|---|
| VoxCPM2-Arabic-Dialects (11 LoRA adapters) | 4.74 % | 14.6 % | 2.47 | 0.94 | 64.8 % | 1.6 % |
| Teacher-v2 | 5.03 % | 15.1 % | 2.35 | 0.95 | 61.9 % | 0.8 % |
| Teacher-v3 (this model, step 1500) | 4.34 % | 13.6 % | 2.49 | 0.94 | 63.2 % | 0.6 % |
Teacher-v3, step 3000 (last) |
4.68 % | 14.2 % | 2.47 | 0.94 | 62.4 % | 0.7 % |
- CER / WER: character / word error rate of a speech recognizer's transcript (better of Whisper large-v3 and Cohere Transcribe Arabic); lower is better. UTMOS: predicted naturalness, 1-5. Speaker sim: similarity to the reference voice, 0-1. Dialect region: share placed in the right region by a dialect classifier (ADI-5).
- Late stop: share of clips that run over 1.5 ร their expected length; lower is better.
- The CER and WER gains are beyond noise against both models (paired bootstrap, 95 %); the UTMOS gain is beyond noise against Teacher-v2.
| dialect | CER, Dialects | CER, v2 | CER, v3 | UTMOS, Dialects | UTMOS, v2 | UTMOS, v3 |
|---|---|---|---|---|---|---|
| msa | 3.1 % | 3.4 % | 3.2 % | 2.15 | 2.10 | 2.26 |
| egyptian | 1.2 % | 1.4 % | 1.7 % | 2.74 | 2.80 | 2.77 |
| palestinian | 2.5 % | 2.2 % | 2.6 % | 2.77 | 2.86 | 2.73 |
| lebanese | 6.0 % | 8.5 % | 7.0 % | 2.86 | 2.94 | 2.83 |
| syrian | 6.6 % | 6.9 % | 6.0 % | 2.49 | 2.45 | 2.42 |
| iraqi | 3.1 % | 3.9 % | 2.7 % | 2.40 | 2.29 | 2.48 |
| saudi | 3.5 % | 4.9 % | 3.7 % | 2.38 | 2.19 | 2.29 |
| najdi | 3.7 % | 4.1 % | 3.0 % | 2.97 | 2.25 | 2.71 |
| hejazi | 3.5 % | 4.3 % | 3.0 % | 2.59 | 1.79 | 2.56 |
| gulf | 7.7 % | 7.7 % | 3.2 % | 1.68 | 1.30 | 2.42 |
| bahraini | 4.0 % | 4.6 % | 5.3 % | 2.67 | 2.51 | 2.47 |
| yemeni | 4.6 % | 4.5 % | 4.0 % | 2.61 | 2.60 | 2.57 |
| sudanese | 3.6 % | 4.0 % | 4.2 % | 2.44 | 2.42 | 2.39 |
| libyan | 5.9 % | 5.4 % | 5.2 % | 2.64 | 2.68 | 2.68 |
| tunisian | 8.4 % | 7.0 % | 7.4 % | 2.18 | 2.34 | 2.27 |
| algerian | 5.7 % | 6.1 % | 5.7 % | 2.14 | 2.10 | 2.06 |
| moroccan | 7.8 % | 7.1 % | 5.8 % | 2.20 | 2.24 | 2.35 |
80 clips per dialect (iraqi and moroccan: 60), so small differences are noise. CER against the 11-adapter model, beyond noise (95 %):
- Better: gulf (7.7 โ 3.2 %; UTMOS also +0.74) and moroccan.
- Worse: bahraini (4.0 โ 5.3 %) and egyptian (1.2 โ 1.7 %).
Usage
Install the Turbo engine (./setup.sh), then:
import asyncio
from nanovllm_voxcpm import DialectTTS
async def main():
tts = await DialectTTS.load("VoxCPM-Kernel/VoxCPM2-Arabic-Teacher-v3", dit=None, w8a8=False)
await tts.add_voice("speaker", "reference.wav")
audio = await tts.synthesize("ููุง ูุงูููุ ููู ุญุงูู ุงูููู
ุ", dialect="najdi", voice="speaker") # 48 kHz
await tts.close()
if __name__ == "__main__":
asyncio.run(main())
dit=None: the model's own LocDiT (10 steps). A distilled 2-step LocDiT for this model is not made yet.w8a8=False: run in bf16; int8 is not calibrated for this model.- Step 3000:
snapshot_download("VoxCPM-Kernel/VoxCPM2-Arabic-Teacher-v3", revision="last"), then load that folder.
Training
| Data | VoxCPM-Kernel/VoxCPM2-Arabic-Train-v2: 97.0 h lahgtna, 5.4 h SADA, 32.3 h filtered synthetic speech |
| Changes from v2 | SADA sampled ร0.5; synthetic Hejazi, Najdi, Gulf, Saudi and MSA ร2; half of the reference voices degraded (noise, reverb, band limiting) |
| Schedule | 3000 steps, AdamW 1e-4 cosine; best validation at step 1500 |
| Hardware | one NVIDIA A10 (24 GB), about 11.5 h |
| Code | Speech-Next/voxcpm2-arabic-training, scripts/run_v3.sh |
License
CC BY-NC-SA 4.0, because some training data is non-commercial (SADA, VoxTube reference voices, Habibi-TTS non-commercial checkpoints). The base model VoxCPM2 is Apache-2.0.
- Downloads last month
- 39