自分だけの音声合成モデルを作る[Qwen3-TTSで学習データ作成]

はじめに

Qwen3-TTS の VoiceDesign 機能を活用して、自分好みの声で学習用の音声データセットを作成しました。その際の手順と環境構築、データ作成の流れを記載します。

Qwen3-TTSを使う

まずは、Qwen3-TTS の公式リポジトリからコードを取得します。

github.com

本モデルの動作には flash-attn の導入が必要となるため、今回は WSL 上に環境を構築しました。

WSL 環境に入ります。

wsl

仮想環境の構築と、qwen-tts パッケージのインストールを行います。

python -m venv qwen3-tts

pip install -U qwen-tts

次に flash-attn をインストールします。 インストール時にジョブ数を制限しないと、ビルド中にメモリ不足エラーが発生しまいました。そのため、以下のように環境変数 MAX_JOBS を指定してインストールを行います。

MAX_JOBS=4 pip install -U flash-attn --no-build-isolation

VoiceDesign

インストール完了後、以下のコマンドでVoiceDesign 用の WebUI が起動します。

qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --ip 0.0.0.0 --port 8000

起動後、ブラウザから WebUI にアクセスして VoiceDesign を行います。

voice design

主に性別、年齢、話し方の特徴などを自然言語のプロンプトで指定することで、生成される声をコントロールできます。 今回は、各要素ごとに以下のようなキーワードを組み合わせることで、好みの声を作成しました。

キーワードの例:

カテゴリ プロンプト例
性別・年齢 Male (男性), Female (女性), Young (若い), Elderly (高齢者), XX years old (年齢を指定)
声域・ピッチ High-pitched (高い声), Low-pitched (低い声), Soprano (ソプラノ), Bass (バス)
声質 Soft (柔らかい), Husky (ハスキー), Breathy (息交じり), Warm (温かみのある), Whisper (ささやくように)
感情・話し方 Calm (穏やか), Energetic (元気), Sad (悲しげ)

なお、シード値によって生成される声が変化するため、同じプロンプトを入力した上で何度か生成を試したほうが良いです。

データセット作成

VoiceDesign で作成した発話データをオリジナル (リファレンス) とし、VoiceCloning (音声クローン) 機能を利用して発話データを増やしていきます。

VoiceCloning を行う際には、リファレンス音声の文字起こしテキストを指定するパラメータがあるため、先ほどの生成時に使用したテキストを設定します。

qwen-tts のベース実装では、以下のような処理でクローンを実行できます。

import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel

# Baseモデルをロードします
model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-Base", 
    device_map="cuda:0", 
    dtype=torch.bfloat16
)

# リファレンス音声とテキストを準備します
ref_audio = "path/to/reference.wav"
ref_text = "リファレンス音声の書き起こしテキスト"

# 新しい音声を生成します
output_text = "ここに読ませたい文章"
wavs, sr = model.generate_voice_clone(
    text=output_text,
    ref_audio=ref_audio,
    ref_text=ref_text
)

# 生成された音声を保存します
sf.write("output.wav", wavs[0], sr)

データセットの作成には、青空文庫から 「あの時の王子くん」 (星の王子さま) の文章を使用しました。漢字の割合が少なく、ひらがなで表現されている部分が多いため、音声合成モデルが正しい発音で読み上げやすいと判断したためです。

生成結果を確認したところ、たまにイントネーションが不自然になる部分もありますが、学習データとして十分な量の音声を用意することができました。

おわりに

Qwen3-ttsを使って好みの声の十分なデータを用意することができました。 今回作成したデータセットを別の音声合成モデルに学習させることで、自分だけのオリジナル音声合成モデルの構築を進めていきます。