Qwen3-TTSからIrodori-TTSに乗り換えたら、感情表現の正体は「参照音声」だった──日本語TTSを自動指標と115票のブラインド聴き比べで本気比較

テクノロジー

前回の環境構築編で、日本語特化TTS「Irodori-TTS」をRyzen AI Max+ 395の内蔵GPUで動かすところまで書きました。今回はその前段と後段、つまり「なぜ乗り換えたのか」と「本当に乗り換えて正しかったのか」の話です。

きっかけは、AlibabaのQwen3-TTSで日本語を読ませたときの3つの不満でした。

  1. 漢字を読み間違える。「二〇二四年」が「にせん にいよねん」になる
  2. 抑揚が日本語っぽくない。意味は通るが、どこか翻訳調
  3. 感情がつかない。「怒って」と指示しても、怒っているというよりオドオドしている

そこで見つけたのがAratakoさんのIrodori-TTS。日本語特化で、参照音声とスタイル指示を同時に使え、絵文字で笑いやため息まで入る。触った初日の私の感想は「抑揚が自然、感情も全部出る、これで決まり」でした。

その感想は、半分間違っていました。どこが間違っていたのかを数字で確かめた記録です。

先に結論

観点結論根拠
漢字の読みIrodoriが優位仮名の誤り率 0.114 vs 0.155、聴き比べ 6勝2敗(16件は同じ)
自然さ・抑揚声質を揃えれば同等。差は「参照音声の質」で決まる聴き比べ 4勝9敗 → 参照を替えると 6勝8敗(統計的に差なし)
感情の乗り参照音声の性質でほぼ決まる。captionを強めても絵文字を足しても補えない怒りの声の高さ: 参照次第で −0.9半音〜+8.0半音
話者の一貫性Qwenのボイスデザインは感情を付けると75%で別人になる12件中9件
速度(CPU)Irodoriが約3倍速いRTF 2.2〜2.6 vs 7.0(GPUの話は環境構築編)

乗り換え自体は正解でした。ただし「感情が全部出る」は私の耳の思い込みで、出るかどうかは参照音声で決まっていた。ここが今回の一番の学びです。

比較の土俵

まず机上の比較。2つは思想が違います。

Qwen3-TTSIrodori-TTS v4.1-Small
開発Alibaba (Qwen)Aratakoさん(個人)
ライセンスApache-2.0MIT
規模 / 方式0.6B / 1.7B、自己回帰0.8B、Rectified Flow DiT(非自己回帰)
言語10言語日本語のみ
出力24kHz48kHz
声の作り方プリセット話者 / 文章で声を作る(ボイスデザイン)/ 参照音声+その書き起こし文章で声を作る / 参照音声(書き起こし不要)/ 学習した話者埋め込み
声を固定したまま口調だけ変えるプリセット話者では可、クローンでは不可参照音声 + captionを同時指定できる
非言語音タグなし(「(笑)」は「ワラ」と読む)絵文字45種(🤭 笑い、😮‍💨 ため息、⏸️ 間 …)
電子透かしなしSilentCipherで埋め込み(品質への影響は測って無し)

生成した音声を今後の学習データに使いたい私には、両方とも許諾範囲です。Irodoriの透かしは来歴表示のためのもので、UTMOS(後述)で測っても品質差はありませんでした。

「参照音声+caption」が使えるのはIrodoriだけの利点で、キャラクターの声を保ったまま喜怒哀楽を出す、という私の用途にはこれが決定的でした。決定的だと思っていました。

Irodori-TTSのボイスクローンタブ。参照音声と「スタイル指示(caption)」を同時に渡せます。この画面の「参照声の診断」が、今回の結末で生まれた機能です
Irodori-TTSのボイスクローンタブ。参照音声と「スタイル指示(caption)」を同時に渡せます。この画面の「参照声の診断」が、今回の結末で生まれた機能です

数値化の方法

耳の印象だけで決めるのが嫌だったので、3観点をそれぞれ測れる形にしました。

観点方法
漢字の読み読み分けが難しい24文(数字・日付・助数詞・同形異音)を両方で合成し、ひらがな出力のASR(wav2vec2)で書き起こして正解の仮名との誤り率(CER)を出す。Whisperでも書き起こし、両方が間違いと言った項目だけを「本当の誤読」扱い
自然さUTMOS(自動MOS予測)を参考値に、決め手はブラインドA/B。同じ文を両エンジンで合成し、エンジン名を隠して「どちらが良いか」を自分で選ぶ
感情中立版に対して、声の高さ(F0)・高さの幅・音量・話速がどれだけ動いたかを測る。「動いた量」であって「正しく怒っているか」は耳で判定

ブラインドA/Bは、TTSアプリの中に「聴き比べ」タブとして作りました。

「聴き比べ」タブ。AとBのどちらがどのエンジンかは伏せられ、選ぶと記録されます。選好率のWilson 95%区間と符号検定のp値を自動集計。自分をだますための装置です
「聴き比べ」タブ。AとBのどちらがどのエンジンかは伏せられ、選ぶと記録されます。選好率のWilson 95%区間と符号検定のp値を自動集計。自分をだますための装置です

正直に書いておきます。評価者は私1人、票数は115。統計的に強い主張はできません。「私の耳」がどう判断したかを、思い込みを排して記録した、という位置づけです。

1. 漢字の読み: Irodoriが優位

左: 24文の仮名誤り率。右: 自然さの自動スコアUTMOS。右のグラフの意味は次節で
左: 24文の仮名誤り率。右: 自然さの自動スコアUTMOS。右のグラフの意味は次節で

仮名の誤り率はIrodori 0.114、Qwen 0.155。両方のASRが「間違い」と判定した項目はIrodori 7件、Qwen 16件。ブラインドA/Bでは24文中16文が「同じ」で、差が付いた8文はIrodori 6勝2敗でした。

Qwenの典型的な間違いを1つ。

Qwen3-TTS「二〇二四年五月二十日、午後三時半に集合。」── 「にせんにいよねん」、になっています
Irodori-TTS、同じ文。二〇二四年と読めています

ただしIrodoriも完璧ではなく、「大阪」「九時」などで揺れる文がありました。日本語特化でも読みは万能ではない、ただし相対的にはっきり優位、が結論です。

2. 自然さ: 私の耳は参照音声に騙されていた

ここから話がひねくれます。

触った初日の印象は「Irodoriのほうが抑揚が自然」でした。ところがブラインドA/Bの結果は4勝9敗でQwenが優勢。自動スコアUTMOSも2.44 vs 3.45で、Qwenが1ポイント高い。

なぜか。Irodoriのクローンに使っていた参照音声は、Irodori自身のボイスデザインで作った「落ち着いた三十代女性のナレーター、低めでゆっくり」という声(以下 narrator_f)でした。この参照音声そのもののUTMOSは3.38。クローン後に2.44まで落ちている。つまり差の大半は「エンジンの自然さ」ではなく「低くゆっくりな声をクローンしたときの劣化」でした。

確かめるために、Qwen側の出力音声をIrodoriの参照音声にして、同じ16文を作り直しました。声質を揃えるわけです。UTMOSは3.05まで回復し、ブラインドA/Bは6勝8敗、p=0.79。統計的には差がありません。

Qwen3-TTS(プリセット話者 Ono_Anna)「駅前の新しいカフェ、行ってみたんだけど、思ったより静かで落ち着けたよ。」
Irodori-TTS、narrator_fを参照にクローン。低くゆっくりな声で、少し濁ります
Irodori-TTS、上のQwenの声を参照にクローン。同じエンジンとは思えないくらい印象が変わります

自然さは、エンジンの差より参照音声の差。初日の私は、Irodoriで最初に聞いた声の印象を「エンジンの実力」と取り違えていました。

3. 感情: 「全部出る」は錯覚だった

これが本題です。narrator_fを参照にして「とても怒った口調で、強く速く」とcaptionを付けたIrodoriの出力。初日は「怒ってるな」と思って聞いていました。ブラインドで聞くと2勝8敗(対Qwenプリセット)、1勝9敗、p=0.021(対Qwenボイスデザイン)。完敗です。

音響的にも一致していました。怒りで声の高さ(F0)は−0.9半音、つまり中立より下がっている。人間が怒ると声は上がって高さの幅が広がるので、動いていないどころか逆です。

Irodori-TTS(narrator_f参照)「それで、結局どうなったんですか。教えてください。」を「とても怒った口調で」── 怒って、いますか?
Qwen3-TTS ボイスデザイン、同じ文を「非常愤怒的语气」で。怒っています。ただし……(後述)

仮説: 参照音声が感情と競合している

ここで私(人間側)が出した仮説が、「低くゆっくりなnarrator_fが、captionの要求する高くて速い怒りと矛盾して、参照側が勝っているのでは」でした。Claudeは「captionの強度(cfg_scale_caption)を上げれば効くはず」派でしたが、まず私の仮説から検証することにしました。

左: 「怒って」と指示したとき、中立に比べて声の高さが何半音上がったか。参照音声を替えた右側2本が本題。右: 感情を付けた版と中立版が同じ人物に聞こえるか(各12件)
左: 「怒って」と指示したとき、中立に比べて声の高さが何半音上がったか。参照音声を替えた右側2本が本題。右: 感情を付けた版と中立版が同じ人物に聞こえるか(各12件)
Irodoriの条件怒りでのF0変化高さの幅
narrator_f参照、caption強度3(既定)−0.9半音1.02倍
narrator_f、caption強度5−1.9半音0.80倍
narrator_f、強度5 + 絵文字 😠💥+2.2半音1.02倍
Irodoriでデザインした「標準的な声」を参照−0.1半音1.01倍
Qwenの声を参照+8.0半音2.61倍
(参考)Qwen ボイスデザイン+9.2半音3.62倍

captionを強めても、絵文字を足しても、ほぼ動きません。参照音声を替えた瞬間に+8半音。仮説は当たっていました。感情の乗りやすさは、指示の強さではなく参照音声の性質が上限を決めていた。

Irodori-TTS(narrator_f)、caption強度5 + 絵文字😠💥。頑張ってはいるが……
Irodori-TTS、Qwenの声を参照にして同じcaption。同じエンジン、同じ指示、参照音声だけ違います

この参照でブラインドA/Bを追加したところ、感情はQwenプリセットに対して6勝5敗(怒りは3勝0敗)、Qwenボイスデザインに対しては2勝5敗・5件が「同じ」。差は消えました。

ブラインドA/Bの全結果。参照音声をQwenの声に替えた下2行で、自然さ・感情ともQwenとの差が消えています
ブラインドA/Bの全結果。参照音声をQwenの声に替えた下2行で、自然さ・感情ともQwenとの差が消えています

Qwenボイスデザインの「怒り」は別人になる

ではQwenのボイスデザイン(文章で声を作る方式)が最強か。ここに落とし穴がありました。「中立版と感情版が同じ人物に聞こえるか」を12件ずつ判定すると、Qwenボイスデザインは9件が「別人」。感情は強いが声が変わる。キャラクターの声を保ったまま感情を付けたい用途では使えません。

Qwen3-TTS ボイスデザイン、中立版。上の「怒り」版と同じ人物に聞こえるでしょうか
Irodori-TTS(Qwenの声を参照)、中立版。こちらは怒り版と同じ人物のままです(12件中9件が同一と判定)

声を保ちながら感情を出せる条件同士(Qwenプリセット vs Irodori+良い参照)では、引き分け。ここまでが本編です。

4. 追試: ではIrodoriだけで「感情が乗る参照声」を作れるか

感情が乗った唯一の参照は、Qwenが作った声でした。Irodori自身のボイスデザインで同じような声を作れれば話は簡単です。captionを6種類(明るく元気な二十代女性、女性アナウンサー、明るい男性……)×3シードで18本デザインし、それぞれを参照にして怒り・喜びを生成し、F0の動きを測りました。

全滅でした。「高めで張りがある」「少女」といったcaptionはF0 440〜520Hzの甲高い声になり、音質スコアが1.3〜1.7まで落ちる。音質の良かった男性声(UTMOS 3.38)でも、怒りでの変化は+0.4半音。

音量やサンプルレートの違いかも、と疑って、Qwenの参照を大音量にしたり、narrator_fを24kHz・小音量にしたりもしましたが、結果は不変。声そのものの性質です。しかもピッチや話速、抑揚の幅といった静的な特徴では予測できない(抑揚幅17半音の声でも乗らない)。

仮説としては「Irodoriが自分で生成した音声を参照にすると、プロソディの癖まで忠実に再現されてcaptionの余地が残らないが、外部の声は音色だけが写るのでcaptionが効く」を考えていますが、実録音で確かめていないので断定はしません。

5. 副産物: 参照声の診断機能

「静的な特徴では予測できない、実際に生成しないと分からない」なら、実際に生成して測る機能を付ければいい。TTSアプリに参照声の診断を追加しました。

ボイスライブラリの「参照声の診断」。ピッチ・抑揚幅・話速・UTMOSを計測し、さらに「感情の乗りやすさテスト」でその声で中立/喜/怒を2文ずつ実際に生成してF0の動きから◎/○/△を判定します。narrator_fは△でした。知ってた
ボイスライブラリの「参照声の診断」。ピッチ・抑揚幅・話速・UTMOSを計測し、さらに「感情の乗りやすさテスト」でその声で中立/喜/怒を2文ずつ実際に生成してF0の動きから◎/○/△を判定します。narrator_fは△でした。知ってた

GPUで20〜30秒。参照音声を登録する前に「この声で感情は出るか」が分かります。

絵文字は本当に効くのか(おまけ)

Irodoriの絵文字制御は、初日の印象どおり効きました。ただしここも思い込みを排するため、「擬音だけ」「絵文字だけ」「両方」で切り分けています。

Irodori-TTS、絵文字なしで「あははっ、それ本当に言ってるの?」と文字で書いた笑い
同じ文に 🤭 を入れた版。文字で書くより自然な笑いになります。両方入れると更に強い
😮‍💨 のため息。小さく息が抜けて、その後の口調にも疲れが残ります

一方、📞(電話越し)はcaptionに「低め・穏やか」のようなトーン指定があると効きません。captionと絵文字が矛盾すると絵文字が負ける。感情が参照音声に負けるのと同じ構図で、Irodoriは「声の指定 > 話し方の指定 > 効果」の優先順位で動いているように見えます。

人間がやったこと、Claudeがやったこと

作業人間(私)Claude Code
「定量的に比べられないか」「3観点で」の要求方法の設計
評価セット(24文+16文+3文×5感情)、ASR/UTMOS/音響指標の実装
ブラインド聴き比べUIの実装
115票の聴き比べ、36件の話者判定
「参照音声が感情と競合している」仮説「caption強度で効くはず」派だった
追試5条件の生成と計測、反証の確認
「(笑)は普通にワラと読まれていた」等、聴いた事実の訂正推測が外れて訂正
参照声の診断機能要望実装

耳と仮説は人間、手数と計測はClaude。今回はClaudeの初期見立て(caption強度で補える)が外れ、私の仮説(参照が競合)が当たりました。逆のケースも山ほどあるので、どちらが偉いという話ではなく、「思い込みを数字で確かめる装置を素早く作れる」ことが、この組み合わせの価値だと思っています。

正直、気になっていること

  • n=1:評価者が私1人、115票。傾向は見えますが、統計的に強い主張はしていません
  • UTMOSは参考値:英語中心で学習されたモデルで、日本語のスコアは目安。アクセントの正誤は測れません
  • 参照は3〜4種:「参照音声で決まる」はその範囲での結果。実録音の参照は試していません(私の用途は合成音声同士なので)
  • Qwenへの指示は中国語:日本語指示より効いたので採用しましたが、Qwen側に不利な条件が残っている可能性はあります

まとめ

  • 読みはIrodori優位。日付・助数詞で差が出る
  • 自然さはエンジンより参照音声の質。低くゆっくりな声をクローンすると1ポイント落ちる
  • 感情は参照音声の性質が上限を決める。captionや絵文字では補えない。声を替えると+8半音
  • Qwenのボイスデザインは感情は強いが75%で別人。声を保ちたいなら選べない
  • Irodoriの確かな優位は、読み・速度・参照+caption同時指定・絵文字。自分の耳の初日の印象は、半分は参照音声への思い込みだった

ローカルTTSを試す方は、モデルの比較記事を読む前に、まず同じ参照音声で聞き比べてみてはいかがでしょうか。私はそれをしていなかったので、半日分の確信を数字に覆されました。

耳は鍛えるより、疑うほうが早い。

コメント

タイトルとURLをコピーしました