メインページ | モジュール | データ構造 | Directories | ファイル一覧 | データフィールド | グローバル | 関連ページ

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 NEXTWORD ** nw_expand (NEXTWORD **nwold, int *maxlen, NEXTWORD **root)
 次単語候補格納用の NEXTWORD 配列のメモリ領域を伸張する.
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 NEXTWORD fornoise
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.1.1.1

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 行で定義されています。

static void put_hypo_wname NODE hypo  )  [static]
 

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

引数:
hypo [in] 仮説

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

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 NEXTWORD** nw_expand NEXTWORD **  nwold,
int *  maxlen,
NEXTWORD **  root
[static]
 

次単語候補格納用の NEXTWORD 配列のメモリ領域を伸張する.

この関数は探索中に次単語候補集合が溢れた際に呼ばれ,配列により多くの 次単語候補を格納できるよう NEXTWORD の中身を realloc() する. 実際には最初に nw_malloc() で辞書の単語数分だけ領域を確保しており, Julius では呼ばれることはない.Julian では,ショートポーズの スキップ処理により状態の異なる候補を同時に展開するので, 次単語数が語彙数よりも大きいことが起こりうる.

引数:
nwold [i/o] NEXTWORD配列
maxlen [i/o] 最大格納数を格納するポインタ.現在の最大格納数を 入れて呼び,関数内で新たに確保された数に変更される.
root [i/o] 領域先頭へのポインタを格納するアドレス.関数内で 書き換えられる.
戻り値:
伸張された新たな次単語配列へのポインタを返す.

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

参照元 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().


変数

NEXTWORD fornoise [static]
 

Dummy NEXTWORD data for short-pause insertion handling.

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


Juliusに対してTue Mar 28 16:21:15 2006に生成されました。  doxygen 1.4.2