話者認識
話者認識とは?
話者認識とは、マイクになどによって録音された音声から個人を認識・特定するコンピュータ処理のことです。
ここで言う「音声」とは人の声のこと指します。つまり、顔の見えない相手の声が、誰の声なのかコンピュータに推測させる分野のことです。
人の声の特徴を掴む
私たちが人の声から個人を特定するとき、最も大きなヒントになるのが「声の高さ」です。
もっと踏み込んだ表現をすると、人が発する音声の周波数が特徴であると言えます。
下図は男性と女性の声をスペクトログラムにした画像です。
横軸は時間、縦軸は周波数、カラーバーは音圧レベルを表します。
(左:男性の音声 右:女性の音声)
発話している箇所を抜き出して比較します。
どちらのスペクトログラムも発話部分に縞模様が見られます。
ただし、男性のスペクトログラムに見られる縞模様よりも女性のスペクトログラムの縞模様の方が高周波数成分に広く分布しています。
これは女性の声の方がより高い周波数の音を組み合わせて形成されていることを示唆します。
MFCC(メル周波数ケプストラム係数)
MFCCは聴覚フィルタに基づく音響分析手法で、音声認識の分野で使用されることの多い特徴量です。
周波数の高い音ほど音程を識別しにくくなるという人間の音高知覚が考慮されています。
MFCCはlibrosaもしくはpython_speech_featuresモジュールを使用することで簡単に実装することができます。
import librosa librosa.feature.mfcc(wave) from python_speech_features import mfcc mfcc(wave_data,fs)
上記の関数によって得られるMFCCは2次元配列になっています。
MFCCの次元数は各関数の引数として設定することができ、本解析では13次元のMFCCを使用しています。。
混合ガウスモデル(GMM)
混合ガウスモデル(以下:GMM)は教師なしクラスタリングでよく使用される機械学習手法です。
分類したいクラスタの数(混合数)は予め解析者が指定する必要があります。
GMMはEMアルゴリズムというアルゴリズムによってフィッティングされます。
下図はデータが3つのクラスタに分類されていく様子を示したものです。
Universal Background Model(UBM)
UBMとは不特定話者の平均的な音声モデルです。
具体的には、複数話者の音声から得られたMFCCを13次元のデータ点とみなし、それらの分布をGMMによってクラスタリングしています。
こうして得られたGMMのパラメータ(重み、平均ベクトル、共分散行列)を特定話者の学習時に初期パラメータとして使用します。
特に平均ベクトルを平滑化したもののことをGMMスーパーベクトルと呼び、話者特徴量を含んでいるとされています。
UBMを導出することで特定話者のGMMスーパーベクトルを導出する際に、同一話者から得られるベクトル要素が常に同じ形で整列されます。また、導出時間が短縮されることも利点の一つと言えます。
類似度の評価
特定話者の音声から得られたそれぞれのGMMスーパーベクトルをコサイン類似度によって評価します。
同じ話者(もしくは声の似た話者)から得られたGMMスーパーベクトルのコサイン類似度はより高く評価され、違う話者(もしくは声の似ていない話者)から得られたGMMスーパーベクトルのコサイン類似度は低く評価されます。
モデルの評価
本解析では19人の話者からそれぞれ11サンプル(1サンプルは学習用、10サンプルは評価用)、各1分間の音声を取得し評価しました。
混同行列を作成することでモデルの正答率を示します。
上図の対角成分が正解したことを示し、非対角成分がどのような不正解をしたのかを示します。
結果、190サンプル中163サンプル(85.7%)正解することができました。
モデルの正解率の低かった、irieさんとannakaさんの声質は非常に似ており、解析の結果としては納得できるものでした。
まとめ
今後、認識精度を向上させるためには「話し方の癖」を数値化して特徴量に織り込む必要があるかもしれません。
また、本解析の音声サンプルは非雑音環境で録音されたデータばかりであるため、実環境で使用するためにはノイズキャンセラや音源分離といった技術を併用していく必要がありそうです。