libjulius/src/search_bestfirst_main.c

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

#include <julius/julius.h>

ソースコードを見る。

関数

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, WORD_INFO *winfo)
 スタックの中身を全て出力する.
static void free_all_nodes (NODE *start)
 スタック内の全仮説を解放する.
static void put_hypo_woutput (NODE *hypo, WORD_INFO *winfo)
 デバッグ用に仮説の単語列を表示する.
static void put_hypo_wname (NODE *hypo, WORD_INFO *winfo)
 デバッグ用に仮説の単語N-gramエントリ名(Julianではカテゴリ番号)を出力する.
static NEXTWORD ** nw_malloc (int *maxlen, NEXTWORD **root, int max)
 次単語の格納領域の割り当て.
static void nw_free (NEXTWORD **nw, NEXTWORD *root)
 次単語の格納領域の解放.
static NEXTWORD ** nw_expand (NEXTWORD **nwold, int *maxlen, NEXTWORD **root, int num)
 次単語候補格納用の NEXTWORD 配列のメモリ領域を伸張する.
static int can_put_to_stack (NODE *new, NODE **bottom, int *stacknum, int stacksize)
 ある仮説がスタック内に格納されるかどうかチェックする.
static void cm_init (StackDecode *sd, int wnum, LOGPROB cm_alpha)
 CM計算用のパラメータを初期化する.
static void cm_store (StackDecode *sd, NODE *new)
 CM計算のためにローカルスタックに展開仮説を一時的に保存する.
static void cm_sum_score (StackDecode *sd)
 CM計算のためにローカルスタック内の仮説の出現確率の合計を求める.
static void cm_set_score (StackDecode *sd, NODE *node)
 展開されたある文仮説について,その展開単語の信頼度を,事後確率に 基づいて計算する.
static NODEcm_get_node (StackDecode *sd)
 CM計算用のローカルスタックから仮説を取り出す.
static void wb_init (StackDecode *s)
 Word envelope 用にカウンタを初期化する.
static boolean wb_ok (StackDecode *s, NODE *now, int width)
 Word envelope を参照して,与えられた仮説を展開してよいかどうかを返す.
static void envl_init (StackDecode *s, int framenum)
 Score envelope を初期化する.
static void envl_update (StackDecode *s, NODE *n, int framenum)
 仮説の前向きスコアから score envelope を更新する.
void segment_set_last_nword (NODE *hypo, RecogProcess *r)
 認識結果から,次の入力区間の認識を開始する際の初期単語履歴をセットする.
static void store_result_pass2 (NODE *hypo, RecogProcess *r)
 第2パスの結果として仮説を保存する.
static void result_reorder_and_output (NODE **r_start, NODE **r_bottom, int *r_stacknum, int ncan, RecogProcess *r, HTK_Param *param)
 スタックから上位の仮説を取り出し,認識結果として出力する.
void pass2_finalize_on_no_result (RecogProcess *r, boolean use_1pass_as_final)
 第2パスの解が得られない場合の終了処理
void wchmm_fbs (HTK_Param *param, RecogProcess *r, int cate_bgn, int cate_num)
 第2探索パスであるスタックデコーディングを行うメイン関数


説明

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

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

次単語集合の取得のために,単語N-gramでは ngram_decode.c 内の関数が, 文法では dfa_decode.c の関数が用いられます.

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

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


関数

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

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

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

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

参照元 cm_get_node()put_all_in_stack()result_reorder_and_output().

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

参照元 cm_store().

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

スタックの中身を全て出力する.

スタックの中身は失われる. (デバッグ用)

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

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

static void free_all_nodes ( NODE start  )  [static]

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

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

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

参照元 result_reorder_and_output().

static void put_hypo_woutput ( NODE hypo,
WORD_INFO winfo 
) [static]

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

引数:
hypo [in] 仮説
winfo [in] 単語辞書

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

static void put_hypo_wname ( NODE hypo,
WORD_INFO winfo 
) [static]

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

引数:
hypo [in] 仮説
winfo [in] 単語辞書

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

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

次単語の格納領域の割り当て.

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

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

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

参照元 wchmm_fbs().

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

次単語の格納領域の解放.

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

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

static NEXTWORD** nw_expand ( NEXTWORD **  nwold,
int *  maxlen,
NEXTWORD **  root,
int  num 
) [static]

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

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

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

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

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

static void cm_init ( StackDecode sd,
int  wnum,
LOGPROB  cm_alpha 
) [static]

CM計算用のパラメータを初期化する.

CM計算の直前に呼び出される.

引数:
sd [i/o] 第2パス用ワークエリア
wnum [in] スタックサイズ
cm_alpha [in] 使用するスケーリング値

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

参照元 wchmm_fbs().

static void cm_store ( StackDecode sd,
NODE new 
) [static]

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

引数:
sd [i/o] 第2パス用ワークエリア
new [in] 展開仮説

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

static void cm_sum_score ( StackDecode sd  )  [static]

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

引数:
sd [i/o] 第2パス用ワークエリア

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

static void cm_set_score ( StackDecode sd,
NODE node 
) [static]

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

引数:
sd [i/o] 第2パス用ワークエリア
node [i/o] 展開されたある文仮説

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

static NODE* cm_get_node ( StackDecode sd  )  [static]

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

引数:
sd [i/o] 第2パス用ワークエリア
戻り値:
取り出された文仮説を返す.

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

static void wb_init ( StackDecode s  )  [static]

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

引数:
s [i/o] 第2パス用ワークエリア

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

参照元 wchmm_fbs().

static boolean wb_ok ( StackDecode s,
NODE now,
int  width 
) [static]

Word envelope を参照して,与えられた仮説を展開してよいかどうかを返す.

また,Word envelope のカウンタを更新する.

引数:
s [i/o] 第2パス用ワークエリア
now [in] 今から展開しようとしている仮説
width [in] 展開カウントの上限値
戻り値:
展開可能(展開カウントが上限に達していない)なら TRUE, 展開不可能(カウントが上限に達している)なら FALSE を返す.

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

static void envl_init ( StackDecode s,
int  framenum 
) [static]

Score envelope を初期化する.

第2パスの開始時に呼ばれる.

引数:
s [i/o] 第2パス用ワークエリア
framenum [in] 入力フレーム長

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

参照元 wchmm_fbs().

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

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

引数:
s [i/o] 第2パス用ワークエリア
n [in] 仮説
framenum [in] 入力フレーム長

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

void segment_set_last_nword ( NODE hypo,
RecogProcess r 
)

認識結果から,次の入力区間の認識を開始する際の初期単語履歴をセットする.

透過語および仮説の重複を考慮して初期単語履歴が決定される.

引数:
hypo [in] 現在の入力区間の認識結果としての文候補
r [in] 認識処理インスタンス

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

参照元 pass2_finalize_on_no_result()result_reorder_and_output().

呼出しグラフ:

static void store_result_pass2 ( NODE hypo,
RecogProcess r 
) [static]

第2パスの結果として仮説を保存する.

引数:
hypo [in] hypothesis to save
r [in] recognition process instance

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

参照元 result_reorder_and_output().

static void result_reorder_and_output ( NODE **  r_start,
NODE **  r_bottom,
int *  r_stacknum,
int  ncan,
RecogProcess r,
HTK_Param param 
) [static]

スタックから上位の仮説を取り出し,認識結果として出力する.

さらに, スタックに格納されている全ての仮説を解放する.

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

指定があればアラインメントもここで実行する.

引数:
r_start [i/o] 結果格納用スタックの先頭ノードへのポインタ
r_bottom [i/o] 結果格納用スタックの底ノードへのポインタ
r_stacknum [i/o] スタックに格納されているノード数へのポインタ
ncan [in] 出力する上位仮説数
r [in] 認識処理インスタンス
param [in] 入力パラメータ

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

void pass2_finalize_on_no_result ( RecogProcess r,
boolean  use_1pass_as_final 
)

第2パスの解が得られない場合の終了処理

第2パスが失敗した場合や第2パスが実行されない設定の場合の 認識終了処理を行う.use_1pass_as_final が TRUE のとき, 第1パスの結果を第2パスの結果としてコピーして格納し,認識成功とする. FALSE時は認識失敗とする. また,sp-segment 時は,次の認識区間用の初期仮説設定も第1パスの 結果から行う.

引数:
r [in] 認識処理インスタンス
use_1pass_as_final [in] TRUE 時第1パスの結果を第2パス結果に格納する

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

参照元 j_recognize_stream_core().

void wchmm_fbs ( HTK_Param param,
RecogProcess r,
int  cate_bgn,
int  cate_num 
)

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

引数のうち cate_bgn, cate_num は単語N-gramでは無視される.

引数:
param [in] 入力パラメータベクトル列
r [i/o] 認識処理インスタンス
cate_bgn [in] 展開対象とすべきカテゴリの開始番号
cate_num [in] 展開対象とすべきカテゴリの数

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

参照元 j_recognize_stream_core().

呼出しグラフ:


Juliusに対してThu Jul 23 12:17:03 2009に生成されました。  doxygen 1.5.1