備忘録的な何か

研究内容とかプログラミング関連とか趣味(オーディオなど)とかそのへんのことを書いていければいいな

音声認識の音響モデル

音声認識にはどうやら2つのモデルが必要らしい。ひとつは音響モデルで、もうひとつが言語モデル。音響モデルにはHMM(隠れマルコフモデル)がよく使われる。らしい。

HMMってなんぞ?

HMMは一つ前の状態が現状態に影響している、ということくらいしか印象に残っていないため、いざ参考書とか教科書とかででてきた時にぐぬぬとなってしまう。よくない。

というわけでこれを機会におさらい。困った時のWikipedia先生に聞いてみるとめちゃくちゃ分かりやすかった。

隠れマルコフモデル - Wikipedia

ここの具体例が秀逸だった。よかったら読んでみてほしい。

さて、大体の内容をまとめると、

  • 隠れマルコフモデルのパラメータは、遷移確率と出力確率の2種類
  • 遷移確率は時間t-1の時の状態から時間tになった時、ある状態に遷移する確率
  • 出力関数はある状態の時に何らかの特定の出力がなされる確率
  • この2つをかけ合わせて一番確率の高いやつを選べば次の状態予測できね?

みたいな。

音声認識においてややこしいのは出力関数の方だ。遷移確率に関しては、発音辞書モデルと若干特殊な遷移確率を組み合わせるだけなのでそれほど難しいものではない。

出力関数は、深層学習が浸透する前はGMMを使っていたとかでGMMのお勉強もしなければならないという曲者。というわけで次はGMMについて。

GMMってなんぞや?

GMMは混合正規分布ガウス混合分布などと呼ばれているらしい。読んで字のごとく、「複数正規分布を混ぜあわせたもの」がGMM。

正規分布は平均値に一番偏りが出る富士山みたいなアレ(伝われ)。

このスライドが比較的詳しく解説がなされていた。

www.slideshare.net

EMアルゴリズムを使うのね、というところが一番のポイントのような気がする。細かな証明はよく分からん。

調べてみると、Pythonオープンソースによりライブラリが提供されているらしい。以下リンク。

http://scikit-learn.org/stable/tutorial/index.html

なので、これでクラスタリングがしたいという人はPythonを触ってみるとおもしろいかも。

メル周波数ケプストラム係数????

メル周波数ケプストラム係数(MFCC)なるものが世の中には存在するらしい。どうやら深層学習を用いない時の音響モデルではこれに基づいたものが活用されている模様(へぇ)。これも細かなところまで見ていくと死んでしまう。使用している教科書には7行ほどで説明が書かれていたが、全く理解できる代物ではなかった。残念。

なんとなく調べたりして掴んだ印象としては、特徴量ベクトルとしてMFCCは優秀らしい。そもそも音声認識では、入力された波形データからそのデータの特徴を抽出して、そいつを音響モデルと言語モデルと辞書で頑張ってデコードしてテキストに変換するというタスクだ。

そこの特徴量としてMFCCを活用するとよいらしい、というのは分かったのだが、細かな計算はよく分からない。

ただ、

  1. 入力音声とメルフィルタバンクを掛け合わせる
  2. 1で得られたスペクトルの概形を離散コサイン変換(DCT)する
  3. 2で得られたメル周波数ケプストラム係数の下から12個くらいを取り出す
  4. (おまけ)逆離散コサイン変換するとなんとなく波形の特徴が捉えられているのがわかる

以上の手続きを取ることが多いみたい。

 

まとめ

数式が入るととたんに理解が進みにくくなるのがこのあたりの分野の良くないところ。何をしているのか、というエッセンスだけ抽出したつもり。

次回の後編は言語モデルについてかな。ひょっとしたら中編かも。深層学習に関して一切触れてないし。

あと細かい数式とか理論は他のブログや専門書を頼りにしたほうがいいと思います。 

 

参考文献

神嶌敏弘ほか(2015)『深層学習』近未来科学社

Answer2: 千葉祐弥(東北大学) - 音響学入門ペディア 以下リンクhttp://abcpedia.acoustics.jp/acoustic_feature_2.pdf

隠れマルコフモデル - Wikipedia

混合モデルとEMアルゴリズム(PRML第9章) from Takao Yamanaka