カツプロ
ログイン
← 投稿一覧
AI・生成AI使ってみた 2026年8月26日

Style-Bert-VITS2の学習でAI感が消えた話

かつ

かつ

2026/08/26

「Style-Bert-VITS2 AI感が消えた 正体はアクセント 音声5分で学習 踏んだ罠12個」と書かれたアイキャッチ画像

この記事で分かること

  • 日本語の音声AIで感じる「AIが喋っている感」の正体(数値で見えました)
  • Style-Bert-VITS2 が、なぜそれを解決できたのか(仕組みの違い)
  • 学習に必要だったデータ量・時間・PCの条件(実測)
  • 導入で踏んだ罠12個と、その直し方
  • AGPL ライセンスの注意(Webサービスに組み込むと影響します)

結論を先に書きます

日本語の作品を作るなら Style-Bert-VITS2(以下 SBV2)です。 完全無料、オープンソース、自分のPCで動きます。

そして 一番効いたのは「演技を付けなくてよくなった」ことでした。 前に使っていた Qwen3-TTS は演技の指示を書かないと棒読みでしたが、SBV2 は 何も指定しなくても演技として成立します。 全セリフに指示を書く作業がまるごと消えました。

ただし SBV2 は「既にある声を学習する」ことしかできません。新しい声は作れません。 声を作るのは前の記事の Qwen3-TTS の役目です。両方要ります。

もう一つ、ライセンスは AGPL v3 です。 ローカルで動画を作るぶんには問題ありませんが、Webサービスに組み込むとソース公開の義務が発生します。 ここは先に確認してください。


何に困っていたか:日本語の「AI感」の正体

ずっとこう感じていました。

シーンごとにセリフが変わるたびに、自然な日本語と、AIが喋っている感がわかる変な話し方が混ざっている。これを無くしたい

「全部が変」ではありません。自然に読める文と、急に不自然になる文が混ざるのです。原因が分からないので直しようもありませんでした。

正体は、日本語のピッチアクセントの誤りでした

「橋」と「箸」を分ける、あの高低のことです。ここが1語でも狂うと、文全体が急に不自然に聞こえます。

数値で見えた例を出します。作中で何度も出てくる4拍の言葉(音素にすると6音)の高低を測りました。作品が未公開なので、言葉そのものは伏せます。

その言葉が出てくる文 4拍の高低
肯定して言い切る文 低 高 高 高
問いかける文 高 低 低 低

同じ言葉なのに正反対です。

これが「途中で急に上がる」と感じていたものの正体でした。そして 指示では直りません。 生成のたびに変わるからです。言葉の高低を決める仕組みそのものが無いのだから、指示で押さえられるはずがありませんでした。


Style-Bert-VITS2 とは何か

日本の個人開発者 litagin 氏が公開している音声合成の仕組みです。

最初の公開 2023年12月27日(v1.0)
取材時点の最新 2025年8月24日(v2.7.0)
もとになったもの 中国発の Bert-VITS2。これに日本語のアクセント処理とスタイル指定を足したもの
費用 完全無料・オープンソース・ローカルで動く
ライセンス AGPL v3(一部 LGPL v3)

ライセンスの注意(ここは重要です)

  • 動画制作にローカルで使うぶんには問題ありません。 生成した音声そのものに AGPL は及びません
  • ただし Web サービスに組み込むと、そのサービスのソース公開義務が発生します。 SaaS として提供する用途には向きません
  • 付属の音声モデル(あみたろ・JVNV など)には モデルごとの個別の規約 があります。クレジット表記が必須のもの、年齢制限作品への使用が禁止されているものがあります。使うなら必ず読んでください
  • 開発者からの「お願い」として、なりすましやディープフェイク目的の利用は避けてほしいとされています

このシリーズの前の記事で、SBV2 系の配布モデルを試して「滑舌が悪い」と不採用にしました。今回書くのはそれとは別の話です。配布されているモデルから選ぶのではなく、自分の声を自分で学習させました。 同じ仕組みでも、そこが違います。


なぜ解決したのか:仕組みが違いました

前に使っていた Qwen3-TTS と並べます。

Qwen3-TTS Style-Bert-VITS2
得意なこと どんな声でも数秒で真似る 日本語を正しく読む
声の作り方 手本を数秒渡すだけ その声で数時間の学習が必要
日本語のアクセント 扱っていない 読む前に音素とアクセントを決める
演技の指示 日本語の文章で書ける 数値(スタイル・強さ)が中心
ライセンス Apache 2.0 AGPL v3

SBV2 は、日本語 BERT と pyopenjtalk を使って、読ませる前に音素とアクセントを確定させます。

これが、□□□□なんだ → k o r e g a pau □ □ □ □ □ □ n a N d a
                      (□の部分が、上で伏せた4拍の言葉です)

しかも given_tone で高低を一音ずつ数値で指定できます。 つまり、生成のたびに揺れていたものを、こちらで固定できるということです。同じ言葉が文によって裏返る、ということが二度と起きません。

Qwen は「どんな声でも真似られるが、日本語の読み方は知らない」。SBV2 は「日本語の読み方を知っているが、声は学習しないと作れない」。得意が完全に裏返しでした。


学習データはどう作ったか

ここがこの記事ならではの話だと思います。

Qwen で作った音声を、そのまま SBV2 の学習データにしました。

① 人が声を設計する(手本を作る)
       ↓
② Qwen がその声で全セリフを読む
       ↓
③ その音声を SBV2 に学習させる
       ↓
④ SBV2 が同じ声で、日本語を正しく読む

声は同じまま、日本語の読み方だけが上手くなります。

すでに Qwen で全話ぶんの音声を作っていたので、学習データを新しく用意する必要がありませんでした。作りかけの作品がそのまま学習素材になったわけです。

注意:仕上げの加工をかけた音声を学習させてはいけません

一つ失敗しました。

一部の役の音声には、残響と、高音を落とすまるめの処理をかけていました。それをそのまま学習させると、残響ごと「その人の声」として覚えてしまいます。 あとから外せません。

仕上げの加工を外した音声を作り直してから、学習させました。 学習に渡すのは、必ず加工前の素の音声にしてください。


学習に何が必要だったか(実測)

データ 学習
主人公 82本・5.3分 3000ステップ
語り手 62本・4.7分 3000ステップ
相手役 49本・3.4分 3000ステップ

5分程度の音声で声になりました。 主人公役については「その声には聞こえる」と判断できる水準でした。何時間ぶんも要るのだろうと身構えていたので、ここは拍子抜けするほど少なくて済みました。

PC の条件

  • 学習には NVIDIA の GPU が必須です(生成だけなら CPU でもできます)
  • VRAM 4GB でも batch_size 1 なら通りました
  • 1000ステップにおよそ1時間半(RTX 3050 Ti Laptop・VRAM 4GB)

3000ステップ必要です。1000では足りません

これは2つの声で同じ判定になりました。途中経過を聞き比べた印象はこうです。

806(ステップ)でも十分聞き取れるが、2000の方が言葉に感情がのっていたり、音の高低がわかりやすい

1000ステップでも「聞き取れる」ところまでは行きます。 そこで止めたくなりますが、感情と高低は、そこから先で乗ってきます。 一晩回せば届くので、削らないほうがいいです。

保管するのは、声1つあたり290MB

学習が終わると、声1つで 約2.7GB になります。ただし 永久に守るべきは約290MB だけです。

中身 容量
モデル本体 240MB
学習の元になった音声 50MB
守るべき合計 約290MB
残り(途中経過など) 学習を続けないなら消せる

このモデルは必ず保管してください。 学習は毎回わずかに違う結果になります。消すと「前と同じ声」は二度と出せません。 同じデータで学習し直しても、同じにはなりません。


踏んだ罠12個

ここが記事の核です。導入でかなりの時間を溶かしたので、全部書いておきます。Windows 環境です。

# 症状 直し方
1 日本語のパス Failed to initalize Mecab 英数字だけのパスに置く
2 av の依存衝突 CompileError: av\logging.pyx faster-whisper stable_ts を requirements から外す(文字起こし用で、学習には不要)
3 pkg_resources が無い ModuleNotFoundError pip install "setuptools<81"
4 transformers が新しすぎる AutoModelForMaskedLM requires PyTorch transformers==4.44.2 tokenizers<0.20
5 pyannote.audio が torch を CPU 版に差し替える 入れた後に CUDA False pyannote の後にCUDA版 torch を --force-reinstall
6 pyopenjtalk のワーカーが起動しない ConnectionRefusedError initialize_worker() を呼ばない(無くても動く)
7 numpy の版違い numpy.dtype size changed numpy<2 に固定
8 文字コード UnicodeDecodeError: cp932 subprocesserrors="replace"
9 ユーザー辞書のロック PermissionError: WinError 5 update_dict() を呼ばない(中身は空)
10 pyannote が新しすぎる torchcodec is not available pyannote.audio==3.1.1
11 CUDA の無い Python で起動していた 7時間で200ステップしか進まない venv の python を絶対パスで指定する
12 config.ymlmodel_name 別の声のモデルが、違う名前で保存された 声を切り替えるたびに config.ymlmodel_namedataset_path を手で直す

罠11:7時間で200ステップしか進まない

CUDA が入っていない Python で学習を起動していました。 エラーは出ません。ただ異常に遅いだけです。

見分け方は単純です。学習を止めて、GPU の使用率が落ちなければ、GPU を使っていません。 動いているように見えるので、気づくまで丸ごと無駄にしました。

罠12が一番危ないです

--config で設定ファイルを指定しても、書き出し先は config.ymlmodel_name で決まります。

つまり、語り手を学習していたのに、相手役の名前で保存されていました。

エラーは出ません。学習は正常に終わります。気づかなければ、本編に別人の声が入っていました。 声を切り替えるたびに config.yml を手で直してください。

もう一つの落とし穴:line_split

m.infer() は既定で line_split=True になっています。このとき、せっかく指定したアクセント(given_tone)が無視されます。

line_split=False を必ず付けてください。

これに気づかず「指定しても何も変わらない」と3回作り直しました。 SBV2 の一番の売りである機能が、既定の設定で黙って無効になっているという、一番ややこしい種類の罠でした。


演技はどう付けるか

結論から書きます。素のままで十分な演技になっています。

Qwen は演技の指示を書かないと棒読みでした。SBV2 は 何も指定しなくても演技として成立します。 感情の起伏があるセリフでも、判断は「なにもしないで十分」でした。

一応、効く手・効かない手を並べておきます。

効くか 使い方
何も指定しない これが基本
assist_text(演技を日本語の文章で渡す) ただし重み 2.0 から 弱(0.7)・標準(1.0)では差が出ません
length(速さ) 1.25 で 2.61秒 → 3.16秒
noise / noise_w(ゆらぎ) 抑揚の振れ幅が変わります
スタイル(学習データを分類して登録) ✕ 効きませんでした 数値上は分かれていた(似ている度 0.73)のに、音に出ませんでした

スタイル指定は期待していたのですが、試した範囲では音に反映されませんでした。分類自体は数値上できているので、使い方が悪いのかもしれません。ただ そもそも素で十分だったので、追わないことにしました。

作業量が大きく減りました。 全セリフに演技を書く必要がなくなり、直すのは「聞いて気になったところだけ」になりました。


これから使う人へ

  1. 英数字だけのパスに置いてください。 日本語のフォルダ名だと Failed to initalize Mecab で最初から動きません。これが罠1です
  2. line_split=False を必ず付けてください。 既定のままだとアクセント指定が黙って無視されます。「指定が効かない」と悩む前にここを見てください
  3. 声を切り替えるたびに config.ymlmodel_name を直してください。 --config を指定しても書き出し先は変わりません。別人の声が別名で保存されても、エラーは出ません
  4. 学習は3000ステップまで回してください。 1000でも聞き取れますが、感情と高低はそこから先で乗ります。一晩回せば足ります
  5. モデルは必ず保管してください。 学習は毎回わずかに違う結果になります。消すと同じ声は二度と作れません。守るのは声1つあたり約290MB(モデル240MB+元音声50MB)だけです

まとめ

日本語の作品を作るなら SBV2 です。 「AIが喋っている感」の正体は日本語のピッチアクセントの誤りで、SBV2 は読ませる前に音素とアクセントを確定させるので、そこが起きません。しかも given_tone で一音ずつ指定できます。

そして演技は素のままで十分でした。 全セリフに指示を書く工程がまるごと消えたのが、実務上は一番大きい変化です。

注意点は3つです。

  • 声を作れるのは Qwen のほうです。 SBV2 は既にある声を学習するだけなので、両方要ります
  • AGPL v3 なので、Web サービスに組み込む用途には向きません。 ローカルでの動画制作なら問題ありません
  • 学習は作品づくりで数回しか起きません。 VRAM 4GB のノートPCでも一晩ずつ回せば足りました。このために高いPCを買う必要はありません

シリーズ全体の比較はこちらの記事にまとめています。有料サービスから無料のローカル構成へ移った経緯は、Qwen3-TTS の記事に書きました。

この検証は、現在制作中の長編AIアニメーションの制作過程で行っています。作品の公開が始まったら、この記事からもお知らせします。


公式リポジトリ

GitHub - litagin02/Style-Bert-VITS2: Style-Bert-VITS2: Bert-VITS2 with more cont...Style-Bert-VITS2: Bert-VITS2 with more controllable voice styles. - litagin02/Style-Bert-V...github.com

関連記事

この記事をシェア

note

スポンサーリンク

コメント(0)

まだコメントはありません。

コメントは Tier 1(有料)の機能です。ログインのうえアップグレードしてください。