第2パスで仮説のViterbi演算およびスコア計算を行う(backscan用) [詳細]
#include <julius.h>
関数 | |
void | free_node_exec (NODE *node) |
void | free_node (NODE *node) |
void | clear_stocker () |
NODE * | cpy_node (NODE *dst, NODE *src) |
NODE * | newnode () |
void | malloc_wordtrellis () |
void | free_wordtrellis () |
void | scan_word (NODE *now, HTK_Param *param) |
void | next_word (NODE *now, NODE *new, NEXTWORD *nword, HTK_Param *param, BACKTRELLIS *backtrellis) |
void | start_word (NODE *new, NEXTWORD *nword, HTK_Param *param, BACKTRELLIS *backtrellis) |
void | last_next_word (NODE *now, NODE *new, HTK_Param *param) |
変数 | |
static NODE * | stocker_root = NULL |
< Define if want triphone debug messages | |
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. |
第2パスで仮説のViterbi演算およびスコア計算を行う(backscan用)
ここでは,第2パスにおいて探索中の仮説のViterbiスコアの更新演算, 次単語とのトレリス接続,および仮説のスコア計算を行う関数が定義されて います.
単語接続部の単語間音素環境依存性は,高速な backscan アルゴリズムに よって行われます.このファイルで定義されている関数は,config.h において PASS2_STRICT_IWCD が undef であるときに使用されます.逆に上記が define されているときは,search_bestfirst_v2.c の関数が用いられます.
Backscan アルゴリズムでは,デコーディングの高速化のため, 次単語とその前の単語の接続点について,「単語間音素コンテキストの遅延処理」 を行ないます:
仮説生成時にはすべての生成仮説に対して依存計算を行なず,あとでスコアが 高く POP された仮説についてのみ再計算を行ないます.このため処理が 高速化されますが,仮説スコア計算(next_word())において次単語接続部分の 環境依存性が考慮されないので, 探索中のスコアに誤差が生じる場合があります.
実装について:
なお,1音素のみからなる単語では backscan 開始点と単語境界が重なることを 考慮する必要があるため,実装はもう少し複雑になる.
search_bestfirst_v1.c で定義されています。
void free_node_exec | ( | NODE * | node | ) |
仮説ノードを実際にメモリ上から解放する.
node | [in] 仮説ノード |
search_bestfirst_v1.c の 140 行で定義されています。
参照元 clear_stocker().
void free_node | ( | NODE * | node | ) |
仮説ノードの利用を終了してリサイクル用にストックする
node | [in] 仮説ノード |
search_bestfirst_v1.c の 169 行で定義されています。
参照元 free_all_nodes(), put_all_in_stack(), put_to_stack(), result_reorder_and_output(), と wchmm_fbs().
void clear_stocker | ( | ) |
仮説をコピーする.
dst | [out] コピー先の仮説 | |
src | [in] コピー元の仮説 |
search_bestfirst_v1.c の 238 行で定義されています。
参照元 last_next_word(), と wchmm_fbs().
NODE* newnode | ( | ) |
新たな仮説ノードを割り付ける.もし格納庫に以前試用されなくなった ノードがある場合はそれを再利用する.なければ新たに割り付ける.
search_bestfirst_v1.c の 314 行で定義されています。
参照元 wchmm_fbs().
void malloc_wordtrellis | ( | ) |
void free_wordtrellis | ( | ) |
最後の1単語の前向きトレリスを計算して,文仮説の前向き尤度を更新する.
now | [i/o] 文仮説 | |
param | [in] 入力パラメータ列 |
search_bestfirst_v1.c の 555 行で定義されています。
参照元 wchmm_fbs().
void next_word | ( | NODE * | now, | |
NODE * | new, | |||
NEXTWORD * | nword, | |||
HTK_Param * | param, | |||
BACKTRELLIS * | backtrellis | |||
) |
展開元仮説に次単語を接続して新しい仮説を生成する.次単語の単語トレリス上の スコアから最尤接続点を求め,仮説スコアを計算する.
now | [in] 展開元仮説 | |
new | [out] 新たに生成された仮説が格納される | |
nword | [in] 接続する次単語の情報 | |
param | [in] 入力パラメータ列 | |
backtrellis | [in] 単語トレリス |
search_bestfirst_v1.c の 1353 行で定義されています。
参照元 wchmm_fbs().
void start_word | ( | NODE * | new, | |
NEXTWORD * | nword, | |||
HTK_Param * | param, | |||
BACKTRELLIS * | backtrellis | |||
) |
与えられた単語から初期仮説を生成する.
new | [out] 新たに生成された仮説が格納される | |
nword | [in] 初期仮説単語の情報 | |
param | [in] 入力パラメータ列 | |
backtrellis | [in] 単語トレリス |
search_bestfirst_v1.c の 1587 行で定義されています。
参照元 wchmm_fbs().
終端処理:終端まで達した文仮説の最終的なスコアをセットする.
now | [in] 終端まで達した仮説 | |
new | [out] 最終的な文仮説のスコアを格納する場所へのポインタ | |
param | [in] 入力パラメータ列 |
search_bestfirst_v1.c の 1674 行で定義されています。
参照元 wchmm_fbs().
NODE* stocker_root = NULL [static] |
< Define if want triphone debug messages
Node stocker for recycle
search_bestfirst_v1.c の 118 行で定義されています。