大学院卒で新入社員となった私ですが、社畜になるつもりはないので、その一環として研究を続けていき、学会などにも出していこうと考えています。
今回の記事までの経緯:
・1次元入力で学習
→なかなか上手くいかない
・2次元入力
→なかなか上手くいかない
・今まで行っていた学習が間違っていたことに気づく、2次元入力で試してみる
→上手くいきそう!
この結果を書いていきたいと思います。
本記事のテーマ
NuPIC(HTM)を用いた話者照合 -2次元入力-【SP+TM層】#異常検知
本記事では、NuPICのSP層とTM層を用いた話者照合(異常検知)の実験結果を紹介します。
※HTM(Hierarchical Temporal Memory)
本実験の目的
・処理の軽い話者照合システムの実現!
NuPICは処理が少なく商品化しやすい技術だと思います。
現在の実験でもMacbookで動かしています。
・HTMを広めたい
使用する音声(RedDots)
RedDotsという音声コーパス
「学習音声」
・f0002の32=「OK, Google」、5音声
「テスト音声」
・f0002の32=「OK, Google」、19音声
・f0002の31=「My voice is My password」、32音声
・m0001の32=「OK, Google」、25音声
・f0002の32=「OK, Google」、24音声
・f0005の32=「OK, Google」、14音声
・f0008の32=「OK, Google」、20音声
※ f=female(女性), m=male(男性)、数字は話者の識別番号
実験方法
HTMのTM層を用いて異常検出を行い、特定話者の特定音声のみには異常が出ないように学習させる。
入力データ
1. 正規化した音声をメルスペクトログラムに変換(20次元)
2. 角周波数ごとにパワーを0と1で表現(エンコード)
3. 20個の周波数の配列を結合し、計340次元の配列としてSP層にに入力する
4. columnDimensionsは(10, 10)とする。
5. SP層で学習したactiveColumnの"1"の部分のIndexをTM層に入力する
6. computeRawAnomalyScoreで異常度を計算する
学習方法
・f0002「OK, Google」の24音声のうち5音声を用いて学習させる
・適当な長さ学習を行い、異常度が落ち着いたら学習を終了とする
・学習終了後はSPとTMのパラメータをpickleで保存する
学習システムの処理時間:20.45[秒]
検証方法
・学習時に保存したパラメータを使って学習モードをOFFにして検証する
実験結果
学習時
・学習結果f0002「OK, Google」(5音声)
ちゃんと異常度が落ち着いた。
テスト時
・f0002「OK, Google」
理想の結果:異常度が0
異常度は0.5以下で落ち着いているように見える。
・f0002「My voice is My password」
異常値が高く出ている。
・m0001「OK, Google」
異常値が高く出ている。
・f0005「OK, Google」
異常値が高く出ている。
・f0008「OK, Google」
異常値が高く出ている。
比較検討・まとめ
今回は上手いこといきました。
学習した音声では異常値は低く、他の人の音声では異常値は高い、また学習した音声と同じ人の異なる音声でも異常値が高い結果となり、学習はうまくいきました。
※前回までのミスは、異常値の計算に前回のactiveCellsを入力していたことにありました。本来は、現在のactiveCellsと前回のprevPredictedColumns(予測カラム)を入力しなければなりません。
今後、証明をもっと多くしていかないといけませんが、NuPICによる話者照合ができる見通しが立ちました。
今後の予定
・信頼度を高める
・htm.coreに移植(完了)
・htm.coreで予測(ほぼ完了)
・論文的にまとめる