人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

global navigation menu page top

HTMを用いた特定話者の特定音声を検出する(VADと話者照合) -その1-【TM層での学習】【サラリーマンの研究日記】

f:id:hiro-htm877:20190715195411p:plain

 

大学院卒で新入社員となった私ですが、社畜になるつもりはないので、その一環として研究を続けていき、学会などにも出していこうと考えています。

 

研究の途中経過の報告などをブログに書くことで、これから研究を始める方の参考にもなればと思っています。興味があればご参考ください!

本記事のテーマ

HTMを用いた特定話者の特定音声の検出【TM層での学習-day1-】

 本記事では、適当なパラメータでSP層+TM層で学習した結果、差が顕著に現れなかったのでとりあえず、「TM層だけでもいけるんじゃねっ?!」と思い、学習させた結果を報告させて頂きます。

※HTM(Hierarchical Temporal Memory)

使用する音声

RedDotsという音声コーパス

・f0002の32=「OK, Google」、24音声

・f0002の31=「OK, Google」、32音声

・m0001の32=「My voice is My password」、25音声

※ f=female(女性), m=male(男性)、数字は話者の識別番号

 

 

実験方法

HTMのTM層を用いて異常検出を行い、特定話者の特定音声のみには異常が出ないように学習させる。

入力データ

1. 正規化した音声をメルスペクトログラムに変換(20次元)

2. 角周波数ごとにパワーを0と1で表現(エンコード

3. 20この周波数の配列を結合し、計3400次元の配列としてHTMに入力する

つまり、TMそうのカラム数が3400個となる

学習方法

・f0002「OK, Google」の24音声のうち2音声を用いて学習させる

・適当な長さ学習を行い、異常度が落ち着いたら学習を終了とする

・学習終了後はTMのパラメータをpickleで保存する

2音声を30ループ(半日ぐらいかかった気がする)

検証方法

・検証に使用する音声

 f0002「OK, Google」24音声

 f0002「My voice is My password」32音声

 m0001「OK, Google」25音声

・学習時に保存したパラメータを使って学習モードをOFFにして検証する

 

実験結果

・学習結果f0002「OK, Google」(2音声)

f:id:hiro-htm877:20190716204852p:plain

ちゃんと異常度が落ち着いている。

・f0002「OK, Google

理想の結果:異常度が0

f:id:hiro-htm877:20190716205214p:plain

 

(後ろから300点のデータ)

f:id:hiro-htm877:20190716205311p:plain

異常度は0.1程度に落ち着いている?

好ましい結果であると言えるだろう。

 

・f0002「My voice is My password」 

理想の結果:ここでは発生内容が異なるため(学習音声と比べて)、上の図より異常度が出て欲しい。

f:id:hiro-htm877:20190716205531p:plain

(後ろから300点のデータ)

f:id:hiro-htm877:20190716205603p:plain

f0002「OK, Google」よりは異常度が高い気がするが落ち着いてしまっている。

 

・m0001「OK, Google

 理想の結果:f0002「OK, Google」よりは異常度が大きくでる

f:id:hiro-htm877:20190716210327p:plain

 (後ろから300点のデータ)

f:id:hiro-htm877:20190716210349p:plain

若干、f0002「OK, Google」より異常度が高い気がする。

 

比較検討・まとめ

・f0002「OK, Google

f:id:hiro-htm877:20190716205311p:plain

・f0002「My voice is My password」 

f:id:hiro-htm877:20190716205603p:plain

・m0001「OK, Google

f:id:hiro-htm877:20190716210349p:plain

 

目測ですが、異常度の高さの優劣は

f0002「OK, Google」<m0001「OK, Google」<f0002「My voice is My password」 

です。

音声の周波数の時系列ですので、異性というよりは、発声内容の方が近いのでしょうか?今回はTM層のパラメータをほぼ初期値の状態で学習させたためアバウトな実験結果となっています。ですが、なんとなく希望は見ることができましたので引き続き研究を続けていきたいと思います。

 

今後の予定

エンコード時に各周波数を一次元に連結しているため、2次元で入力してみる。

エンコード方法の改善(出来るだけ0が少ないエンコード方式)

・カラム数の多い状態(2048とか)でのSP層学習をうまく行いその出力(SDR)をTM層に入力する

 

 

今後もしょうもない結果も載せていこうと思っていますので興味がある方は是非!

 

 

 

 

ちなみに修士時代の研究概要は以下の記事に記載しています。

www.hiro877.com