julius/search_bestfirst_v1.c

第2パスで仮説のViterbi演算およびスコア計算を行う(backscan用) [詳細]

#include <julius.h>
search_bestfirst_v1.cのインクルード依存関係図

ソースコードを見る。

関数

void free_node_exec (NODE *node)
void free_node (NODE *node)
void clear_stocker ()
NODEcpy_node (NODE *dst, NODE *src)
NODEnewnode ()
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 NODEstocker_root = NULL
 < Define if want triphone debug messages
static LOGPROBwordtrellis [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 LOGPROBg
 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用)

作者:
Akinobu Lee
日付:
Sun Sep 11 23:54:53 2005

ここでは,第2パスにおいて探索中の仮説のViterbiスコアの更新演算, 次単語とのトレリス接続,および仮説のスコア計算を行う関数が定義されて います.

単語接続部の単語間音素環境依存性は,高速な backscan アルゴリズムに よって行われます.このファイルで定義されている関数は,config.h において PASS2_STRICT_IWCD が undef であるときに使用されます.逆に上記が define されているときは,search_bestfirst_v2.c の関数が用いられます.

Backscan アルゴリズムでは,デコーディングの高速化のため, 次単語とその前の単語の接続点について,「単語間音素コンテキストの遅延処理」 を行ないます:

  1. 新仮説の生成(next_word())では,次単語の最後の音素の右コンテキスト のみが考慮される.
  2. その単語間の完全な音素環境依存性は,その仮説がいったんスタックに 入った後もう一度 POP されたときに scan_word() にて改めて計算する.

仮説生成時にはすべての生成仮説に対して依存計算を行なず,あとでスコアが 高く POP された仮説についてのみ再計算を行ないます.このため処理が 高速化されますが,仮説スコア計算(next_word())において次単語接続部分の 環境依存性が考慮されないので, 探索中のスコアに誤差が生じる場合があります.

実装について:

  1. next_word() では,次単語の最後の音素のみを右コンテキスト(=展開元 単語の最初の音素)を考慮して変化させ,トレリス接続点の出力確率を求める.
  2. scan_word() では,新単語部分ともう1つ前の単語の最初の音素を変化 させ,scan する.そのため新単語部分だけでなく,そのもう一音素前まで scan の対象となる.この "1-phoneme backscan" を行なうため, 各仮説ノードは最終HMM状態の前向きスコア (NODEにおける g[]) だけでなく, その backscan 開始点(もう1つ前の単語の最初の音素の手前)のスコア も保存しておく必要がある (NODE における g_prev[]).

なお,1音素のみからなる単語では backscan 開始点と単語境界が重なることを 考慮する必要があるため,実装はもう少し複雑になる.

Revision
1.5

search_bestfirst_v1.c で定義されています。


関数

void free_node_exec ( NODE node  ) 

仮説ノードを実際にメモリ上から解放する.

引数:
node [in] 仮説ノード

search_bestfirst_v1.c140 行で定義されています。

参照元 clear_stocker().

void free_node ( NODE node  ) 

仮説ノードの利用を終了してリサイクル用にストックする

引数:
node [in] 仮説ノード

search_bestfirst_v1.c169 行で定義されています。

参照元 free_all_nodes(), put_all_in_stack(), put_to_stack(), result_reorder_and_output(), と wchmm_fbs().

void clear_stocker (  ) 

リサイクル用ノード格納庫を空にする.

search_bestfirst_v1.c199 行で定義されています。

参照元 wchmm_fbs().

NODE* cpy_node ( NODE dst,
NODE src 
)

仮説をコピーする.

引数:
dst [out] コピー先の仮説
src [in] コピー元の仮説
戻り値:
dst を返す.

search_bestfirst_v1.c238 行で定義されています。

参照元 last_next_word(), と wchmm_fbs().

NODE* newnode (  ) 

新たな仮説ノードを割り付ける.もし格納庫に以前試用されなくなった ノードがある場合はそれを再利用する.なければ新たに割り付ける.

戻り値:
新たに割り付けられた仮説ノードへのポインタを返す.

search_bestfirst_v1.c314 行で定義されています。

参照元 wchmm_fbs().

void malloc_wordtrellis (  ) 

1単語分のトレリス計算用のワークエリアを確保.

search_bestfirst_v1.c418 行で定義されています。

参照元 wchmm_fbs().

void free_wordtrellis (  ) 

1単語分のトレリス計算用のワークエアリアを解放

search_bestfirst_v1.c456 行で定義されています。

参照元 wchmm_fbs().

void scan_word ( NODE now,
HTK_Param param 
)

最後の1単語の前向きトレリスを計算して,文仮説の前向き尤度を更新する.

引数:
now [i/o] 文仮説
param [in] 入力パラメータ列

search_bestfirst_v1.c555 行で定義されています。

参照元 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.c1353 行で定義されています。

参照元 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.c1587 行で定義されています。

参照元 wchmm_fbs().

void last_next_word ( NODE now,
NODE new,
HTK_Param param 
)

終端処理:終端まで達した文仮説の最終的なスコアをセットする.

引数:
now [in] 終端まで達した仮説
new [out] 最終的な文仮説のスコアを格納する場所へのポインタ
param [in] 入力パラメータ列

search_bestfirst_v1.c1674 行で定義されています。

参照元 wchmm_fbs().


変数

NODE* stocker_root = NULL [static]

< Define if want triphone debug messages

Node stocker for recycle

search_bestfirst_v1.c118 行で定義されています。


Juliusに対してTue Sep 22 00:14:27 2009に生成されました。  doxygen 1.6.0