#include <julius/julius.h>
関数 | |
static void | free_node_exec (NODE *node) |
< Define if want triphone debug messages | |
void | free_node (NODE *node) |
仮説ノードの利用を終了してリサイクル用にストックする | |
void | clear_stocker (StackDecode *s) |
リサイクル用ノード格納庫を空にする. | |
NODE * | cpy_node (NODE *dst, NODE *src) |
仮説をコピーする. | |
NODE * | newnode (RecogProcess *r) |
新たな仮説ノードを割り付ける. | |
void | malloc_wordtrellis (RecogProcess *r) |
1単語分のトレリス計算用のワークエリアを確保. | |
void | free_wordtrellis () |
1単語分のトレリス計算用のワークエアリアを解放 | |
static LOGPROB | get_max_out_arc (HTK_HMM_Trans *tr, int state_num) |
最終状態への遷移確率の最大値を求める (multipath) | |
static LOGPROB | max_out_arc (HMM_Logical *l) |
音素の出力状態への遷移確率の最大値を求める. | |
void | scan_word (NODE *now, HTK_Param *param, RecogProcess *r) |
最後の1単語の前向きトレリスを計算して,文仮説の前向き尤度を更新する. | |
void | next_word (NODE *now, NODE *new, NEXTWORD *nword, HTK_Param *param, RecogProcess *r) |
展開元仮説に次単語を接続して新しい仮説を生成する. | |
void | start_word (NODE *new, NEXTWORD *nword, HTK_Param *param, RecogProcess *r) |
与えられた単語から初期仮説を生成する. | |
void | last_next_word (NODE *now, NODE *new, HTK_Param *param, RecogProcess *r) |
終端処理:終端まで達した文仮説の最終的なスコアをセットする. | |
変数 | |
static LOGPROB * | wordtrellis [2] |
Buffer to compute viterbi path of a word | |
static int | tn |
Temporal pointer to current buffer | |
static int | tl |
Temporal pointer to previous buffer | |
static LOGPROB * | g |
Buffer to hold source viterbi scores | |
static HMM_Logical ** | phmmseq |
Phoneme sequence to be computed | |
static int | phmmlen_max |
Maximum length of phmmseq. | |
static boolean * | has_sp |
Mark which phoneme allow short pause for multi-path mode | |
static short * | wend_token_frame [2] |
Propagating token of word-end frame to detect corresponding end-of-words at word head | |
static LOGPROB * | wend_token_gscore [2] |
Propagating token of scores at word-end to detect corresponding end-of-words at word head |
ここでは,第2パスにおいて探索中の仮説のViterbiスコアの更新演算, 次単語とのトレリス接続,および仮説のスコア計算を行う関数が定義されて います.
単語接続部の単語間音素環境依存性は,高速な backscan アルゴリズムに よって行われます. このファイルで定義されている関数は,config.h において PASS2_STRICT_IWCD が undef であるときに使用されます. 逆に上記が define されているときは,search_bestfirst_v2.c の関数が用いられます.
Backscan アルゴリズムでは,デコーディングの高速化のため, 次単語とその前の単語の接続点について,「単語間音素コンテキストの遅延処理」 を行ないます:
仮説生成時にはすべての生成仮説に対して依存計算を行なず,あとでスコアが 高く POP された仮説についてのみ再計算を行ないます. このため処理が 高速化されますが,仮説スコア計算(next_word())において次単語接続部分の 環境依存性が考慮されないので, 探索中のスコアに誤差が生じる場合があります.
実装について:
なお,1音素のみからなる単語では backscan 開始点と単語境界が重なることを 考慮する必要があるため,実装はもう少し複雑になる.
search_bestfirst_v1.c で定義されています。
static void free_node_exec | ( | NODE * | node | ) | [static] |
< Define if want triphone debug messages
仮説ノードを実際にメモリ上から解放する.
node | [in] 仮説ノード |
search_bestfirst_v1.c の 138 行で定義されています。
参照元 clear_stocker().
void free_node | ( | NODE * | node | ) |
仮説ノードの利用を終了してリサイクル用にストックする
node | [in] 仮説ノード |
search_bestfirst_v1.c の 170 行で定義されています。
参照元 free_all_nodes(), put_all_in_stack(), と put_to_stack().
void clear_stocker | ( | StackDecode * | s | ) |
仮説をコピーする.
dst | [out] コピー先の仮説 | |
src | [in] コピー元の仮説 |
search_bestfirst_v1.c の 247 行で定義されています。
参照元 last_next_word().
NODE* newnode | ( | RecogProcess * | r | ) |
新たな仮説ノードを割り付ける.
もし格納庫に以前試用されなくなった ノードがある場合はそれを再利用する. なければ新たに割り付ける.
r | [in] 認識処理インスタンス |
search_bestfirst_v1.c の 324 行で定義されています。
void malloc_wordtrellis | ( | RecogProcess * | r | ) |
static LOGPROB get_max_out_arc | ( | HTK_HMM_Trans * | tr, | |
int | state_num | |||
) | [static] |
最終状態への遷移確率の最大値を求める (multipath)
tr | [in] 遷移行列 | |
state_num | [in] 状態数 |
search_bestfirst_v1.c の 537 行で定義されています。
参照元 max_out_arc().
static LOGPROB max_out_arc | ( | HMM_Logical * | l | ) | [static] |
音素の出力状態への遷移確率の最大値を求める.
(multipath)
l | [in] 音素 |
search_bestfirst_v1.c の 568 行で定義されています。
参照元 scan_word().
void scan_word | ( | NODE * | now, | |
HTK_Param * | param, | |||
RecogProcess * | r | |||
) |
最後の1単語の前向きトレリスを計算して,文仮説の前向き尤度を更新する.
now | [i/o] 文仮説 | |
param | [in] 入力パラメータ列 | |
r | [in] 認識処理インスタンス |
search_bestfirst_v1.c の 595 行で定義されています。
void next_word | ( | NODE * | now, | |
NODE * | new, | |||
NEXTWORD * | nword, | |||
HTK_Param * | param, | |||
RecogProcess * | r | |||
) |
展開元仮説に次単語を接続して新しい仮説を生成する.
次単語の単語トレリス上の スコアから最尤接続点を求め,仮説スコアを計算する.
now | [in] 展開元仮説 | |
new | [out] 新たに生成された仮説が格納される | |
nword | [in] 接続する次単語の情報 | |
param | [in] 入力パラメータ列 | |
r | [in] 認識処理インスタンス |
search_bestfirst_v1.c の 1393 行で定義されています。
void start_word | ( | NODE * | new, | |
NEXTWORD * | nword, | |||
HTK_Param * | param, | |||
RecogProcess * | r | |||
) |
与えられた単語から初期仮説を生成する.
new | [out] 新たに生成された仮説が格納される | |
nword | [in] 初期仮説単語の情報 | |
param | [in] 入力パラメータ列 | |
r | [in] 認識処理インスタンス |
search_bestfirst_v1.c の 1625 行で定義されています。
void last_next_word | ( | NODE * | now, | |
NODE * | new, | |||
HTK_Param * | param, | |||
RecogProcess * | r | |||
) |
終端処理:終端まで達した文仮説の最終的なスコアをセットする.
now | [in] 終端まで達した仮説 | |
new | [out] 最終的な文仮説のスコアを格納する場所へのポインタ | |
param | [in] 入力パラメータ列 | |
r | [in] 認識処理インスタンス |
search_bestfirst_v1.c の 1719 行で定義されています。