tortoise-tts - 品質を重視したトレーニングを受けたマルチボイスTTSシステム

(A multi-voice TTS system trained with an emphasis on quality)

Created at: 2022-01-28 12:33:15
Language: Python
License: Apache-2.0

Tortoise は、次の優先順位で構築されたテキスト読み上げプログラムです。

  1. 強力なマルチボイス機能。
  2. 非常にリアルな韻律とイントネーション。

このリポジトリには、推論モードでTortoise TTSを実行するために必要なすべてのコードが含まれています。

名前には何が含まれていますか?

私はモハーベ砂漠の動植物にちなんで私のスピーチ関連のレポに名前を付けています。カメは頬に少し舌があります:このモデルはめちゃくちゃ遅いです。自己回帰デコーダ拡散デコーダの両方を活用します。どちらもサンプリングレートが低いことで知られています。K80 では、2 分ごとに中程度のサイズの文を生成することを期待してください。

デモ

出力例の大規模なリストについては、このページを参照してください。

利用案内

コラブ

コラブはこれを試してみる最も簡単な方法です。私はあなたがここで使うことができるノートブックをまとめました:https://colab.research.google.com/drive/1wVVqUPqwiDBUVeWWOUNglpGhU3hg_cbR?usp=sharing

取り付け

これを自分のコンピューターで使用する場合は、NVIDIA GPUが必要です。取り付け:

git clone https://github.com/neonbjb/tortoise-tts.git
cd tortoise-tts
pip install -r requirements.txt

do_tts.py

このスクリプトを使用すると、1 つのフレーズを 1 つ以上の音声で話すことができます。

python do_tts.py --text "I'm going to speak this" --voice dotrice --preset fast

read.py

このスクリプトは、大量のテキストを読み取るためのツールを提供します。

python read.py --textfile <your text to be read> --voice dotrice

これにより、テキストファイルが文に分割され、一度に1つずつ音声に変換されます。一連の音声クリップが生成されると、そのクリップが出力されます。すべてのクリップが生成されると、それらを1つのファイルに結合して出力します。

時々カメは出力を台無しにします。不正なクリップを再生成するには、--regenerate 引数を指定して再実行します。

read.py

ティッカー

カメは次のようにプログラムで使用できます:

reference_clips = [utils.audio.load_audio(p, 22050) for p in clips_paths]
tts = api.TextToSpeech()
pcm_audio = tts.tts_with_preset("your text here", reference_clips, preset='fast')

音声カスタマイズガイド

カメはマルチスピーカーモデルになるように特別に訓練されました。これは、参照クリップを参照することによって実現されます。

これらの参照クリップは、音声生成をガイドするために提供するスピーカーの録音です。これらのクリップは、音声のピッチやトーン、話す速度、さらには lisp や吃音などの話し手の欠陥など、出力の多くのプロパティを決定するために使用されます。リファレンスクリップは、音量、バックグラウンドノイズ、録音品質、リバーブなど、オーディオ出力の音声に関連しない側面を判断するためにも使用されます。

提供された声

このレポには、あらかじめパッケージ化されたいくつかの音声が付属しています。あなたはそれらの多くに精通しているでしょう。:)

提供された音声のほとんどは、トレーニングセットに見つかりませんでした。実験的には、トレーニングセットの音声は、トレーニングセット外の音声よりもリアルな出力を生成するようです。「列車」が先頭に付けられた声は、トレーニングセットから来ました。

新しい音声を追加する

カメに新しい声を追加するには、次の操作を行う必要があります。

  1. スピーカーのオーディオクリップを収集します。良い情報源は、YouTubeのインタビュー(youtube-dlを使ってオーディオを取得できます)、オーディオブックやポッドキャストです。適切なクリップのガイドラインは、次のセクションにあります。
  2. クリップを約10秒のセグメントにカットします。少なくとも 3 つのクリップが必要です。多ければ多いほど良いですが、私はテストで最大5つまでしか実験しませんでした。
  3. クリップを浮動小数点形式と22,050サンプルレートのWAVファイルとして保存します。
  4. voices/ にサブディレクトリを作成する
  5. クリップをそのサブディレクトリに配置します。
  6. 亀のユーティリティを --voice=<your_subdirectory_name> で実行します。

適切な参照クリップの選択

前述のように、参照クリップは Tortoise の出力に大きな影響を与えます。次に、適切なクリップを選ぶためのヒントをいくつか示します。

  1. バックグラウンドミュージック、ノイズ、リバーブを含むクリップは避けてください。これらのクリップはトレーニング データセットから削除されました。カメは彼らとうまくいく可能性は低いです。
  2. スピーチは避けてください。これらは一般に、増幅系によって引き起こされる歪みを有する。
  3. 電話のクリップは避けてください。
  4. 過度の吃音、スタンマリング、または「uh」や「like」などの単語を含むクリップは避けてください。
  5. あなたの出力が次のように聞こえるように聞こえるように話されているクリップを見つけてみてください。たとえば、ターゲットの声がオーディオブックを読むのを聞きたい場合は、本を読んでいる相手のクリップを探してみてください。
  6. クリップで話されているテキストは関係ありませんが、多様なテキストの方がパフォーマンスが良いようです。

高度な使用法

生成設定

カメは主に自己回帰デコーダモデルと拡散モデルを組み合わせたものです。どちらも、使いやすさのために抽象化した回すことができるノブがたくさんあります。私は、設定のさまざまな順列を使用して何千ものクリップを生成し、音声のリアリズムと明瞭さのメトリックを使用してその効果を測定することでこれを行いました。私はデフォルトを私が見つけることができた最高の全体的な設定に設定しました。特定のユースケースでは、これらの設定で遊ぶのが効果的かもしれません(そして、私は何かを逃した可能性が非常に高いです!

これらの設定は、Tortoise にパッケージ化された通常のスクリプトでは利用できません。ただし、API では使用できます。完全なリストについては、「」を参照してください。

api.tts

潜在的な声で遊ぶ

カメは、潜伏点を生成する小さなサブモデルを介して個別に供給し、生成されたすべての潜伏物の平均を取ることによって、参照クリップを摂取します。私が行った実験は、これらの点潜在性が非常に表現力豊かであり、トーンから発話率、スピーチの異常まですべてに影響を与えることを示しています。

これはいくつかのきちんとしたトリックに役立ちます。たとえば、2つの異なる声をカメにフィードして組み合わせると、その2つの声の「平均」がどのようなものかが出力されます。理論的には、潜在的なものをあるスピーカーから別のスピーカーに徐々にシフトさせるTortoiseの小さな拡張機能を構築し、それを少しの話し言葉のテキストに適用することもできます(私はまだ実装していませんが、すぐに到達するかもしれません!私はここでできる他の興味深いことがあると確信しています。あなたが見つけたものを教えてください!

私にフィードバックを送ってください!

亀のような確率的モデルは、「拡張検索」と考えるのが最善です - この場合、特定のテキスト文字列の可能な発話の空間を通して。これらのスペースを熟読することへのコミュニティの関与の影響(GPT-3やCLIPで行われているなど)は、本当に私を驚かせました。あなたがここに文書化されていないカメでできることをきちんと見つけたら、私に報告してください!このページに公開していただきたいです。

カメ検出

このモデルが誤用されるかもしれないという懸念から、私はオーディオクリップがTortoiseから来た可能性を伝える分類子を構築しました。

この分類子は、任意のコンピューターで実行でき、使用法は次のとおりです。

python is_this_from_tortoise.py --clip=<path_to_suspicious_audio_file>

This model has 100% accuracy on the contents of the results/ and voices/ folders in this repo. Still, treat this classifier as a "strong signal". Classifiers can be fooled and it is likewise not impossible for this classifier to exhibit false positives.

Model architecture

Tortoise TTS is inspired by OpenAI's DALLE, applied to speech data and using a better decoder. It is made up of 5 separate models that work together. I've assembled a write-up of the system architecture here: https://nonint.com/2022/04/25/tortoise-architectural-design-doc/

Training

These models were trained on my "homelab" server with 8 RTX 3090s over the course of several months. They were trained on a dataset consisting of ~50k hours of speech data, most of which was transcribed by ocotillo. Training was done on my own DLAS trainer.

I currently do not have plans to release the training configurations or methodology. See the next section..

Ethical Considerations

Tortoise v2 works considerably better than I had planned. When I began hearing some of the outputs of the last few versions, I began wondering whether or not I had an ethically unsound project on my hands. The ways in which a voice-cloning text-to-speech system could be misused are many. It doesn't take much creativity to think up how.

After some thought, I have decided to go forward with releasing this. Following are the reasons for this choice:

  1. It is primarily good at reading books and speaking poetry. Other forms of speech do not work well.
  2. It was trained on a dataset which does not have the voices of public figures. While it will attempt to mimic these voices if they are provided as references, it does not do so in such a way that most humans would be fooled.
  3. The above points could likely be resolved by scaling up the model and the dataset. For this reason, I am currently withholding details on how I trained the model, pending community feedback.
  4. I am releasing a separate classifier model which will tell you whether a given audio clip was generated by Tortoise or not. See
    tortoise-detect
    above.
  5. If I, a tinkerer with a BS in computer science with a ~$15k computer can build this, then any motivated corporation or state can as well. I would prefer that it be in the open and everyone know the kinds of things ML can do.

Diversity

The diversity expressed by ML models is strongly tied to the datasets they were trained on.

Tortoise was trained primarily on a dataset consisting of audiobooks. I made no effort to balance diversity in this dataset. For this reason, Tortoise will be particularly poor at generating the voices of minorities or of people who speak with strong accents.

Looking forward

Tortoise v2 is about as good as I think I can do in the TTS world with the resources I have access to. A phenomenon that happens when training very large models is that as parameter count increases, the communication bandwidth needed to support distributed training of the model increases multiplicatively. On enterprise-grade hardware, this is not an issue: GPUs are attached together with exceptionally wide buses that can accommodate this bandwidth. I cannot afford enterprise hardware, though, so I am stuck.

I want to mention here that I think Tortoise could do be a lot better. The three major components of Tortoise are either vanilla Transformer Encoder stacks or Decoder stacks. Both of these types of models have a rich experimental history with scaling in the NLP realm. I see no reason to believe that the same is not true of TTS.

The largest model in Tortoise v2 is considerably smaller than GPT-2 large. It is 20x smaller that the original DALLE transformer. Imagine what a TTS model trained at or near GPT-3 or DALLE scale could achieve.

If you are an ethical organization with computational resources to spare interested in seeing what this model could do if properly scaled out, please reach out to me! I would love to collaborate on this.

Acknowledgements

This project has garnered more praise than I expected. I am standing on the shoulders of giants, though, and I want to credit a few of the amazing folks in the community that have helped make this happen:

  • Hugging Face, who wrote the GPT model and the generate API used by Tortoise, and who hosts the model weights.
  • Ramesh et al who authored the DALLE paper, which is the inspiration behind Tortoise.
  • Nichol and Dhariwal who authored the (revision of) the code that drives the diffusion model.
  • Jang et al who developed and open-sourced univnet, the vocoder this repo uses.
  • lucidrains who writes awesome open source pytorch models, many of which are used here.
  • Patrick von Platen whose guides on setting up wav2vec were invaluable to building my dataset.

Notice

Tortoise was built entirely by me using my own hardware. My employer was not involved in any facet of Tortoise's development.

If you use this repo or the ideas therein for your research, please cite it! A bibtex entree can be found in the right pane on GitHub.