世界を動かす技術を、日本語で。

チャターボックス TTS

概要

ChatterboxはResemble AI初の本格オープンソースTTSモデル。MITライセンスで公開され、ElevenLabs等の商用モデルを上回る評価。感情誇張制御など独自機能を搭載。導入・利用が簡単で、開発・商用利用にも最適。全生成音声にウォーターマーク付与。

Chatterbox TTSとは

  • Resemble AIが開発した 初の本格オープンソースTTS(Text-to-Speech)モデル
  • MITライセンス で自由に利用・改変が可能
  • ElevenLabs等の 商用クローズドモデルと比較しても高評価
  • 感情誇張制御 (exaggeration control)を初めて搭載したOSS TTS
  • Hugging Face Gradioアプリ で即体験可能
  • 商用利用や精度向上には 有料TTSサービス も提供
    • 200ms未満の超低遅延 で安定運用が可能

主な特徴

  • 最先端(SoTA)のゼロショットTTS 技術
  • 0.5BパラメータのLlamaバックボーン
  • 誇張/強度コントロール による多彩な表現
  • アライメント情報を活用した高安定推論
  • 50万時間分のクリーンデータで学習
  • 全出力音声にウォーターマーク (Perth Watermarking)を埋め込み
  • 簡単なボイスコンバージョン(音声変換)スクリプト を同梱
  • ElevenLabsを上回るパフォーマンス

利用例・ヒント

  • TTSやボイスエージェント 用途
    • デフォルト(exaggeration=0.5, cfg_weight=0.5)で多くのケースに対応
    • 早口話者の場合、cfg_weightを0.3程度に下げることでペース調整
  • 表現力豊かな音声やドラマチックな読み上げ
    • cfg_weightを0.3程度に下げ、exaggerationを0.7以上に上げる
    • exaggerationを上げると話速が上がるためcfg_weightで調整

インストール方法

  • pipで簡単インストール
    • pip install chatterbox-tts
  • ソースからのインストールも可能
    • conda環境推奨(Python 3.11, Debian 11で開発・テスト済み)
    • 依存関係はpyproject.tomlで管理

使い方(サンプルコード)

  • 基本的な音声合成

    import torchaudio as ta
    from chatterbox.tts import ChatterboxTTS
    model = ChatterboxTTS.from_pretrained(device="cuda")
    text = "Ezreal and Jinx teamed up with Ahri, Yasuo, and Teemo to take down the enemy's Nexus in an epic late-game pentakill."
    wav = model.generate(text)
    ta.save("test-1.wav", wav, model.sr)
    
  • 別の音声プロンプトを指定して合成

    AUDIO_PROMPT_PATH = "YOUR_FILE.wav"
    wav = model.generate(text, audio_prompt_path=AUDIO_PROMPT_PATH)
    ta.save("test-2.wav", wav, model.sr)
    
  • さらに詳細例はexample_tts.pyやexample_vc.pyを参照

対応言語

  • 現在は英語のみ対応

技術協力・参考技術

  • Cosyvoice
  • Real-Time-Voice-Cloning
  • HiFT-GAN
  • Llama 3
  • S3Tokenizer
  • Perth Watermarking

責任あるAIのためのウォーターマーク

  • すべての生成音声に Perth(知覚閾値)ウォーターマーク を埋め込み
  • MP3圧縮や編集にも耐える 高精度な検出性能
  • ウォーターマーク抽出用スクリプト も提供

    import perth
    import librosa
    AUDIO_PATH = "YOUR_FILE.wav"
    watermarked_audio, sr = librosa.load(AUDIO_PATH, sr=None)
    watermarker = perth.PerthImplicitWatermarker()
    watermark = watermarker.get_watermark(watermarked_audio, sample_rate=sr)
    print(f"Extracted watermark: {watermark}")
    # 出力: 0.0(非ウォーターマーク)または1.0(ウォーターマーク有)
    

コミュニティ・注意事項

  • 公式Discord で共同開発・情報交換が可能
  • 悪用禁止 (倫理的な利用を推奨)
  • プロンプトデータは インターネット上の公開データ を利用

このようにChatterboxは、 高品質・高機能・オープンソース なTTSモデルとして、研究・開発・商用利用まで幅広く活用可能です。

Hackerたちの意見

ここで無料で試せるよ: https://huggingface.co/spaces/ResembleAI/Chatterbox

残念ながら、トレーニングやファインチューニングのコードは公開されてないから、FluxやStable Diffusionが「オープン」と呼ばれるのとは違うんだ。もっと良い「オープン」モデルが欲しいなら、これらのモデルがゼロショットには向いてるよ: Zeroshot TTS: MaskGCT, MegaTTS3 ゼロショットVC: Seed-VC, MegaTTS3 確かに、Seed-VCだけがトレーニング/ファインチューニングコードを持ってるけど、これらのモデルはChatterboxよりも音質が良いよ。だから、ファインチューニングできないものを使うなら、声に合ったより良いゼロショットモデルを使った方がいいよ。(特にByteDanceのMegaTTS3ね。ByteDanceの研究は、ElevenLabs以外のほとんどのTTS研究チームを圧倒してる。彼らは小規模なラボよりもずっと多くの資金と博士研究者を持ってるし、トレーニングデータも豊富だから。)

デモはこちら: https://resemble-ai.github.io/chatterbox_demopage/ (私のじゃないけど)これ、選りすぐりじゃなければいいリリースだと思う!毎回言ってるけど、作業としてはあんまり魅力的じゃないんだよね。でも私の実験では、音声AIはTTSよりも転写にかなり制約されてる。最近変わったのかな?

その通り!Speechmatics使ったことあるけど、転写は結構いい感じだよ。

ちなみに、最近の経験ではLLMは転写エラーを読み取るのがすごく得意だってわかったよ。まだLLMに別の転写や信頼度を与える実験はしてないけど、それも上手く使えると思う。

Huggingfaceのデモで遊んでみたけど、このページはちょっと選りすぐりかな?特に、私の返答にはそんな感情が出てこないんだよね。

デモに直接悪口が入ってるのがめっちゃ好き!しかも『パルプ・フィクション』からだし! > 「お前ら、動いたら全員ぶっ殺すからな。」 もう退屈な「ミス・デイジー」デモにはうんざりだよ。インディーTTSコミュニティでは、よくネイビーシールズのコピペが使われてるからね [1, 2]。Resembleが自ら悪口を使ってるのを見るのは新鮮だ。彼らはこれがどう使われるか分かってるんだ。 [1] https://en.wikipedia.org/wiki/Copypasta [2] https://knowyourmeme.com/memes/navy-seal-copypasta

合成データで回避できない?

ちょっと変な質問だけど、これ動かすのに最低限どのくらいのスペックが必要?

変な質問じゃないよ、私も聞きに来た!4桁のGPUが必要なのか、それとも12年前のThinkPadでも動くのか、またはその中間くらいのスペックでいいのか知りたいな。

古いCPUでどう動くか報告しようと思ったけど、30分ほどいじっても全然動かない。誰かの役に立てばと思って問題をリストアップするね。 - Python 3.13では動かない。幸い、uvを使えば3.12でvenvを簡単に作れる - numpy 1.26.4が存在しないって言われた。確かに存在するのに、uv pipがpytorchのリポジトリで探してた。--index-strategyフラグを渡して他のリポジトリをチェックさせたけど。これはuvのバグかもしれないけど、「numpy 1.26.4が存在しない」と言われて、numpyが今は2.xなのを見たら、頭がクラクラする。 - pip install chatterbox-ttsのバージョンはCPU専用モードでバグがあるから、Gitリポジトリをクローンした - mainの最新バージョンはDebianにprotobuf-compilerをインストールする必要がある - 解読できない変なCMakeエラーが出た。Pythonの開発ヘッダーがインストールされてないって文句言ってるのかな。なんでそんなのが必要なの?推論をやろうとしてるのに、Pythonをコンパイルするわけじゃないし…怒っても仕方ないって分かってるけど、他人のPythonプロジェクトを動かすときはいつもこんな感じ。問題にぶつかって、戻って、また問題にぶつかって、戻って、1時間経ってもまだ動かない。

それは馬鹿げた質問じゃないよ、最高の質問だ!無料で動かせるものがあるのに、レンタルの方が安いなら、DIYの意味がなくなるよね。

このGitHubの問題では、6-7GBのVRAMが必要って書いてあるよ: https://github.com/resemble-ai/chatterbox/issues/44 でも、モデルが良ければ、誰かがもっと少ないリソースで動かす方法を見つけるかもね。

問題ページを見る限り、今のところあまり最適化されてないみたいだね。[1] だから、標準の状態ではかなり高性能な消費者向けハードウェアが必要になるっぽい。ただ、改善の余地は大きいみたいだけど、俺は専門家じゃないからわからないけどね。[1]: https://github.com/resemble-ai/chatterbox/issues/127

すごく一般的なアクセントにはめっちゃ良い感じだけど、他のアクセント(これも結構一般的)だと、違うアクセントを選んじゃうことが多いね。例えば、いくつかのスコットランドの録音がオーストラリアのアクセントになっちゃったり、結構マイルドなヨークシャーのアクセントもそうだった。

Chatterboxが生成するすべての音声ファイルには、Resemble AIのパース(知覚閾値)ウォーターマーカーが含まれてるんだって。これはMP3圧縮や音声編集、一般的な操作に耐えながら、ほぼ100%の検出精度を維持する目に見えないニューラルウォーターマークなんだ。俺の勘違いかな?それとも、tts.pyのapply_watermark関数をコメントアウトするだけで簡単にウォーターマークを無効にできるの? https://github.com/resemble-ai/chatterbox/blob/master/src/ch... 俺は、この手のウォーターマークはモデルの重みの中に埋め込まれてて、簡単には分離できないものだと思ってたんだけど。もしオープンソースのモデルをリリースして、ウォーターマークを別の後処理ステップとして追加するなら、そもそもウォーターマークを使う意味ってあるの?

たぶん、CYA(カバー・ユア・アス)的なジェスチャーかな。元のStable Diffusionにもコンテンツフィルターがあったと思うし。トレーニングデータに関して、うっかりピーナッツバターが歯磨き粉に混ざるのを防ぐためかもしれないね。

そうそう、パーサーにはそれをオフにするフラグ --no-watermark もあるよ。たぶん、下流のユーザーが自分の製品の「機能」として取り込むために追加したんじゃないかな。

  1. OpenAI、Google、ElevenLabs以外の企業は、オープンソース化を積極的に進めないと完全に無視されることになるよ。TTS市場のリーダーは明らかで、しっかりと根付いてるから、ResembleやPlay(HT)なんかは、開発者向けに自分たちのウェイトを提供して、積極的にアプローチしないとね。[1] 2. それに対するCYAだよ。ウォーターマークがなければ、メディアからの悪用の声が上がるだろうし、特に404Mediaみたいな反AI団体からね。[1] これが正しいやり方だと思う。ソースコードとウェイトを提供して、独自のAPIやファインチューニングを用意すれば、開発者も手間をかけずに済む。それで市場シェアを取り戻せるんだ。[2] https://www.404media.co/wikipedia-pauses-ai-generated-summar...

感情の誇張は面白いけど、Elevenlabsのように、声の特徴を説明に基づいて生成できるものはなかなかないと思う。SparkTTSは追加のパラメータを許可してるし、GitHubのプロジェクトにはモデルがより細かい感情制御のために改良されるかもしれないことを示すプレースホルダーがある。今のところ、プロソディやトーンをテキストの中で強く影響を与えることで、他のモデルと一緒に成功したことがあるけど、Elevenよりもずっと面倒なプロセスだね。

面白いデモだね。自分の声のスニペットをアップロードして、自分のテキストでテストしてみた感想をいくつか。 - 出力には自分の声の特徴がいくつかあったけど、そんなに似てはいなかった。(それでも、こんな小さなスニペットからできるのはすごいと思った) - "CFG/pace"(CFGが何かは知らないけど)を少しでも上げると、しばしば完全に意味不明になる - ブリティッシュアクセントかアメリカンアクセントのどちらになるかはすごく不安定だった。(俺のアクセントはオーストラリアのなんだけど…) - 感情の誇張は面白かったけど、どんな感情が出るかはかなりバラバラだった。

友達や家族に、電話の会話には特に疑いを持つように言うのを忘れないでね。Walmartのギフトカードがどうしても必要だって言ってる友達が、実はその友達じゃない可能性が高くなってきてるから。 :(

サンプル推論コードと音声クローンの例を含む実装例: https://github.com/basetenlabs/truss-examples/tree/main/chat... まだストリーミングの作業中だよ。

残念ながら、英語専用だよ。