初めに
以下のTTSモデルを動かしていきます。音声とテキストの両方のデータを用いた新しい事前学習モデルです
以下にて記事の内容をリポジトリで公開しています。
開発環境
環境作成
まずは仮想環境を作成します
uv venv -p 3.11 source venv/bin/activate
次に関連するライブラリを入れます cudaは入っていないので,cpu版を入れていきます
uv pip install transformers sentencepiece datasets torch soundfile
実行
推論方法は,「(TTS) pipeline」を使う方法と「transformers modelling code」を使う方法があります。
TTS pipelineを使う方法
以下のコードで実行できます
from transformers import pipeline from datasets import load_dataset import soundfile as sf import torch synthesiser = pipeline("text-to-speech", "microsoft/speecht5_tts") embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation") speaker_embedding = torch.tensor(embeddings_dataset[7306]["xvector"]).unsqueeze(0) # You can replace this embedding with your own as well. speech = synthesiser("Hello, my dog is cooler than you!", forward_params={"speaker_embeddings": speaker_embedding}) sf.write("speech_pipeline.wav", speech["audio"], samplerate=speech["sampling_rate"])
transformers modelling codeを使う方法
以下のコードで実行できます
from transformers import SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan from datasets import load_dataset import torch import soundfile as sf from datasets import load_dataset processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts") model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts") vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan") inputs = processor(text="Hello, my dog is cute.", return_tensors="pt") # load xvector containing speaker's voice characteristics from a dataset embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation") speaker_embeddings = torch.tensor(embeddings_dataset[7306]["xvector"]).unsqueeze(0) speech = model.generate_speech(inputs["input_ids"], speaker_embeddings, vocoder=vocoder) sf.write("speech_modelling.wav", speech.numpy(), samplerate=16000)