| --- |
| license: mit |
| language: |
| - bn |
| base_model: ResembleAI/chatterbox |
| tags: |
| - text-to-speech |
| - tts |
| - bengali |
| - bangla |
| - chatterbox |
| - fine-tuned |
| - zero-shot-tts |
| - speech |
| - speech-synthesis |
| datasets: |
| - ai4bharat/Shrutilipi |
| - ai4bharat/Rasa |
| - SPRINGLab/IndicTTS_Bengali |
| --- |
| |
| # ChatterBox Bangla |
|
|
| A fine-tuned version of [ResembleAI/chatterbox](https://huggingface.co/ResembleAI/chatterbox) for **Bengali (Bangla)** text-to-speech synthesis. |
|
|
|
|
| ## Zerohot TTS Output |
|
|
| | Original| Output| Text| |
| |--|--|--| |
| |<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/001.wav" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/001.wav" style="width: 100px;"></audio>|এই শোন শোন, আজকে স্কুলে কী হয়েছে জানিস? — না তুই জানিস না, তুই তো ছিলিসই না! তো দীপু স্যারের ক্লাসে — আরে দীপু স্যার মানে অঙ্কের স্যার, চেনিস না? যার নাক দিয়ে শোঁ শোঁ শব্দ হয়! তো স্যার বোর্ডে লিখছেন, আর পিছন থেকে রাহুল| |
| |<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/002.mp3" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/002.wav" style="width: 100px;"></audio>|আচ্ছা আমি তোকে একটা জিনিস বলব — আরে থাম থাম, আগে ফোনটা রাখ! হ্যাঁ তো, তো সেদিন আমি বাজার থেকে ফিরছিলাম — না না, এটা সেই বাজার না, ওই যে নতুন যেটা খুলেছে| |
| |<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/003.wav" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/003.wav" style="width: 100px;"></audio>|শোন, Morty ফুচকার মধ্যে যে আলু থাকে, সেই আলু একসময় মাটির নিচে অন্ধকারে বড় হয়েছে। কোনো আশা নেই, কোনো স্বপ্ন নেই, শুধু মাটি আর অন্ধকার। আর তারপরেও সে টিকে থেকেছে। তুই সেই আলুর চেয়েও কম resilient, এইটা বুঝলি?| |
| |<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/004.webm" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/004.wav" style="width: 100px;"></audio>|আমরা কেউ মাষ্টার হতে চেয়েছিলাম, কেউ ডাক্তার, কেউ উকিল। অমলকান্তি সে-সব কিছু হতে চায়নি। সে রোদ্দুর হতে চেয়েছিল! ক্ষান্তবর্ষণ কাক-ডাকা বিকেলের সেই লাজুক রোদ্দুর, জাম আর জামরুলের পাতায় যা নাকি অল্প-একটু হাসির মতন লেগে থাকে।| |
| |<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/005.wav" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/005.wav" style="width: 100px;"></audio>|শুরু থেকেই ঝড়ো ব্যাটিং উপহার দেন ভারতের ক্রিকেটারেরা। ওপেনার অভিষেক শর্মা এবং ইশান কিশান দুজনেই আলাদা ধাঁচের দুটি অর্ধশতক করেন, আর তাদের রান করার গতি ছিল অত্যন্ত fast.| |
| |<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/006.wav" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/006.wav" style="width: 100px;"></audio>|শুরু থেকেই ঝড়ো ব্যাটিং উপহার দেন ভারতের ক্রিকেটারেরা। ওপেনার অভিষেক শর্মা এবং ইশান কিশান দুজনেই আলাদা ধাঁচের দুটি অর্ধশতক করেন, আর তাদের রান করার গতি ছিল অত্যন্ত fast.| |
| |<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/refs/007.webm" style="width: 100px;"></audio>|<audio controls src="https://huggingface.co/BosonLab/chatterbox-bangla/resolve/main/audios/output/007.wav" style="width: 100px;"></audio>|আমরা কেউ মাষ্টার হতে চেয়েছিলাম, কেউ ডাক্তার, কেউ উকিল। অমলকান্তি সে-সব কিছু হতে চায়নি। সে রোদ্দুর হতে চেয়েছিল! ক্ষান্তবর্ষণ কাক-ডাকা বিকেলের সেই লাজুক রোদ্দুর, জাম আর জামরুলের পাতায় যা নাকি অল্প-একটু হাসির মতন লেগে থাকে।| |
|
|
|
|
| ## Model Details |
|
|
| - **Base model**: ResembleAI/chatterbox — multilingual ChatterBox (supports 23 languages) |
| - **Fine-tuned on**: Bengali speech corpus (~99 hours, 58,820 samples) |
| - ai4bharat/Shrutilipi (Bengali split) — 17,882 samples, ~28h |
| - ai4bharat/Rasa (Bengali split) — 28,088 samples, ~51h |
| - SPRINGLab/IndicTTS_Bengali — 12,852 samples, ~20h |
| - **Training steps**: 20,000 |
| - **Epochs**: ~10.6 |
| - **Architecture**: T3 (Text-to-Token Transformer) + HiFT-GAN vocoder |
| - **Vocabulary**: Extended from 704 → 2,530 tokens to cover Bengali characters |
| |
| ## Requirements |
| |
| ```bash |
| git clone https://github.com/gokhaneraslan/chatterbox-finetuning |
| cd chatterbox-finetuning |
| pip install -r requirements.txt |
| ``` |
| |
| ### One-time patch (upstream vocab resize fix) |
| |
| The upstream `chatterbox-finetuning` repo initialises T3 with a hard-coded 704-token vocabulary, which causes a size mismatch when loading this model (vocab=2530). Apply this one-line fix before running inference: |
| |
| ```bash |
| # Run from inside the cloned chatterbox-finetuning directory |
| python - <<'EOF' |
| import pathlib |
| f = pathlib.Path("src/chatterbox_/tts.py") |
| txt = f.read_text() |
| old = " t3 = T3()\n t3_state = load_file(ckpt_dir / \"t3_cfg.safetensors\")" |
| new = ( |
| " t3_state = load_file(ckpt_dir / \"t3_cfg.safetensors\")\n" |
| " from .models.t3.modules.t3_config import T3Config\n" |
| " t3 = T3(hp=T3Config(text_tokens_dict_size=t3_state[\"text_emb.weight\"].shape[0]))" |
| ) |
| f.write_text(txt.replace(old, new)) |
| print("Patched tts.py") |
| EOF |
| ``` |
| |
| ## Usage |
|
|
| ```python |
| import sys |
| sys.path.insert(0, "/path/to/chatterbox-finetuning") |
| |
| from huggingface_hub import snapshot_download |
| from src.chatterbox_.tts import ChatterboxTTS |
| import torchaudio |
| |
| model_dir = snapshot_download("BosonLab/chatterbox-bangla") |
| model = ChatterboxTTS.from_local(model_dir, device="cuda") |
| |
| text = "আমি বাংলায় কথা বলতে পারি। এটি একটি পরীক্ষামূলক বাক্য।" |
| wav = model.generate(text) |
| |
| torchaudio.save("output.wav", wav, model.sr) |
| ``` |
|
|
| ## With Voice Cloning |
|
|
| ```python |
| wav = model.generate(text, audio_prompt_path="reference.wav") |
| ``` |
|
|
| ## Files |
|
|
| | File | Description | |
| |------|-------------| |
| | `t3_cfg.safetensors` | Fine-tuned T3 text-to-token transformer (Bengali, vocab=2530) | |
| | `s3gen.safetensors` | Speech codec decoder (unchanged from base) | |
| | `ve.safetensors` | Voice encoder (unchanged from base) | |
| | `conds.pt` | Conditioning embeddings (unchanged from base) | |
| | `tokenizer.json` | Tokenizer extended with Bengali characters | |
|
|
| ## Training Data |
|
|
| All audio resampled to 16kHz. Text cleaned and normalized. |
| Datasets sourced from AI4Bharat and SPRINGLab public datasets. |
|
|
| ## Limitations |
|
|
| - Optimized for Bengali; other languages may degrade |
| - Best results with clear, well-punctuated Bengali text |
| - Emotion control inherited from base ChatterBox multilingual model |
| - Requires chatterbox-finetuning kit due to extended Bengali vocabulary |
|
|