音声認識

新しいデバイスとして音声認識のできるものが市場に出回るようになってきた。 この仕組みを理解しよう。

パターン認識

音声、静止画像、動画等でも同じ考え方をする。以下のようなモジュール構成。

前処理部 -- 特徴抽出部 -- 識別部 (識別辞書とのやりとり) -- 認識

特徴抽出処理では、パターンの変動に影響されない情報で、 かつ識別に役立つ情報をベクトル形式で抽出する。

声の大きさや、誰が話しているのか、などではない情報。

パターンの前処理: アナログ信号をディジタル信号に変換する。 標本化と量子化 を用いる。

スペクトルサブトラクション spectrum subtraction など、 無音空間の情報を利用して雑音を特定し、 引算することによって調べることができる。

特徴抽出とは、入力パターンとクラス分類で処理が異なるが、 一般的な考え方を述べる。特徴を d 次元とし、

x = (x1, x2, ..., xd)t

と分類する。手本となるベクトルをプロトタイプと呼び、 クラスを c 種類用意したら、それぞれ p1, p2, ..., pc 個のベクトルが作れる。

プロトタイプの距離を測り、もっとも近いプロトタイプの属するクラス ωi を正解とする Nearest Neighbor 法をとる。

統計的手法によるデータの推定

認識誤りをしないパターン認識システムの開発は不可能であるため、 「誤り確率が最小となるようなパターン認識プログラムを開発する」 ことをまず目標とする。

実際は判定後の結果が重大な損失を起こさないかどうかを見積り、 その損失量の期待値を低くなるようにパターン認識システムを設計する。

Bayes 判定法を用いる。しかしながら、 事後確率は統計的なパターン認識問題においては直接求めることができない。 したがって Bayes の定理を用いる。確率密度関数は尤もらしさを表す関数で、 尤度関数(ゆうどかんすう)という。

音声認識技術

連続認識の問題についてまとめておく。

音響モデルでの困難さ: 単語列からある特徴ベクトルの系列が生成される確率は、 特徴ベクトルの出現と同じように、制約がある。 単語発音の適した長さ程度でないものは、 低い確率をあたえる重みが必要になる。 言語モデルについえは、文法記述と書取 dictation がある。 task domain に出現する単語列を規則として記述し、 この単語列には正の確率を与える。 そうでないものは 確率 0 を与える。語彙数が少なければこの方法で十分である。

XML 形式による分類

XML で分類する方法が一般には使われるようになってきた。

指数関数

指数関数の公式を LaTeX で作成してみよう。 グラフソフトを使って実際に書いてみよう。

二項定理

コインの表と裏の分布について調べるようなとき、 二項定理が使えた。 プログラム を使って、その分布を調べてみよう。

二項分布は、試行回数が少ない場合はそうでもないが、 多くなってくると 正規分布曲線 に似てくることを調べよう。

Gnuplot が自動的に立ち上がるように改良せよ。

複数のデータも取り扱えるように改良せよ。

二項分布と正規分布

Z=(X-np) / √(npq)

とすると、n が十分大きくなると、標準正規分布 N(0, 1) に近づく。これを標準化 という。

標準正規分布の確率変数 Z の確率密度関数は

f(z) = 1 / √(2 π) e-z2/2

で表される。

確率変数 X が正規分布 N(m, σ2) に従うとき、 X を 1 次式で変換してできる確率変数を a X + b (a, b は定数) も正規分布に従う確率変数である。とくに、

Z=(X-m)/σ とおくと、Z は標準正規分布 N(0, 1) に従う。

標準正規分布表のデータ を作ってみよう。

日本語をローマ字読みで出力

roy では kakasi と romkan を使う。 他にも方法がある。 自作のマシンでいろいろ試すべし。

kakasi -KH -JH で漢字と片仮名をひらがなになおす。ちなみに stable は EUC であるので、UTF-8 の espeak を使うためには nkf -e で変換、 nkf -w で出力等の変換が必要となる。

kakasi の devel は UTF-8 対応とのこと。

マシンによっては nkf -w16B または nkf -w16L など、 endian を気にする必要もあるので注意。

分かち書きは kakasi -w でできるが、漢字変換などを一度に実行できないので、 さらに kakasi を噛ませることで対応させる。

-JH で JIS X 208 漢字をひらがな、-KJ で JIS X 208 カタカナをひらがなにする。 -kH で JIS X 210 漢字をひらがなにする。

-Ja で漢字をローマ字、-Ka でカタカナををローマ字にすることができる。

日本語をローマ字読みで出力したものを読ませる

大学の環境ではむずかしいので、自作マシンに espeak, kakasi, ruby, w3m 等々を入れる。

一旦書きこませたファイルを読ませる方法をとる。