🐕

Elevenlabsのmultilingual TTSをgoogle colabで試してみた。

2023/05/19に公開

Elevenlabs TTSとは

Elevenlabs TTSはElevenlabsから提供されたリアルな声を高品質に生成するためのモデルであり、複数の言語をサポートする単一のTTSモデルとなっています。

https://huggingface.co/spaces/elevenlabs/tts

clone voicesとかもありますが課金しなきゃできませんでした。

リンク

Colab
github

準備

Google Colabを開き、メニューから「ランタイム→ランタイムのタイプを変更」でランタイムを「GPU」に変更します。

環境構築

インストール手順は以下の通りです。

!pip install elevenlabs -U

推論

(1) 英語での推論
話者の名前があるみたいです。

from elevenlabs import generate, play

audio = generate(
    text="Hi! I'm the world's most advanced text-to-speech system, made by elevenlabs.",
    voice="Bella"
)

play(audio, notebook=True)

(2)スペイン語での推論

# multilingal
audio = generate(
    text="¡Hola! Mi nombre es Arnold, encantado de conocerte!",
    voice="Arnold",  # "Domi"
    model='eleven_multilingual_v1'
)

play(audio, notebook=True)

(3)話者の名前とか諸々

from elevenlabs import voices
voices = voices()
print(voices)

Advanced Application

日本語から英語の音声を作成してみましょう。
今回り要するのはNLLB200というfacebookから出されている翻訳モデルです。
https://huggingface.co/facebook/nllb-200-distilled-600M

言語モデルのタイプは以下を参考に変えてみてください。
https://github.com/facebookresearch/flores/blob/main/flores200/README.md#languages-in-flores-200

(1)インストール

!pip install transformers

(2)翻訳モデルのロード

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

model_name = "facebook/nllb-200-distilled-600M"  # facebook/nllb-200-3.3B

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)

(3)日本語から英語の音声までのパイプライン

rticle = "こんにちは、私は他に並ぶもののない最新鋭の言語モデルです。"
inputs = tokenizer(article, return_tensors="pt")

translated_tokens = model.generate(
    **inputs, forced_bos_token_id=tokenizer.lang_code_to_id["eng_Latn"], max_length=60
)
ret = tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
print(ret)

from elevenlabs import generate, play

audio = generate(
    text=ret,
    voice="Bella"
)

play(audio, notebook=True)

(4)日本語からスペイン語の音声のパイプライン

lang_type = "epo_Latn"

article = "こんにちは、私は他に並ぶもののない最新鋭の言語モデルです。"
inputs = tokenizer(article, return_tensors="pt")

translated_tokens = model.generate(
    **inputs, forced_bos_token_id=tokenizer.lang_code_to_id[lang_type], max_length=60
)
ret = tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
print(ret)

from elevenlabs import generate, play

audio = generate(
    text=ret,
    voice="Bella",
    model='eleven_multilingual_v1'
)

play(audio, notebook=True)

(5)日本語からドイツ語

lang_type = "deu_Latn"

article = "こんにちは、私は他に並ぶもののない最新鋭の言語モデルです。"
inputs = tokenizer(article, return_tensors="pt")

translated_tokens = model.generate(
    **inputs, forced_bos_token_id=tokenizer.lang_code_to_id[lang_type], max_length=60
)
ret = tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
print(ret)

from elevenlabs import generate, play

audio = generate(
    text=ret,
    voice="Bella",
    model='eleven_multilingual_v1'
)

play(audio, notebook=True)

結果画面はこんな感じ

アラビア語とかはだめでした。。

最後に

今回はelevenlabsから新しく出たTTSについて試してみました。音声品質は抜群だったと感じます。
翻訳モデルとかと組み合わせると簡単なニュースのスクリプトとかは日本語で書いて世界中に発信できてしまいますね。日本語とかには対応していないみたいですが、英語みたいなイントネーションで日本語を喋るところまでは確認しました!(笑笑)
お金ある人clone voicesを試してみてください。多分かなり高精度なんじゃないかなーー

今後ともLLM, Diffusion model, Image Analysis, 3Dに関連する試した記事を投稿していく予定なのでよろしくお願いします。

Discussion