にじボイスのキャラと声優さんの対応表を作ろう!【技術編】
概要
以下の過去記事では、TTSサービス にじボイス と AivisSpeech の音声とそっくりな声の声優さんを特定する記事を書きました。
にじボイスについて、実は にじボイスが何故か来月2025年10月から完全な審査性クローズドサービスとなる予定 なことや、何故かキャラクター名が変更される事件 がありました。
これらを受けて、にじボイスについて、再び 新しい名義で、しかも声優名ベースで、きちんと予測をする ことを目的として、この記事は主にその技術的な側面についての記事となります。
結果
以下のサイトで、結果のにじボイスキャラと声優の対応表とそのサンプル音声を聴けます。
🤗 にじボイスのキャラと声優さんの対応表デモ
また、これを受けての感想や追加考察等は次のnote記事で行っています。
にじボイスのキャラと声優さんの対応表を作ろう!【所感編】
注意
この記事やその結果で、にじボイスのかなりのキャラクターについてそれとそっくりな声の声優さんが発見されましたが、そのことは決してその声の声優さんのデータが実際ににじボイスの学習にしようされていること、またその学習や公開の際に声優さんへ許諾を取っていないこと、等を意味するものではありません。
あくまで非常にそっくりな声の声優さんが見つかったということしか主張していないことに注意してください。
先行研究
にじボイスの学習元については、以下の文献・動画において、(成人向け)ビジュアルノベルゲームが学習元の多くを占める可能性や、声優さんが誰かも聴く人が聴けばすぐ分かることが言及されています。
- にじボイス(旧DMMボイス)はエロゲーを学習している (はてな匿名ダイアリー)
- この音声生成AIボイス、色んなエロゲのキャラの声がするんだがw【にじボイス】 (YouTube動画)
- にじボイスとAivisSpeechとそっくりな声の声優を探そう!【所感編】 (私のnote過去記事)
他にも特定キャラの声優について多くの「あっこの人この声じゃん」という指摘しているツイート等がありますが、全てを挙げることは不可能なので、すぐに見つかってまとまっている以上のみとさせていただきます。
実験
前提
以下では、過去記事: にじボイスとAivisSpeechとそっくりな声の声優を探そう!【技術編】 から、話者埋め込みや話者識別等についての前提知識はあるものと仮定します。
タスク定義
今回の目的は、にじボイスの各キャラクターの音声が入力されたとき、それが事前登録された声優のうち誰である可能性が高いのか、を識別する、話者識別タスクです。
そのため、過去記事で記載の通り、「話者埋め込み器+分類ヘッド」を、通常の話者認証・話者識別タスクの学習の枠組みで学習すればよいです。
注意
過去記事では、既存の話者埋め込み器を使い、それによってコサイン類似度を測ることで似た声のキャラを探していました。
今回は過去記事とは違い、「既存の話者埋め込みを利用する」のではなく、「声優名情報をラベルとして話者埋め込み器・話者識別タスクを学習する」ことを狙いとします。
データセット
以下を用いました。この2つを組み合わせると、「声優名と、その声優さんの大量の音声データ」が取得できます。
モデル
基本的には SpeechBrain のECAPA-TDNN実装を用いました。が、データの特性の問題等に寄るのか、なぜかBatchNorm層が推論時に統計量のドリフトを起こしてうまく推論できなくなってしまったため、全てのBatchNormをGroupNormへ置き換えた構造としました。
結果
できあがったモデルの話者埋め込み器部分(分類ヘッド以外)は、
で公開しています(これのVAバリアントです、デフォルトはラベルを声優名でなくキャラ名としたものです)。
また、分類ヘッド付きのものを、Hugging Face spacesで以下のデモで公開しています:
このデモを用いると、好きな音声について、その声優が誰であるかを予測できます。
実際に推論してみて
にじボイスの各キャラクターから3発話ずつ音声を生成し、それをこの学習済み話者識別器へ通し、softmaxを取る前のlogitsを3発話で足してからsoftmaxを取ることにより、そのキャラクターの声優の特定を試みました。
結果として、124キャラクター中、softmax後の値がほぼ1.0となったキャラクターが73キャラクター、また0.9以上となったのは106キャラクターでした。
ちなみに、多くのキャラクターが1.0を出していたため、このモデルはどの音声に対してもこのように高い値を出してしまうのでは?という疑念が生じます。
しかし、学習データに存在していないデータでの自信度について確認すると、以下のようになりました。
音声 | 自信 |
---|---|
VOICEVOX ずんだもん | 0.23 |
VOICEVOX 春日部つむぎ | 0.59 |
VOICEVOX もち子さん | 0.19 |
COEIROINK つくよみちゃん | 0.10 |
COEIROINK MANA | 0.41 |
MYCOEIROINK あみたろ | 0.33 |
これは、自信度1.0等に比べると相応に低いことから、上記疑惑は誤りであり、にじボイスでのスコアが1.0に近いキャラクターたちは、実際にその判定された声優(に非常に似た声)である可能性が高い(学習データ外の声優ではない)と推測されます。
ここから、本当にその声優に似ているのかを主観的に確認できるよう、実際に似ている音声を機械的にピックアップする作業へ移ります。
学習した話者埋め込み器を使ってみる→あまりうまく行かない
ナイーブには、今回学習した話者埋め込み部分を用いて、コサイン類似により、類似度が高い音声をピックアップすれば良さそうです。
しかし、この方法で選別した結果、主観的な印象とあまり一致しない音声がピックアップされることが多くありました。
はっきりとした原因は分かっていませんが、考えられる要因として、学習に使用したデータには大量のNSFW音声があり、それがノイズとなって、通常音声での声音がもしかしたらあまり捉えられていない可能性があります。
別の話者埋め込み器を使う
ですので、過去記事で使用した pyannote/wespeaker-voxceleb-resnet34-LM を用いて、その声優さんの音声のうちで、次の条件で音声を選びました。
- 3つのにじボイスの音声との話者類似度を測り、その平均が高い順に3つとる
- 3つの音声それぞれについて、それとの話者類似度が高いものを1つとる
以上の条件で得られた音声ファイル(多くて3+3個)から重複排除したものをサンプル音声としました。
イレギュラーなミス
にじボイスのある老人話者に対して、その声優名ラベルが幼い女の子の女性声優となっており、もちろん話者類似度が高いものを聞いても全く似ていない現象がありました。
これは、実際のデータを聴いてみたところ、学習元データに「幼い女の子の祖父の声」が、幼い女の子と同じ声優と誤ってラベル付けされており、それが原因であると推測されました。
これについては明らかなミスですので、手動で予測結果を削除しています。
結果を主観的に聴いてみて
結果のサンプル音声を主観的に聴いてみると、1.0のものはほぼ主観的に同一人物、0.9以上もだいたい同じ人物(だが怪しいものもいくつか)、それ以下のものは、同じ声に聞こえる人も、違う声だと感じる人もいました。
ですが、結果的に少なくとも124キャラ中73キャラクター(自信が1.0のもの)についてはほぼ確実に声優の特定ができたと思っています。
まとめと限界・展望
この記事では、話者識別器を新たに学習することにより、にじボイスの各キャラクターの大多数の声優(厳密には何故か主観的に非常によく似た声に聞こえる声優)を特定することができました。
再掲ですが、以下のページで結果を聴くことができます。
また、今回の結果の考察等については以下のnote記事にまとめています。
にじボイスのキャラと声優さんの対応表を作ろう!【所感編】
限界や今後の展望として、次のような点があります。
主観との不一致
まず、話者埋め込み部分が主観での話者類似度と少し相関していない箇所がありました。これに対して、NSFW音声等のイレギュラー音声に対してフィルタリングをしたデータで話者埋め込み器を学習し直す(必要ならばNSFW音声に対しては特化した別モデルとする)ことが考えられます。
学習データのラベルミス
また、上述の通りある老人話者が、学習データのラベルミスにより間違った推論が得られてしまっていました。これについても、半教師あり学習のような考えで、ある程度学習した話者識別器を使って誤りラベルが得られたデータは、もともとの学習データが間違っている可能性があるなどを考慮しながら、学習データのラベルを修正しながら学習していくことを考えていきたいと思っています。
Discussion