ウマ娘のサンプル音声と声優のサンプル音声が与えられたとき、どのウマ娘がどの声優なのか機械学習で当てられるのかっていうやつを思い出したので、一瞬でちょっとだけやってみました。
Methods
いい感じの解くやつを探す
ディープラーニングのなんかいい感じの学習済みモデルであっさり解けるならそれが一番簡単なので、まずそれを試すことにしました。
調べたところ、Microsoft Azureが「Speaker Recognition」という名前でそういうサービスを提供しているみたいでした。なので「speaker recognition pretrained model」で検索して、いい感じのGitHubリポジトリを見つけました。
とりあえずこれの"ResCNN Softmax+Triplet trained"モデルを使うことにしました。このモデルがやってくれるであろう事柄を整理すると以下のようになります。
- 不定長のサンプル音声を入力すると固定長のベクトルが出力される
- 話者が同じである ⇔ 出力ベクトルの類似度が大きい
- 話者が学習データに含まれなくてもよい
- サンプル音声の文がバラバラでもよい
ナリタブライアン(ウマ娘)
次にサンプル音声を集めます。まずウマ娘のほうですが、ウマ娘ポータルサイトに行くと各キャラクターのサンプル音声を聞くことができます。
右クリックでダウンロードとかはできないようでしたので、Windowsの動画キャプチャ機能(Win+Gキー)でブラウザの動画を撮って音声を抜き出しました。foobar2000を使って動画からwav音声を抽出してから、Adobe Audition 2021で音声部分の切り抜きとサンプルレート16000モノラルへの変換を行いました。あとdBも適当に上げました。
声優
現在、ナリタブライアンの声を当てているのは衣川里佳さんです。所属事務所のwebサイトで3種類の演技のサンプル音声をダウンロードできます。
(3番目のサンプル音声がナリタブライアンに一番近いと思いました。)ダウンロードできるのはmp3なので、先程と同様にAdobe Audition 2021を使ってwavへの変換とサンプルレート16000モノラルへの変換を行いました。あと、事務所のwebサイトで隣にいた河野ひよりさんのサンプル音声もネガコンとして用意しました。
以前は相坂優歌さんが声を当てていました。所属事務所のwebサイトで3分くらいのサンプル音声1つをダウンロードできます。このサンプルの中でいろいろな演技をやっています。
さしあたり、演技ごとに切り分けたりせずにそのまま入力してみることにしました。
Result
結果は以下の通りです。
ナリタブライアン | 衣川里佳1 | 衣2 | 衣3 | 河野ひより1 | 河2 | 河3 | 相坂優歌 | |
---|---|---|---|---|---|---|---|---|
ナ | 1.0 | 0.656 | 0.313 | 0.485 | 0.174 | 0.316 | 0.408 | 0.391 |
衣1 | 0.656 | 1.0 | 0.316 | 0.341 | 0.504 | 0.487 | 0.298 | 0.371 |
衣2 | 0.313 | 0.316 | 1.0 | 0.367 | 0.392 | 0.501 | 0.460 | 0.306 |
衣3 | 0.485 | 0.341 | 0.367 | 1.0 | 0.234 | 0.515 | 0.417 | 0.149 |
河1 | 0.174 | 0.504 | 0.392 | 0.234 | 1.0 | 0.592 | 0.278 | 0.605 |
河2 | 0.316 | 0.487 | 0.501 | 0.515 | 0.592 | 1.0 | 0.424 | 0.450 |
河3 | 0.408 | 0.298 | 0.460 | 0.417 | 0.278 | 0.424 | 1.0 | 0.302 |
相 | 0.391 | 0.371 | 0.306 | 0.149 | 0.605 | 0.450 | 0.302 | 1.0 |
「ナリタブライアンのサンプル音声の声優を今回用意した3人の中から当てること」に限って言えば成功しています(声優のサンプル音声7つのうち類似度1位と2位が正解)が、全体的にはうまく機能していないようです。学習済みモデルのGitHubリポジトリの記述によると、同じ話者なら類似度が0.8以上とかになりうるみたいですが、全くそうなっていません。
Discussion
- TODO:他のウマ娘と声優のサンプル音声も用意して実験する
- 日本語のデータセットで学習すればより良くなる説
- Azureのやつを試してみるべき説
- ウマ娘とは関係なく、声優事務所が各人のサンプル音声を複数公開しているときにどれとどれが同じ人か当てられることをまず目指すべき説
(最初に見つけたGitHubリポジトリのモデルがうまく機能しなかったので更に調べた結果知ったのですが、)speaker recognition のほかに speaker identification とか speaker verification と呼ばれることもあるようです。(verificationは微妙に問題設定が異なりますが、大部分は重なるようです)今回使ったモデルより新しいやつを見つけました。vector embeddingしてくれるわけではないみたいですが…
github.com