#include <julius/julius.h>
関数 | |
| static NODE * | get_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 NODE * | cm_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探索パスであるスタックデコーディングを行うメイン関数 | |
Julius の第2パスであるスタックデコーディングアルゴリズムが記述され ています. 第1パスの結果の単語トレリス情報を元に,第1パスとは逆向き の right-to-left に探索を行います. 仮説のスコアは、第1パスのトレリ スとそのスコアを未探索部のヒューリスティックとして接続することで, 文全体の仮説スコアを考慮しながら探索を行います.
次単語集合の取得のために,単語N-gramでは ngram_decode.c 内の関数が, 文法では dfa_decode.c の関数が用いられます.
search_bestfirst_main.c で定義されています。
スタックトップの最尤仮説を取り出す.
| start | [i/o] スタックの先頭ノードへのポインタ(書換えられる場合あり) | |
| stacknum | [i/o] 現在のスタックサイズへのポインタ(書き換えあり) |
search_bestfirst_main.c の 209 行で定義されています。
参照元 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] スタックのノード数の上限 |
search_bestfirst_main.c の 292 行で定義されています。
参照元 cm_store().
スタックの中身を全て出力する.
スタックの中身は失われる. (デバッグ用)
| start | [i/o] スタックのトップノードへのポインタ | |
| stacknum | [i/o] スタックに現在格納されているノード数へのポインタ | |
| winfo | [in] 単語辞書 |
search_bestfirst_main.c の 380 行で定義されています。
| static void free_all_nodes | ( | NODE * | start | ) | [static] |
デバッグ用に仮説の単語N-gramエントリ名(Julianではカテゴリ番号)を出力する.
| hypo | [in] 仮説 | |
| winfo | [in] 単語辞書 |
search_bestfirst_main.c の 976 行で定義されています。
次単語の格納領域の割り当て.
次単語候補を格納するための NEXTWORD 配列にメモリを割り付ける.
| maxlen | [out] 格納可能な単語数 | |
| root | [out] 割り付け領域の先頭へのポインタ | |
| max | [in] 割り付ける領域のサイズ |
search_bestfirst_main.c の 86 行で定義されています。
参照元 wchmm_fbs().
次単語の格納領域の解放.
| nw | [in] NEXTWORD配列 | |
| root | [in] nw_malloc() で与えられた領域先頭へのポインタ |
search_bestfirst_main.c の 118 行で定義されています。
次単語候補格納用の NEXTWORD 配列のメモリ領域を伸張する.
この関数は探索中に次単語候補集合が溢れた際に呼ばれ,配列により多くの 次単語候補を格納できるよう NEXTWORD の中身を realloc() する. 実際には最初に nw_malloc() で辞書の単語数分だけ領域を確保しており, 単語N-gram使用時は呼ばれることはない. 文法認識では,ショートポーズの スキップ処理により状態の異なる候補を同時に展開するので, 次単語数が語彙数よりも大きいことが起こりうる.
| nwold | [i/o] NEXTWORD配列 | |
| maxlen | [i/o] 最大格納数を格納するポインタ. 現在の最大格納数を 入れて呼び,関数内で新たに確保された数に変更される. | |
| root | [i/o] 領域先頭へのポインタを格納するアドレス. 関数内で 書き換えられる. | |
| num | [in] 伸長する長さ |
search_bestfirst_main.c の 163 行で定義されています。
参照元 wchmm_fbs().
ある仮説がスタック内に格納されるかどうかチェックする.
| new | [in] チェックする仮説 | |
| bottom | [in] スタックの底ノードへのポインタ | |
| stacknum | [in] スタックに現在格納されているノード数へのポインタ | |
| stacksize | [in] スタックのノード数の上限 |
search_bestfirst_main.c の 253 行で定義されています。
| 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.c の 452 行で定義されています。
参照元 wchmm_fbs().
| static void cm_store | ( | StackDecode * | sd, | |
| NODE * | new | |||
| ) | [static] |
CM計算のためにローカルスタックに展開仮説を一時的に保存する.
| sd | [i/o] 第2パス用ワークエリア | |
| new | [in] 展開仮説 |
search_bestfirst_main.c の 491 行で定義されています。
| static void cm_sum_score | ( | StackDecode * | sd | ) | [static] |
CM計算のためにローカルスタック内の仮説の出現確率の合計を求める.
| sd | [i/o] 第2パス用ワークエリア |
search_bestfirst_main.c の 513 行で定義されています。
| static void cm_set_score | ( | StackDecode * | sd, | |
| NODE * | node | |||
| ) | [static] |
展開されたある文仮説について,その展開単語の信頼度を,事後確率に 基づいて計算する.
| sd | [i/o] 第2パス用ワークエリア | |
| node | [i/o] 展開されたある文仮説 |
search_bestfirst_main.c の 564 行で定義されています。
| static NODE* cm_get_node | ( | StackDecode * | sd | ) | [static] |
CM計算用のローカルスタックから仮説を取り出す.
| sd | [i/o] 第2パス用ワークエリア |
search_bestfirst_main.c の 602 行で定義されています。
| static void wb_init | ( | StackDecode * | s | ) | [static] |
Word envelope 用にカウンタを初期化する.
| s | [i/o] 第2パス用ワークエリア |
search_bestfirst_main.c の 749 行で定義されています。
参照元 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] 展開カウントの上限値 |
search_bestfirst_main.c の 783 行で定義されています。
| static void envl_init | ( | StackDecode * | s, | |
| int | framenum | |||
| ) | [static] |
Score envelope を初期化する.
第2パスの開始時に呼ばれる.
| s | [i/o] 第2パス用ワークエリア | |
| framenum | [in] 入力フレーム長 |
search_bestfirst_main.c の 843 行で定義されています。
参照元 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.c の 866 行で定義されています。
| void segment_set_last_nword | ( | NODE * | hypo, | |
| RecogProcess * | r | |||
| ) |
認識結果から,次の入力区間の認識を開始する際の初期単語履歴をセットする.
透過語および仮説の重複を考慮して初期単語履歴が決定される.
| hypo | [in] 現在の入力区間の認識結果としての文候補 | |
| r | [in] 認識処理インスタンス |
search_bestfirst_main.c の 904 行で定義されています。
参照元 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.c の 1002 行で定義されています。
| 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.c の 1084 行で定義されています。
| 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.c の 1146 行で定義されています。
| 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.c の 1225 行で定義されています。
参照元 j_recognize_stream_core().
呼出しグラフ:

1.5.1