最新型ThinkPad X1 Carbon発売!!
やー、ついに発売です嬉しいですね。
このブログ書いてるのも初代X1 Carbonだからそれくらい愛着あるモデル。
最新モデルの特徴としては、
- RAMを16GBまで積める!
- SSDも512GBまで積める!
- 軽い!(最小構成時で1.18kg)
こんなもん?大体これで21万円くらいで買える。
同時にT460sも解禁になったんだけど、こっちはRAMが最大24GBまで積めるのにX1 Carbonより安いという……。その分重いんだけど200gしか変わらないしなぁとか思ったり。
X1 Carbonのほうがかっこいいしそっちを買おうかな。
T460sのほうが拡張性と保守性は高いけどね!
個人的にはコーディングするなら14型がベストだと思うし英字配列以外はありえないと思っている。他社にも14型で英字配列可能っていうモデルが量産されると選択肢が増えて助かるんだけどなぁ…
ニューラルネットワークで音声認識
音声認識の言語モデルについて纏めようかとも思ったけど、トライグラム(3-gram)とかを使いますの一言で終わってしまう。細かな活用手法とかはまた文献を漁ることにしよう。
N-gramについては、
Google Japan Blog: 大規模日本語 n-gram データの公開
が分かりやすいし、データも実際に配布されているので覗いてみると面白いかも。
というわけで本題。
ニューラルネットワークを音声認識に活用しよう
いきなりニューラルネットワーク(NN)に入力を与えていい結果が出たわけでもないらしい。ニューラルネットを応用する試みの中で最も古いものの一つに時間遅れニューラルネットワーク(TDNN)が存在する。
TDNNについて
TDNNは入力に音声特徴のセグメントを与えて、そのセグメントに含まれる音素を示すベクトルを出力する。TDNNの特徴としては、畳込みニューラルネットワーク(CNN)に近い構造を持っていることだろうか。
畳み込み層は画像処理の分野でよく使用されているイメージ。ここで深く説明すると長くなる上にテーマから逸れてしまうので、簡単に纏めると、
- 何かしらの入力画像を与える
- 入力画像より小さいフィルタを複数用意して、少しずつずらしながらフィルタをかけていく
これで終わり。初期値のフィルタはなんか微妙な値にしか反応しないが、2の過程を繰り返して行うことにより学習し、特徴をとらえた値に反応するすごいフィルタが出来上がるという優れものである。というより初学者の僕はこれくらいの印象しか持っていない。お勉強します。
実際にところ、これを音声に当てはめて考えるというのもいまいち理解ができていない。音声特徴のセグメントに、何らかのフィルタをかけて特徴抽出しやすくする、ということなのだろうが細かなアルゴリズムはよく分からない。うーむ……
CiNiiで貴重な日本語の論文を見つけたものの、僕のレベルが低くてとても倒せる代物ではなかった。レベルが上がったら再度挑戦してみよう。
ただ、TDNNの欠点としてはあくまで出力として出るのは音素の出現を表すスコアなので、入力された断片はどうもこの音素っぽいぞ、ということしか分からない。つまり単語とか文章には対応出来ていないので、別途辞書と組み合わせて解析するシステムが必要となる。したがってTDNNを改良して得られたのが次に紹介するハイブリッド方式である。
HMMとTDNNのハイブリッド方式
NNのほうが識別性能は高いのに、確率的言語モデルとの統合は難しいよね、という問題を解決するためにHMMを導入したのがこの技術。この方式では、NNはHMM状態の確率分布を表現するために用いられるのだとか。
ハイブリッド方式はニューラルネットワークの出力層にソフトマックス層を採用している。ソフトマックス層はおそらく活性化関数にソフトマックス関数を使用している層のことだろう。たぶんだけど。
ソフトマックス関数はK個のクラスに分類できる活性化関数で、出力はK個で、その総和は1となる。つまり、出力値がそのままどのクラスに属す確率が高いか、ということに利用できる。
HMMの出力確率密度関数(と教科書には書かれていた。要は出力関数のことかな。)をニューラルネットワークの出力で得られた確率分布とあらかじめ学習されたカテゴリカル分布の確率分布の比によって表現するのがハイブリッド方式。らしいよ。
カテゴリカル分布は、
にそこそこしっくりくる説明が乗っていたので参考にするといいでしょう。
肝心のニューラルネットワークの学習は、HMM状態の推定値を何らかの方法で求めて(オイオイ…)、交差エントロピー基準にて学習を行うとのこと。
交差エントロピー基準……
また新しい言葉だ…
いい加減疲れてきたよ…
これ結構纏めるの時間かかってるんだぜ?
しばらくネットの記事を彷徨っていると素晴らしいものを発見した。
個人的にかなり分かりやすかった。交差エントロピー基準でやると、初期値がかけ離れていてもそこそこ高速に学習してくれるという期待値があるからだろうか。うーん……
まとめ
まだタンデム方式が残っているけど、疲れてきたし今日はここまでにしておこう。HMMとTDNNのハイブリッド方式は割と使われているらしい。Juliusなんかもこれに近いんじゃないのだろうか。知らないけど。
参考文献
神嶌敏弘ほか(2015)『深層学習』近未来科学社
GitHub - julius-speech/julius: Open-Source Large Vocabulary Continuous Speech Recognition Engine
音声認識の音響モデル
音声認識にはどうやら2つのモデルが必要らしい。ひとつは音響モデルで、もうひとつが言語モデル。音響モデルにはHMM(隠れマルコフモデル)がよく使われる。らしい。
HMMってなんぞ?
HMMは一つ前の状態が現状態に影響している、ということくらいしか印象に残っていないため、いざ参考書とか教科書とかででてきた時にぐぬぬとなってしまう。よくない。
というわけでこれを機会におさらい。困った時のWikipedia先生に聞いてみるとめちゃくちゃ分かりやすかった。
ここの具体例が秀逸だった。よかったら読んでみてほしい。
さて、大体の内容をまとめると、
- 隠れマルコフモデルのパラメータは、遷移確率と出力確率の2種類
- 遷移確率は時間t-1の時の状態から時間tになった時、ある状態に遷移する確率
- 出力関数はある状態の時に何らかの特定の出力がなされる確率
- この2つをかけ合わせて一番確率の高いやつを選べば次の状態予測できね?
みたいな。
音声認識においてややこしいのは出力関数の方だ。遷移確率に関しては、発音辞書モデルと若干特殊な遷移確率を組み合わせるだけなのでそれほど難しいものではない。
出力関数は、深層学習が浸透する前はGMMを使っていたとかでGMMのお勉強もしなければならないという曲者。というわけで次はGMMについて。
GMMってなんぞや?
GMMは混合正規分布やガウス混合分布などと呼ばれているらしい。読んで字のごとく、「複数の正規分布を混ぜあわせたもの」がGMM。
正規分布は平均値に一番偏りが出る富士山みたいなアレ(伝われ)。
このスライドが比較的詳しく解説がなされていた。
EMアルゴリズムを使うのね、というところが一番のポイントのような気がする。細かな証明はよく分からん。
調べてみると、Pythonでオープンソースによりライブラリが提供されているらしい。以下リンク。
http://scikit-learn.org/stable/tutorial/index.html
なので、これでクラスタリングがしたいという人はPythonを触ってみるとおもしろいかも。
メル周波数ケプストラム係数????
メル周波数ケプストラム係数(MFCC)なるものが世の中には存在するらしい。どうやら深層学習を用いない時の音響モデルではこれに基づいたものが活用されている模様(へぇ)。これも細かなところまで見ていくと死んでしまう。使用している教科書には7行ほどで説明が書かれていたが、全く理解できる代物ではなかった。残念。
なんとなく調べたりして掴んだ印象としては、特徴量ベクトルとしてMFCCは優秀らしい。そもそも音声認識では、入力された波形データからそのデータの特徴を抽出して、そいつを音響モデルと言語モデルと辞書で頑張ってデコードしてテキストに変換するというタスクだ。
そこの特徴量としてMFCCを活用するとよいらしい、というのは分かったのだが、細かな計算はよく分からない。
ただ、
- 入力音声とメルフィルタバンクを掛け合わせる
- 1で得られたスペクトルの概形を離散コサイン変換(DCT)する
- 2で得られたメル周波数ケプストラム係数の下から12個くらいを取り出す
- (おまけ)逆離散コサイン変換するとなんとなく波形の特徴が捉えられているのがわかる
以上の手続きを取ることが多いみたい。
まとめ
数式が入るととたんに理解が進みにくくなるのがこのあたりの分野の良くないところ。何をしているのか、というエッセンスだけ抽出したつもり。
次回の後編は言語モデルについてかな。ひょっとしたら中編かも。深層学習に関して一切触れてないし。
あと細かい数式とか理論は他のブログや専門書を頼りにしたほうがいいと思います。
参考文献
神嶌敏弘ほか(2015)『深層学習』近未来科学社
Answer2: 千葉祐弥(東北大学) - 音響学入門ペディア 以下リンクhttp://abcpedia.acoustics.jp/acoustic_feature_2.pdf