TL;DR:
Chatterbox-Multilingual(Resemble AIのオープンソースTTS)を微調整し、LoRAアダプタ+トークナイザ拡張によってテルグ語、カンナダ語、ベンガル語、タミル語、マラヤーラム語、マラーティー語、グジャラート語、ヒンディー語をサポート。学習したのは7.8M / 544Mパラメータのみ。モデル+音声サンプルを提供。
---
問題
Chatterbox-Multilingualは23言語をゼロショットのボイス・クローニングでサポートしていますが、ドラヴィダ語(テルグ語、カンナダ語、タミル語、マラヤーラム語)がなく、インド・アーリア語系はヒンディー語以外のカバー範囲が限られています。つまり、表現のない500M+の話者がいます。
従来のアプローチは次のようになります。各言語ごとにG2P(グラフェムからフォノームへの変換)を作り、モデル全体を再学習し、それに数か月を費やします。ヒンディー語のシュワ削除だけでも未解決の問題です。ベンガル語のG2Pは特に難しいことで有名です。
アプローチ
そこで、フォノームの代わりにグラフェムのレベルで行いました。
- Indic文字でBPEトークナイザを拡張:
(2454 → 2871トークン)。テルグ語、カンナダ語、ベンガル語、タミル語、マラヤーラム語、グジャラート語のグラフェムを追加し、既存のデーヴァナーガリーに並べました。
ブラーミン系のウォームスタート
— 音韻的に同等なデーヴァナーガリー文字から、新しい文字埋め込みを初期化。テルグ語の「క」(ka)は、ヒンディー語の「क」(ka)から初期化されます。これは、ブラーミン系の文字体系が音声的な構造を共有しているためです——同じ音で、異なるグリフです。モデルはランダムノイズではなく、妥当な事前分布からスタートできます。
T3バックボーンにLoRA
— LlamaベースのT3モジュールの q/k/v/o 投影に対してランク32のアダプタを適用。学習可能パラメータは約7.8M(全体544Mの1.4%)。それ以外はすべて固定:ボコーダ(S3Gen)、話者エンコーダ、音声トークナイザ。言語のインクリメンタル学習
— 重み付きサンプリングで、言語を1つずつ追加。まずヒンディー語のみ(パイプラインを検証)で開始し、その後テルグ語+ヒンディー語、カンナダ語+テルグ語+ヒンディー語、最後に8つの言語すべて。これにより致命的な忘却を防ぎます——新しい7言語を追加した後で、ヒンディー語のCERが実際に改善しました。
結果
Whisper large-v3 ASRで、言語ごとに100個のホールドアウトサンプルを用いたCER(Character Error Rate):
| 言語 | CER | 注 |
|---|---|---|
| ヒンディー語 | 0.1058 | 0.29のベースラインから改善 |
| カンナダ語 | 0.1434 | |
| タミル語 | 0.1608 | |
| マラーティー語 | 0.1976 | |
| グジャラート語 | 0.2377 | |
| ベンガル語 | 0.2450 | |
| テルグ語 | 0.2853 | |
| マラヤーラム語 | 0.8593 | 実験的 — より多くのデータが必要 |
マラヤーラム語は大きく苦戦しています。おそらくより多くの学習データ、または専用の学習ラウンドが必要です。他の言語はすべて、判読可能で自然な響きの音声を生成します。
うまくいかなかった点/制限
-
マラヤーラム語
— CER 0.86は実質的に聞き取れません。可能性として、文字体系の複雑さ(多くのコンジャンクト)やデータ不足が挙げられます。
-
MOS評価はまだ
— CERは、単語が正しいことは示しますが、自然に聞こえることを保証しません。主観評価はまだ実施中です。
-
言語ごとに話者2人
— IndicTTSから男性+女性。すべての声のタイプに一般化することはできません。
-
コードミキシングなし
— ヒンディー+英語が混ざった文は、まだ特別に学習していません。
リンク
-
モデル+音声サンプル:
https://huggingface.co/reenigne314/chatterbox-indic-lora
-
記事(全文の解説):
https://theatomsofai.substack.com/p/teaching-an-ai-to-speak-indian-languages
-
ベースモデル:
[ResembleAI/chatterbox](
https://github.com/resemble-ai/chatterbox
)(MITライセンス)
クイックスタート
```python
from chatterbox.mtl_tts import ChatterboxMultilingualTTS
model = ChatterboxMultilingualTTS.from_indic_lora(device="cuda", speaker="te_female")
wav = model.generate("నమస్కారం, మీరు ఎలా ఉన్నారు?", language_id="te")
```
学習の詳細
- ハードウェア:1x RTX PRO 6000 Blackwell(96GB)
- データ:SPRINGLab IndicTTS + ai4bharat Rasa
- 学習ラウンド6回、インクリメンタルに言語を追加
- LoRA rank 32、alpha 64、bf16
パート2(コード付きの技術的な深掘り)を今週公開予定です。このアプローチについての質問には喜んで答えます。
[link] [comments]




