manabu’s blog

日々の足跡。

ダメ絶対音感について実験してみた

はじめに

この記事は eeic Advent Calendar 2016 10 日目の記事です。
卒論配属の研究室にちなんで、何か音声に関係あることをここでやりたいなと思ったのですが、さっと作れて見せやすいものが中々思いつかず... 迷ったのですが、タイトルの通りダメ絶対音感について実験してみたことを書こうと思います。
具体的には、既存の話者識別アルゴリズムでキャラクターの声優識別って出きるのかな、というお話です。

ダメ絶対音感

ダメ絶対音感について一応説明すると、アニメを見てる時にキャラクターの声を聞いただけでその声を当てている声優が誰か分かるやつです。

え?何言ってるかわからない?ほら、よくあるじゃないですか。ぼーっとアニメ見てると急に
\ピコーン/「あ、香菜ちゃんだ」
みたいな。無いですか。そうですか。 きもいですか。否定はしません。

この記事は絶対音感を話者認識プログラムで実装したいという野望に基づいて書かれています。
まあ、これ書いている段階でまだデータセットスクリプトも用意出来てないのですが...

ただデータをたくさん集めて DNN で識別器を学習して、だと面白くないので、i-vector なるものを使って声優の地声とキャラクターの声の距離を測ることで識別できるのか、というタスクでやってみようと思います。

話者認識(話者識別)

音声の研究は大きく、合成系と認識系に分けることが出来ます。 いや、どちらでもない研究もたくさんあるんですけど、弊研では学生をそのように二分してグループミーティングを行ったりしています。 合成系は音声合成・声質変換など音声を作ることに関する研究で、認識系は音声認識(音声→テキスト、"OK Google!"みたいな)や話者認識など音声から情報を抽出するタスクを扱うことが多いようです。

認識系の一分野である話者認識(話者識別)は、ある発話音声がどの話者の発話かを推定するというのが基本的なタスクなはずです。 雑音環境下での話者認識や複数話者が同時発話してる状況での話者認識など、話者認識にも様々なタスクがあるみたい。

話者認識のアルゴリズム

i-vector を用いた話者認識をやってみようと思います。音声認識まわりを触ってみるの初めてなので、どきどきです。

参考文献はこれ
"i-vector を用いた話者認識" 小川哲司, 塩田さやか (日本音響学会誌70巻6号(2014), pp.332-339)

ざっと説明すると各発話の音響特徴量を GMM (Gaussian Mixture Model) でモデル化し、GMM のスーパーベクトルを因子分析して各発話の低次元特徴量(これが i-vector)を得ます。 この i-vector に対してコサイン類似度などの距離尺度を用いることで話者識別を行います。実装する余裕は到底ないので、ライブラリを探してきます。

実験条件

声優

女性声優 4 名を適当に(自分や友達の趣味を元に)選びました。

各声優の地声発話データはラジオからとってきました。

キャラクター

上記声優 4 名が演じるキャラクターから選びました。

もっとバリエーションに富んだキャラクターを選びたかったのですが、BGMの無い音声が集められない問題など諸々の理由で妥協しています。
声優ごとのキャラ数や各キャラクターの発話時間もまちまちでとても雑ですが、データ集めるコストが高すぎました。まあやってみた実験ということで...

ライブラリ

使用したライブラリは ALIZE というマイナーオープンソースライブラリ。 認識系の研究をしている先輩に聞いてみましたが知らないとのことでした...ほんとにちゃんと動くのかな。汗

ただ、チュートリアルに i-vector を用いた話者識別があるので、データを差し替えて何も考えずにスクリプトを回してみます(と言いつつそもそもスクリプトが回るまでにだいぶ時間がかかってしまった(汗))。

その他

距離尺度はライブラリに存在するうち一番良さげなやつ(よく理解していないし説明もしたくない)を使います。 ハイパーパラメータはライブラリのデフォルトのまま。 付属してたサンプルデータをUBM の学習に用いたり(全部男性話者!)いろいろガバガバです。

各声優の地声データが 1 発話(無音切り出し・結合して 3 分くらい)、キャラクターの発話も 1 発話です。
要は各キャラ発話の特徴ベクトル(i-vector)が声優 4 人の地声発話の特徴ベクトルのどれに一番近いか、という話。

実験結果

声優の地声発話データで話者識別をやってみると、たまに間違えるけどおおよそちゃんと話者識別ができました。
キャラ発話データを用いた結果は散々でした...誰も彼も東山奈央さんだと識別してしまう...

各キャラクターについて、スコアがよかった声優を順に並べると、

  • 椎名まゆり ( 花澤 ) → 東山、花澤、早見、林原
  • 千石撫子 ( 花澤 ) → 東山、花澤、早見、林原
  • 綾波レイ ( 林原 ) → 早見、 東山、花澤、林原
  • 灰原哀 ( 林原 ) → 花澤、東山、林原、早見
  • 高垣楓 ( 早見 ) → 東山、花澤、林原、早見
  • 金剛 ( 東山 ) → 東山、早見、花澤、林原
  • 川島瑞樹 ( 東山 ) → 東山、花澤、早見、林原

地声データで比較した際の傾向として、

  • 花澤-東山は似ている
  • 花澤-早見は似ていない
  • 東山-早見も似ていない
  • 林原-花澤は比較的似ているが、林原-東山は比較的似ていない

という結果が見られていたのですが、それは上のキャラクター識別でも見られるような見られないような...

感想

ダメ絶対音感よりも「声優の声分布を可視化してみた」の方がお手軽でよかったなあと思いました。笑
予備実験とか追実験をする余裕が無かったためダメ絶対音感やってみたという割に大した結果出なくて残念です。この結果を持って今回の i-vector を用いた話者識別が声優の演技に対して不偏性を持っていないと結論づけるにはデータセットが汚すぎる...

何か悔しいのでもうしばらく話者識別で遊んでみようと思います(ほんとに?w)。

この話の続き
ダメ絶対音感について実験してみた その2