音声認識メモ(Julius)その4(連続単語認識(DFA))
Juliusでは、連続単語の言語モデルとして、「N-gram」と「DFA」をサポートしている。
ここでのDFA(Deterministic finite automaton、決定性有限オートマトン)はMealy型有限オートマトンのことで、出力が現在状態と入力に決定されるモデル。
遷移は一方通行で、ある特定の状態のみに遷移する。
DFAは、「XXをYY個」のように、定型的なパターンの音声の認識に適している。
今回、「もしもし」と「もしも もしも」("もしも"の2回繰り返し)の2つの文で試してみた。
まずは2つの記述文法ファイルを用意する
test.grammar
S : NS_B DOUBLE NOISE DOUBLE NS_E S : NS_B SINGLE NS_E
test.voca
% DOUBLE MOSIMO m o s i m o % SINGLE MOSIMOSI m o s i m o s i % NS_B <s> silB % NS_E </s> silE % NOISE <sp> sp
test.dfa
0 3 1 0 0 1 0 2 0 0 1 1 3 0 0 2 4 4 0 0 3 2 5 0 0 4 0 3 0 0 5 -1 -1 1 0
1列目 : 状態(From、遷移元)
2列目 : terminal(カテゴリ番号、単語にあたるもの)
3列目 : 状態(TO、遷移先)
4列目 : 文の終わりなら「1」
5列目 : 未使用
test.dict
0 [MOSIMO] m o s i m o 1 [MOSIMOSI] m o s i m o s i 2 [<s>] silB 3 [</s>] silE 4 [<sp>] sp
1列目 : カテゴリ番号
test.term
0 DOUBLE 1 SINGLE 2 NS_B 3 NS_E 4 NOISE
1列目 : カテゴリ番号
図にすると以下のとおり。
丸枠:状態番号
赤 : 文を構成する単語
緑 : カテゴリ番号
Juliusでは、連続単語の場合、第1パスと第2パスの2回分、計算する。
第2パスでは、後ろから(right -> left)計算するため、DFAも後ろからになっている。