You need to agree to share your Hugging Face information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Log in or Sign Up to review the conditions and access this model content.

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
Safetensors
Model size
2B params
Tensor type
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for VoxCPM-Kernel/VoxCPM2-Arabic-Teacher-v3

Base model

openbmb/VoxCPM2
Finetuned
(47)
this model
Finetunes
1 model