AKIL TTS 1.0: Turkish adapter for Chatterbox Multilingual
A LoRA adapter (22.6 M parameters, 86 MB) for the T3 model of Chatterbox Multilingual
(v2 checkpoint), trained on about 67 hours of Turkish speech from YODAS2.
It is the voice of the AKIL AI assistant. Version 1.0 is training run v3b; the evaluation data calls it v3b_lora.
Developed by: Ertuğrul Akkuş (AKIL AI)
In short. Measured against the base model with identical code and settings, the adapter makes Turkish speech end
cleanly and stop on its own: with the built-in voice the trailing silence drops from 0.50 s to 0.04 s. It also keeps
stopping without the alignment analyzer at repetition_penalty 2.0, where the base models run on in about two thirds
of the clips. Naturalness (UTMOS) stays the same, and speaker similarity rises slightly. The costs are slightly lower
intelligibility (character error rate 1.49 % vs 0.78 %, mostly omitted words in short sentences) and about 1.9× slower
generation. All clips, scripts and per-clip results: akil-tts-tr-eval.
Usage
pip install chatterbox-tts==0.1.7 huggingface_hub safetensors
import sys, torchaudio
from huggingface_hub import snapshot_download
sys.path.insert(0, snapshot_download("Ertugrul1611/akil-tts-tr", allow_patterns=["*.py"]))
from akil_tts import load, synthesize
model = load("cuda") # base model at a pinned revision + this adapter
wav = synthesize(model, "Toplantı saat 14:30'da başlıyor, yaklaşık 45 dakika sürecek.")
torchaudio.save("built-in-voice.wav", wav, model.sr)
wav = synthesize(model, "Merhaba, size nasıl yardımcı olabilirim?", audio_prompt_path="reference.wav")
torchaudio.save("cloned-voice.wav", wav, model.sr)
synthesizewrites numbers, dates, times and units as words and lowercases with Turkish rules (I → ı,İ → i) before tokenization. Keepnormalize=True: all models read digits poorly (see Raw digits below).- Defaults are the evaluated configuration:
repetition_penalty=1.2, a length cap ofint(2.5 × len(normalized text)) + 25speech tokens, exaggeration 0.5, cfg_weight 0.5, temperature 0.8. - It works with
chatterbox-tts0.1.7 from PyPI and with chatterbox from GitHub (commit3f35dfc), which was used for the evaluation. On 0.1.7 the loader switches the alignment-stream analyzer off for this model only, because the analyzer misreads the adapted attention pattern and cuts Turkish sentences early. - For voice cloning, use 6–10 s of clean Turkish speech, and only with the speaker's consent.
merge_lora(model.t3)folds the adapter into the base weights for about 2× faster generation. That variant is numerically close to, but not bit-identical with, the evaluated one.- Chatterbox adds an imperceptible PerTh watermark to every output.
Evaluation
Frozen test set set-1 contains:
- 60 Turkish sentences in 7 categories (questions, numbers, long sentences, proper nouns, short replies, emotional sentences, ı/i and foreign words);
- 9 voice conditions: the built-in voice, plus 8 FLEURS speakers (4 female, 4 male) as cloning references;
- 2 input variants (normalized text, raw text).
The three systems ran:
- with the same code (chatterbox
3f35dfc) and the same sampling settings; - with one shared seed per sentence and voice;
- with the same length cap, and without the alignment analyzer (it was removed in
3f35dfc).
Only the T3 weights differ between them.
Metrics:
- Character error rate: Whisper large-v3 transcriptions, with text normalized on both sides. Whisper large-v3-turbo serves as a second judge; it was used to filter the training data, so it may favor the adapter.
- Naturalness: UTMOS22 strong. It is trained on English and is meaningful only for relative comparisons.
- Speaker similarity: ECAPA-TDNN (VoxCeleb), generated clip against reference clip. WavLM-base-plus-sv is saturated at about 0.95 for every system and is not shown.
- Confidence intervals: 95 %, from a sentence-level paired bootstrap (10,000 resamples).
The test sentences were checked against all 161,151 training texts: 57 are clean, 3 share only number wordings, and none overlap.
Main result (normalized text, all 9 voices, 540 clips per system):
| System | CER % (Whisper large-v3) | CER % (Whisper turbo) | Sentences with CER > 15 % | UTMOS | Speaker sim. (ECAPA) | Trailing silence (s) | Hit length cap | Real-time factor |
|---|---|---|---|---|---|---|---|---|
| Chatterbox V2 (base) | 0.78 [0.27, 1.59] | 1.03 [0.51, 1.83] | 1.7 [0.0, 5.0] % | 3.42 [3.38, 3.46] | 0.698 [0.680, 0.714] | 0.56 [0.54, 0.58] | 1.9 [0.7, 3.1] % | 0.44 |
| Chatterbox V3 (base) | 1.06 [0.49, 1.89] | 1.42 [0.75, 2.34] | 2.4 [0.2, 6.1] % | 3.43 [3.39, 3.47] | 0.698 [0.680, 0.715] | 0.55 [0.53, 0.56] | 2.0 [0.7, 3.7] % | 0.46 |
| AKIL TTS 1.0 (V2 + LoRA) | 1.49 [0.78, 2.48] | 1.63 [0.90, 2.58] | 2.2 [0.2, 5.9] % | 3.41 [3.37, 3.44] | 0.734 [0.721, 0.746] | 0.22 [0.19, 0.25] | 0.7 [0.2, 1.5] % | 0.85 |
Differences (✔ = 95 % interval excludes zero; lower CER and trailing silence are better):
| Difference | CER % (large-v3) | UTMOS | Speaker sim. (ECAPA) | Trailing silence (s) |
|---|---|---|---|---|
| v3b_lora − v2_base | +0.72 [+0.38, +1.14] ✔ | -0.01 [-0.04, +0.01] | +0.036 [+0.029, +0.043] ✔ | -0.34 [-0.37, -0.30] ✔ |
| v3b_lora − v3_base | +0.44 [-0.07, +1.00] | -0.02 [-0.05, +0.00] | +0.036 [+0.029, +0.043] ✔ | -0.33 [-0.36, -0.29] ✔ |
| v3_base − v2_base | +0.28 [-0.03, +0.59] | +0.01 [-0.01, +0.04] | +0.000 [-0.005, +0.006] | -0.01 [-0.03, +0.00] |
Built-in voice (60 clips per system):
| System | CER % | UTMOS | Leading silence (s) | Trailing silence (s) | Duration / expected |
|---|---|---|---|---|---|
| Chatterbox V2 (base) | 0.85 [0.30, 1.67] | 3.86 [3.79, 3.93] | 0.13 [0.11, 0.16] | 0.50 [0.49, 0.51] | 1.26 [1.20, 1.33] |
| Chatterbox V3 (base) | 1.02 [0.24, 2.07] | 3.91 [3.85, 3.97] | 0.17 [0.14, 0.20] | 0.50 [0.49, 0.52] | 1.34 [1.28, 1.41] |
| AKIL TTS 1.0 (V2 + LoRA) | 1.56 [0.71, 2.61] | 3.91 [3.84, 3.97] | 0.06 [0.05, 0.07] | 0.04 [0.03, 0.06] | 1.11 [1.07, 1.15] |
Raw digits. The text is given as is (e.g. "14:30", "%15") instead of being normalized:
| System | CER % with digits left as is | CER % with normalized text |
|---|---|---|
| Chatterbox V2 (base) | 5.15 [3.04, 7.54] | 0.78 [0.27, 1.59] |
| Chatterbox V3 (base) | 8.62 [5.22, 12.28] | 1.06 [0.49, 1.89] |
| AKIL TTS 1.0 (V2 + LoRA) | 6.90 [4.32, 9.77] | 1.49 [0.78, 2.48] |
repetition_penalty 2.0 (the chatterbox-tts 0.1.7 default; built-in voice, k1 and e8; normalized text; no
alignment analyzer): without the analyzer the base models often fail to stop, while the adapter does not.
| System | CER % | UTMOS | Hit length cap | Trailing silence (s) |
|---|---|---|---|---|
| Chatterbox V2 (base) | 1.19 [0.45, 2.16] | 2.92 [2.86, 2.99] | 66 [59, 73] % | 0.91 [0.76, 1.05] |
| Chatterbox V3 (base) | 2.22 [0.81, 4.23] | 2.78 [2.70, 2.85] | 65 [57, 73] % | 0.61 [0.49, 0.74] |
| AKIL TTS 1.0 (V2 + LoRA) | 1.59 [0.86, 2.53] | 3.36 [3.32, 3.40] | 3 [1, 6] % | 0.15 [0.13, 0.18] |
Against the released library (built-in voice, normalized text). Two rows come from other setups:
- chatterbox-tts 0.1.7 as released uses the library defaults: alignment analyzer on,
repetition_penalty2.0, no length cap. - Live server is the AKIL production setup: 0.1.7, analyzer off,
repetition_penalty2.0, with trimming. It is not seed-matched.
| System | CER % | UTMOS | Duration / expected | Trailing silence (s) |
|---|---|---|---|---|
| Chatterbox V2, chatterbox-tts 0.1.7 as released | 2.07 [0.71, 4.08] | 3.45 [3.30, 3.58] | 1.74 [1.53, 2.00] | 0.59 [0.46, 0.72] |
| AKIL TTS 1.0, live server | 2.56 [1.09, 4.50] | 3.89 [3.83, 3.94] | 1.10 [1.06, 1.14] | 0.05 [0.04, 0.06] |
| Chatterbox V2 (base) | 0.85 [0.30, 1.67] | 3.86 [3.79, 3.93] | 1.26 [1.20, 1.33] | 0.50 [0.49, 0.51] |
| AKIL TTS 1.0 (V2 + LoRA) | 1.56 [0.71, 2.61] | 3.91 [3.84, 3.97] | 1.11 [1.07, 1.15] | 0.04 [0.03, 0.06] |
In absolute terms, one sentence ("07:15 … 11:40") scores about 20 % CER for every system, because Whisper writes the times as "7.15". This is an ASR formatting artifact and does not change the comparisons.
Training
- Data: YODAS2 Turkish.
tr000(manual subtitles), shards 0–29.tr100(automatic subtitles), every 17th of 425 shards (25 shards), used for expressive speech.
- Clip selection:
- Clips are 2–14 s long, cut at subtitle boundaries.
tr000clips are kept when Whisper's transcription matches the subtitle with CER ≤ 0.10.tr100clips with music or applause are dropped, the rest must pass quality filters, and clips cut mid-sentence are dropped as well.- At most 60 clips are taken per video, and 3 % of the videos are held out for validation.
- Size:
- 31,207 clips from 1,647 videos.
- 30,058 training clips; 31,534 samples after oversampling rare emotion labels.
- 1,149 validation clips.
- Provenance: Every clip, with its YODAS2 utterance IDs, timestamps and split, is listed in
v3b-egitim-klipleri.csv(run v3b = version 1.0). Source videos are listed inkullanilan-videolar.txt. - Procedure:
- LoRA with r = 32 and α = 64 on the q/k/v/o and gate/up/down projections of all 30 T3 layers.
- Loss: shifted cross-entropy on speech tokens, plus 0.1 × the text loss.
- 10 % text dropout, so that classifier-free guidance keeps working.
- Conditioning prompt and speaker embedding taken from other clips of the same video.
- 5,000 steps, batch 16, learning rate 1e-4 with 100 warm-up steps, bf16, on one RTX 5070 (12 GB).
- Training was interrupted at step 4,770. The released weights are the checkpoint with the best validation loss (step 4,500).
- Emotion tags: These were trained as extra text tokens but had no measurable effect, and they are not part of this release.
Limitations
- Language: Turkish only. The loader applies the adapter to every request; for other languages, use the base model.
- Omitted or cut words: Words are occasionally omitted or cut, mostly in very short sentences (e.g. "Tamam, hemen bakıyorum." → "Tamam.").
- Digits: Digits must be normalized; see the Raw digits table above.
- Evaluation scope: 60 sentences and one seed per condition. CER is ASR-based, and UTMOS is trained on English.
- Reference audio: The FLEURS references are 16 kHz read speech, which limits cloned-voice quality for every system.
- Emotion: There is no emotion or style control.
Responsible use
Clone a voice only with the speaker's consent, and do not use the model to impersonate people or to deceive. Keep the PerTh watermark that Chatterbox adds to every output.
License
- This repository: The adapter weights and code are released under the MIT license (LICENSE).
- Base model: Chatterbox (MIT, © Resemble AI).
- Training data: YODAS2 (CC BY 3.0). Attribution is given in NOTICE and
kullanilan-videolar.txt.
Trademarks
AKIL, AKIL AI and the AKIL logo (logo.png) are the names and the logo of AKIL AI. They belong to Ertuğrul Akkuş. They are excluded from the MIT license. The MIT license covers only the adapter weights and the code. All rights to the names and the logo are reserved. You may use the name to refer to this project, for example "based on AKIL TTS 1.0". You may not use the names or the logo for your own products, services or models. You may not use them in a way that suggests our endorsement.
Citation
@misc{akkus2026akiltts,
author = {Ertuğrul Akkuş},
title = {AKIL TTS 1.0: a Turkish adapter for Chatterbox Multilingual},
year = {2026},
howpublished = {\url{https://huggingface.co/Ertugrul1611/akil-tts-tr}}
}
@misc{chatterboxtts2025,
author = {{Resemble AI}},
title = {{Chatterbox-TTS}},
year = {2025},
howpublished = {\url{https://github.com/resemble-ai/chatterbox}}
}
@inproceedings{li2023yodas,
author = {Xinjian Li and Shinnosuke Takamichi and Takaaki Saeki and William Chen and Sayaka Shiota and Shinji Watanabe},
title = {{YODAS}: Youtube-Oriented Dataset for Audio and Speech},
booktitle = {IEEE Automatic Speech Recognition and Understanding Workshop (ASRU)},
year = {2023}
}
Türkçe özet
AKIL TTS 1.0, Chatterbox Multilingual'ın (V2) T3 modeli için Türkçe bir LoRA adaptörüdür. YODAS2'deki yaklaşık 67 saatlik Türkçe konuşmayla eğitildi. Aynı kod ve ayarlarla tabana göre:
- Zamanlama: Cümleler temiz ve doğal biçimde bitiyor; yerleşik seste sondaki sessizlik 0,50 sn'den 0,04 sn'ye iniyor.
- Durma: Bitiş algılayıcı olmadan,
repetition_penalty2,0'da bile model kendiliğinden duruyor. - Doğallık: UTMOS değişmiyor.
- Konuşmacı benzerliği: Biraz artıyor.
- Bedel: Anlaşılırlık biraz düşüyor (karakter hata oranı %1,49'a karşı %0,78) ve üretim yaklaşık 1,9 kat yavaşlıyor.
Rakamları yazıya çeviren turkce_metin ön işlemesi önerilir. Bütün ölçüm verileri akil-tts-tr-eval deposundadır.
Marka: AKIL, AKIL AI adları ve AKIL logosu (logo.png) Ertuğrul Akkuş'a (AKIL AI) aittir ve MIT lisansının kapsamı dışındadır. MIT lisansı yalnızca adaptör ağırlıklarını ve kodu kapsar. Adlar ve logo üzerindeki bütün haklar saklıdır. Bu projeden söz ederken adı kullanabilirsiniz (ör. "AKIL TTS 1.0 tabanlı"). Adları ve logoyu kendi ürün, hizmet ya da modellerinizde kullanamaz, onayımız varmış gibi gösteremezsiniz.