julius/search_bestfirst_main.c

第2パスのスタックデコーディング [詳細]

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

ソースコードを見る。

関数

static NODEget_best_from_stack (NODE **start, int *stacknum)
static int put_to_stack (NODE *new, NODE **start, NODE **bottom, int *stacknum, int stacksize)
static void put_all_in_stack (NODE **start, int *stacknum)
static void free_all_nodes (NODE *node)
static void put_hypo_woutput (NODE *hypo)
static void put_hypo_wname (NODE *hypo)
static NEXTWORD ** nw_malloc (int *maxlen, NEXTWORD **root)
static void nw_free (NEXTWORD **nw, NEXTWORD *root)
static int can_put_to_stack (NODE *new, NODE **bottom, int *stacknum, int stacksize)
static void cm_init (WORD_INFO *winfo)
static void cm_store (NODE *new)
static void cm_sum_score ()
static void cm_set_score (NODE *node)
static NODEcm_get_node ()
static void wb_init ()
static boolean wb_ok (NODE *now)
static void envl_init (int framenum)
static void envl_update (NODE *n, int framenum)
static void result_reorder_and_output (NODE **r_start, NODE **r_bottom, int *r_stacknum, int ncan, WORD_INFO *winfo)
void wchmm_fbs (HTK_Param *param, BACKTRELLIS *backtrellis, LOGPROB backmax, int stacksize, int ncan, int maxhypo, int cate_bgn, int cate_num)

変数

static LOGPROB cm_tmpbestscore
 Temporal best score for summing up scores.
static LOGPROB cm_tmpsum
 Sum of CM score.
static int l_stacksize
 Local stack size for CM.
static int l_stacknum
 Num of hypo. in local stack for CM.
static NODEl_start = NULL
 Top node of local stack for CM.
static NODEl_bottom = NULL
 bottom node of local stack for CM
static int hypo_len_count [MAXSEQNUM+1]
 Count of popped hypothesis per each length.
static int maximum_filled_length
 Current least beam-filled depth.
static HTK_Paramtparam
 Temporal parameter for forced alignment.

説明

第2パスのスタックデコーディング

作者:
Akinobu Lee
日付:
Thu Sep 08 11:51:12 2005

Julius/Julian の第2パスであるスタックデコーディングアルゴリズムが 記述されています。第1パスの結果の単語トレリス情報を元に、第1パスとは 逆向きの right-to-left に探索を行います。仮説のスコアは、第1パスのトレリス とそのスコアを未探索部のヒューリスティックとして接続することで、 文全体の仮説スコアを考慮しながら探索を行います。

単語の展開では、Julius では ngram_decode.c 内の関数が、Julian では dfa_decode.c の関数が次単語集合を取得するために使用されます。

単語信頼度の計算やビームを考慮したスコア計算、enveloped beam 探索も ここで記述されています。

Revision
1.7

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


関数

static NODE * get_best_from_stack ( NODE **  start,
int *  stacknum 
) [static]

スタックトップの最尤仮説を取り出す.

引数:
start [i/o] スタックの先頭ノードへのポインタ(書換えられる場合あり)
stacknum [i/o] 現在のスタックサイズへのポインタ(書き換えあり)
戻り値:
取り出した最尤仮説のポインタを返す.

search_bestfirst_main.c217 行で定義されています。

参照元 cm_get_node(), put_all_in_stack(), result_reorder_and_output(), と wchmm_fbs().

static int put_to_stack ( NODE new,
NODE **  start,
NODE **  bottom,
int *  stacknum,
int  stacksize 
) [static]

スタックに新たな仮説を格納する. スタック内のスコア順を考慮した位置に挿入される. 格納できなかった場合,与えられた仮説は free_node() される.

引数:
new [in] チェックする仮説
start [i/o] スタックのトップノードへのポインタ
bottom [i/o] スタックの底ノードへのポインタ
stacknum [i/o] スタックに現在格納されているノード数へのポインタ
stacksize [in] スタックのノード数の上限
戻り値:
格納できれば 0 を,できなかった場合は -1 を返す.

search_bestfirst_main.c300 行で定義されています。

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

static void put_all_in_stack ( NODE **  start,
int *  stacknum 
) [static]

スタックの中身を全て出力する.スタックの中身は失われる.(デバッグ用)

引数:
start [i/o] スタックのトップノードへのポインタ
stacknum [i/o] スタックに現在格納されているノード数へのポインタ

search_bestfirst_main.c386 行で定義されています。

参照元 wchmm_fbs().

static void free_all_nodes ( NODE start  )  [static]

スタック内の全仮説を解放する.

引数:
start [i/o] スタックのトップノード

search_bestfirst_main.c411 行で定義されています。

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

static void put_hypo_woutput ( NODE hypo  )  [static]

デバッグ用に仮説の単語列を表示する.

引数:
hypo [in] 仮説

search_bestfirst_main.c932 行で定義されています。

参照元 put_all_in_stack(), wb_ok(), と wchmm_fbs().

static void put_hypo_wname ( NODE hypo  )  [static]

デバッグ用に仮説の単語N-gramエントリ名(Julianではカテゴリ番号)を出力する.

引数:
hypo [in] 仮説

search_bestfirst_main.c958 行で定義されています。

参照元 wchmm_fbs().

static NEXTWORD** nw_malloc ( int *  maxlen,
NEXTWORD **  root 
) [static]

次単語候補を格納するための NEXTWORD 配列にメモリを割り付ける.

引数:
maxlen [out] 格納可能な単語数
root [out] 割り付け領域の先頭へのポインタ
戻り値:
割り付けられた次単語配列へのポインタを返す.

search_bestfirst_main.c87 行で定義されています。

参照元 wchmm_fbs().

static void nw_free ( NEXTWORD **  nw,
NEXTWORD root 
) [static]

次単語候補を格納する NEXTWORD 配列のメモリを解放する.

引数:
nw [in] NEXTWORD配列
root [in] nw_malloc() で与えられた領域先頭へのポインタ

search_bestfirst_main.c123 行で定義されています。

参照元 wchmm_fbs().

static int can_put_to_stack ( NODE new,
NODE **  bottom,
int *  stacknum,
int  stacksize 
) [static]

ある仮説がスタック内に格納されるかどうかチェックする.

引数:
new [in] チェックする仮説
bottom [in] スタックの底ノードへのポインタ
stacknum [in] スタックに現在格納されているノード数へのポインタ
stacksize [in] スタックのノード数の上限
戻り値:
スタックのサイズが上限に達していないか,スコアが底ノードよりも よければ格納されるとして 0 を,それ以外であれば格納できないとして -1 を 返す.

search_bestfirst_main.c261 行で定義されています。

参照元 wchmm_fbs().

static void cm_init ( WORD_INFO winfo  )  [static]

CM計算用のパラメータを初期化する(第2パス開始時に呼び出される)

引数:
winfo [in] 単語辞書

search_bestfirst_main.c470 行で定義されています。

参照元 wchmm_fbs().

static void cm_store ( NODE new  )  [static]

CM計算のためにローカルスタックに展開仮説を一時的に保存する.

引数:
new [in] 展開仮説

search_bestfirst_main.c495 行で定義されています。

参照元 wchmm_fbs().

static void cm_sum_score (  )  [static]

CM計算のためにローカルスタック内の仮説の出現確率の合計を求める.

search_bestfirst_main.c513 行で定義されています。

参照元 wchmm_fbs().

static void cm_set_score ( NODE node  )  [static]

展開されたある文仮説について,その展開単語の信頼度を,事後確率に 基づいて計算する.

引数:
node [i/o] 展開されたある文仮説

search_bestfirst_main.c559 行で定義されています。

参照元 wchmm_fbs().

static NODE* cm_get_node (  )  [static]

CM計算用のローカルスタックから仮説を取り出す.

戻り値:
取り出された文仮説を返す.

search_bestfirst_main.c589 行で定義されています。

参照元 wchmm_fbs().

static void wb_init (  )  [static]

Word envelope 用にカウンタを初期化する.

search_bestfirst_main.c731 行で定義されています。

参照元 wchmm_fbs().

static boolean wb_ok ( NODE now  )  [static]

Word envelope を参照して,与えられた仮説を展開してよいかどうかを返す. また,Word envelope のカウンタを更新する.

引数:
now [in] 今から展開しようとしている仮説
戻り値:
展開可能(ビームカウントが上限に達していない)なら TRUE, 展開不可能(カウントに達している)なら FALSE を返す.

search_bestfirst_main.c761 行で定義されています。

参照元 wchmm_fbs().

static void envl_init ( int  framenum  )  [static]

Score envelope を初期化する.第2パスの開始時に呼ばれる.

引数:
framenum [in] 入力フレーム長

search_bestfirst_main.c825 行で定義されています。

参照元 wchmm_fbs().

static void envl_update ( NODE n,
int  framenum 
) [static]

仮説の前向きスコアから score envelope を更新する.

引数:
n [in] 仮説
framenum [in] 入力フレーム長

search_bestfirst_main.c846 行で定義されています。

参照元 wchmm_fbs().

static void result_reorder_and_output ( NODE **  r_start,
NODE **  r_bottom,
int *  r_stacknum,
int  ncan,
WORD_INFO winfo 
) [static]

スタックから上位の仮説を取り出し,認識結果として出力する.さらに, スタックに格納されている全ての仮説を解放する.

Julius/Julian では,第2パスにおいて得られた文候補は,いったん結果格納用 のスタックに格納される.探索終了("-n" の数だけ文候補が見つかるか, 探索が中断される)の後,結果的に得られた文候補の中から上位N個 ("-output" で指定された数)の仮説を出力する.

引数:
r_start [i/o] 結果格納用スタックの先頭ノードへのポインタ
r_bottom [i/o] 結果格納用スタックの底ノードへのポインタ
r_stacknum [i/o] スタックに格納されているノード数へのポインタ
ncan [in] 出力する上位仮説数
winfo [in] 単語辞書

search_bestfirst_main.c1011 行で定義されています。

参照元 wchmm_fbs().

void wchmm_fbs ( HTK_Param param,
BACKTRELLIS backtrellis,
LOGPROB  backmax,
int  stacksize,
int  ncan,
int  maxhypo,
int  cate_bgn,
int  cate_num 
)

第2探索パスであるスタックデコーディングを行うメイン関数

引数:
param [in] 入力パラメータベクトル列
backtrellis [in] 第1パスで得られた単語トレリス
backmax [in] 第1パスで得られた累積仮説スコアの最大値
stacksize [in] 仮説スタックのサイズ
ncan [in] 得るべき文候補数
maxhypo [in] 探索を断念する展開数閾値
cate_bgn [in] 展開対象とすべきカテゴリの開始番号(Juliusでは無視)
cate_num [in] 展開対象とすべきカテゴリの数(Juliusでは無視)

search_bestfirst_main.c1083 行で定義されています。

参照元 main_recognition_loop().


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