備忘録的な何か

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

ニューラルネットワークで音声認識

音声認識言語モデルについて纏めようかとも思ったけど、トライグラム(3-gram)とかを使いますの一言で終わってしまう。細かな活用手法とかはまた文献を漁ることにしよう。

N-gramについては、

Google Japan Blog: 大規模日本語 n-gram データの公開

が分かりやすいし、データも実際に配布されているので覗いてみると面白いかも。

というわけで本題。

ニューラルネットワーク音声認識に活用しよう

いきなりニューラルネットワーク(NN)に入力を与えていい結果が出たわけでもないらしい。ニューラルネットを応用する試みの中で最も古いものの一つに時間遅れニューラルネットワーク(TDNN)が存在する。

TDNNについて

TDNNは入力に音声特徴のセグメントを与えて、そのセグメントに含まれる音素を示すベクトルを出力する。TDNNの特徴としては、畳込みニューラルネットワーク(CNN)に近い構造を持っていることだろうか。

畳み込み層は画像処理の分野でよく使用されているイメージ。ここで深く説明すると長くなる上にテーマから逸れてしまうので、簡単に纏めると、

  1. 何かしらの入力画像を与える
  2. 入力画像より小さいフィルタを複数用意して、少しずつずらしながらフィルタをかけていく

これで終わり。初期値のフィルタはなんか微妙な値にしか反応しないが、2の過程を繰り返して行うことにより学習し、特徴をとらえた値に反応するすごいフィルタが出来上がるという優れものである。というより初学者の僕はこれくらいの印象しか持っていない。お勉強します。

実際にところ、これを音声に当てはめて考えるというのもいまいち理解ができていない。音声特徴のセグメントに、何らかのフィルタをかけて特徴抽出しやすくする、ということなのだろうが細かなアルゴリズムはよく分からない。うーむ……

ci.nii.ac.jp

CiNiiで貴重な日本語の論文を見つけたものの、僕のレベルが低くてとても倒せる代物ではなかった。レベルが上がったら再度挑戦してみよう。

ただ、TDNNの欠点としてはあくまで出力として出るのは音素の出現を表すスコアなので、入力された断片はどうもこの音素っぽいぞ、ということしか分からない。つまり単語とか文章には対応出来ていないので、別途辞書と組み合わせて解析するシステムが必要となる。したがってTDNNを改良して得られたのが次に紹介するハイブリッド方式である。

HMMとTDNNのハイブリッド方式

NNのほうが識別性能は高いのに、確率的言語モデルとの統合は難しいよね、という問題を解決するためにHMMを導入したのがこの技術。この方式では、NNはHMM状態の確率分布を表現するために用いられるのだとか。

 ハイブリッド方式はニューラルネットワークの出力層にソフトマックス層を採用している。ソフトマックス層はおそらく活性化関数にソフトマックス関数を使用している層のことだろう。たぶんだけど。

ソフトマックス関数はK個のクラスに分類できる活性化関数で、出力はK個で、その総和は1となる。つまり、出力値がそのままどのクラスに属す確率が高いか、ということに利用できる。

HMMの出力確率密度関数(と教科書には書かれていた。要は出力関数のことかな。)をニューラルネットワークの出力で得られた確率分布とあらかじめ学習されたカテゴリカル分布の確率分布の比によって表現するのがハイブリッド方式。らしいよ。

カテゴリカル分布は、

oi: 今更聞けない基本的な確率分布のまとめ

にそこそこしっくりくる説明が乗っていたので参考にするといいでしょう。

肝心のニューラルネットワークの学習は、HMM状態の推定値を何らかの方法で求めて(オイオイ…)、交差エントロピー基準にて学習を行うとのこと。

交差エントロピー基準……

また新しい言葉だ…

いい加減疲れてきたよ…

これ結構纏めるの時間かかってるんだぜ?

しばらくネットの記事を彷徨っていると素晴らしいものを発見した。

ニューラルネットワークと深層学習

個人的にかなり分かりやすかった。交差エントロピー基準でやると、初期値がかけ離れていてもそこそこ高速に学習してくれるという期待値があるからだろうか。うーん……

まとめ

まだタンデム方式が残っているけど、疲れてきたし今日はここまでにしておこう。HMMとTDNNのハイブリッド方式は割と使われているらしい。Juliusなんかもこれに近いんじゃないのだろうか。知らないけど。

参考文献

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

ニューラルネットワークと深層学習

GitHub - julius-speech/julius: Open-Source Large Vocabulary Continuous Speech Recognition Engine

Google Japan Blog: 大規模日本語 n-gram データの公開

CiNii 論文 -  TDNNによる時系列パターンの記憶と想起に関する一考察