#include <julius/julius.h>
マクロ定義 | |
| #define | SD(A) tindex_local[A-1] |
| Index locater for sort_token_*() | |
| #define | SCOPY(D, S) D = S |
| Content copier for sort_token_*() | |
| #define | SVAL(A) (tlist_local[tindex_local[A-1]].score) |
| Score locater for sort_token_*() | |
| #define | STVAL (tlist_local[s].score) |
| Indexed score locater for sort_token_*() | |
関数 | |
| static void | put_atom (TRELLIS_ATOM *atom, WORD_INFO *winfo) |
| あるトレリス単語の情報をテキストで出力 (デバッグ用) | |
| static LOGPROB | trace_backptr (WORD_ID wordseq_rt[MAXSEQNUM], int *rt_wordlen, TRELLIS_ATOM *atom, WORD_INFO *winfo) |
| 認識結果の単語トレリス上の最尤単語系列を求める | |
| static void | find_1pass_result (int framelen, RecogProcess *r) |
| 第1パスの認識処理結果から認識結果を判定し,最尤単語系列を見つける. | |
| static int | compare_backscore (TRELLIS_ATOM **x1, TRELLIS_ATOM **x2) |
| トレリス単語をスコアでソートするqsort関数. | |
| static void | find_1pass_result_word (int framelen, RecogProcess *r) |
| find_1pass_result() の単語認識モード版. | |
| static void | bt_current_max (RecogProcess *r, int t) |
| 第1パスの処理中に,あるフレームまでのベストパスを表示する. | |
| static void | bt_current_max_word (RecogProcess *r, int t) |
| 第1パスの処理中に,あるフレーム上の最尤単語を表示する(デバッグ用) | |
| static void | malloc_nodes (FSBeam *d, int n, int ntoken_init) |
| 第1パスのビーム探索用の初期ワークエリアを確保する. | |
| static void | expand_tlist (FSBeam *d) |
| 第1パスのビーム探索用のワークエリアを伸ばして再確保する. | |
| static void | prepare_nodes (FSBeam *d, int ntoken_step) |
| ノード情報を初期化する. | |
| static void | free_nodes (FSBeam *d) |
| 第1パスのビーム探索用のワークエリアを全て解放する. | |
| static void | clear_tlist (FSBeam *d, int tt) |
| トークンスペースをリセットする. | |
| static void | clear_tokens (FSBeam *d, int tt) |
| アクティブトークンリストをクリアする. | |
| static TOKENID | create_token (FSBeam *d) |
| トークンスペースから新たなトークンを取りだす. | |
| static void | node_assign_token (FSBeam *d, int node, TOKENID tkid) |
| 木構造化辞書のノードにトークンを割り付ける. | |
| static TOKENID | node_exist_token (FSBeam *d, int tt, int node, WORD_ID wid) |
| 木構造化辞書上のあるノードが,現在なんらかのトークンを 保持しているかをチェックする. | |
| static void | sort_token_upward (FSBeam *d, int neednum, int totalnum) |
| トークンスペースをスコアの大きい順にソートする. | |
| static void | sort_token_downward (FSBeam *d, int neednum, int totalnum) |
| トークンスペースをスコアの小さい順にソートする. | |
| static void | sort_token_no_order (FSBeam *d, int neednum, int *start, int *end) |
| トークンスペースをソートしてビーム内に残るトークンを決定する | |
| static boolean | init_nodescore (HTK_Param *param, RecogProcess *r) |
| 初期仮説の生成 | |
| boolean | get_back_trellis_init (HTK_Param *param, RecogProcess *r) |
| フレーム同期ビーム探索の初期化 | |
| static void | propagate_token (FSBeam *d, int next_node, LOGPROB next_score, TRELLIS_ATOM *last_tre, WORD_ID last_cword, LOGPROB last_lscore) |
| トークンを次ノードに伝搬する. | |
| static void | beam_intra_word_core (WCHMM_INFO *wchmm, FSBeam *d, TOKEN2 **tk_ret, int j, int next_node, LOGPROB next_a) |
| 単語内のあるノード間の遷移を行う. | |
| static void | beam_intra_word (WCHMM_INFO *wchmm, FSBeam *d, TOKEN2 **tk_ret, int j) |
| 単語内遷移を行う. | |
| static TRELLIS_ATOM * | save_trellis (BACKTRELLIS *bt, WCHMM_INFO *wchmm, TOKEN2 *tk, int t, boolean final_for_multipath) |
| トークンからトレリス単語を保存する. | |
| static void | beam_inter_word (WCHMM_INFO *wchmm, FSBeam *d, TOKEN2 **tk_ret, TRELLIS_ATOM *tre, int j) |
| 単語末トークンからの単語間遷移. | |
| boolean | get_back_trellis_proceed (int t, HTK_Param *param, RecogProcess *r, boolean final_for_multipath) |
| フレーム同期ビーム探索を進行する. | |
| void | get_back_trellis_end (HTK_Param *param, RecogProcess *r) |
| フレーム同期ビーム探索:最終フレーム | |
| void | finalize_1st_pass (RecogProcess *r, int len) |
| 第1パスの終了処理を行う. | |
| void | fsbeam_free (FSBeam *d) |
| 第1パスのためのワークエリア領域を開放する | |
第1パスのフレーム同期ビーム探索を実際に実行する関数群です. 認識処理インスタンスごとに実行されます. 初期化,1フレームの認識処理,終了処理,第1パスの結果決定,セグメント 終了の検知などの処理が含まれています.
アルゴリズムについては,単語履歴近似は 1-best 近似がデフォルトです が,単語対近似も使用可能です. 単語N-gram では単語間の接続制約は 1-gram factoring (2-gram factoring も選択可)を用いて計算されます. 文法の 場合,木構造化辞書は文法のカテゴリ単位で作成され,単語間の接続(単語 対制約)は単語間遷移で適用されます. 単語認識モードでは単語間接続は 考慮されません.
beam.c で定義されています。
| static void put_atom | ( | TRELLIS_ATOM * | atom, | |
| WORD_INFO * | winfo | |||
| ) | [static] |
| static LOGPROB trace_backptr | ( | WORD_ID | wordseq_rt[MAXSEQNUM], | |
| int * | rt_wordlen, | |||
| TRELLIS_ATOM * | atom, | |||
| WORD_INFO * | winfo | |||
| ) | [static] |
| static void find_1pass_result | ( | int | framelen, | |
| RecogProcess * | r | |||
| ) | [static] |
第1パスの認識処理結果から認識結果を判定し,最尤単語系列を見つける.
第1パスの計算結果である単語トレリスから,第1パスでの最尤候補を求 め,インスタンス内の result.pass1 に保存する. 候補が得られない場合 はエラー(探索誤り:コード -1)となる.
ショートポーズセグメンテーション時は,認識結果が無音単語のみからなる場合, エラー(デコーダによる棄却:コード -4)となる.
また,WORD_GRAPH 定義時は,この関数内でさらに generate_lattice() を 呼び出し,単語グラフの抽出を行う.
| framelen | [in] 第1パスで処理が到達したフレーム数 | |
| r | [in] 認識処理インスタンス |
| static int compare_backscore | ( | TRELLIS_ATOM ** | x1, | |
| TRELLIS_ATOM ** | x2 | |||
| ) | [static] |
| static void find_1pass_result_word | ( | int | framelen, | |
| RecogProcess * | r | |||
| ) | [static] |
find_1pass_result() の単語認識モード版.
単語認識モードでは第1パスで 認識を終了するので,得られた候補は通常の第2パスと同じ場所に格納する.
| framelen | [in] 第1パスで処理が到達したフレーム数 | |
| r | [i/o] 認識処理インスタンス |
| static void bt_current_max | ( | RecogProcess * | r, | |
| int | t | |||
| ) | [static] |
| static void bt_current_max_word | ( | RecogProcess * | r, | |
| int | t | |||
| ) | [static] |
| static void malloc_nodes | ( | FSBeam * | d, | |
| int | n, | |||
| int | ntoken_init | |||
| ) | [static] |
| static void expand_tlist | ( | FSBeam * | d | ) | [static] |
| static void prepare_nodes | ( | FSBeam * | d, | |
| int | ntoken_step | |||
| ) | [static] |
| static void free_nodes | ( | FSBeam * | d | ) | [static] |
| static void clear_tlist | ( | FSBeam * | d, | |
| int | tt | |||
| ) | [static] |
| static void clear_tokens | ( | FSBeam * | d, | |
| int | tt | |||
| ) | [static] |
木構造化辞書上のあるノードが,現在なんらかのトークンを 保持しているかをチェックする.
WPAIR が定義されている場合,ノードは直前単語ごとに異なるトークンを複数 保持する. この場合, 指定された単語IDを直前単語とするトークンが そのノードに保持されているかどうかがチェックされる. すなわち,既にトークン が存在しても,そのトークンの表すパスの直前単語が指定した単語と異なって いれば未保持 (TOKENID_UNDEFINED) を返す.
| d | [i/o] 第1パス探索処理用ワークエリア | |
| tt | [in] 直前のワークエリアID (0 または 1) | |
| node | [in] ノード番号 | |
| wid | [in] 直前単語のID (WPAIR定義時のみ有効, 他では無視される) |
| static void sort_token_upward | ( | FSBeam * | d, | |
| int | neednum, | |||
| int | totalnum | |||
| ) | [static] |
| static void sort_token_downward | ( | FSBeam * | d, | |
| int | neednum, | |||
| int | totalnum | |||
| ) | [static] |
| static void sort_token_no_order | ( | FSBeam * | d, | |
| int | neednum, | |||
| int * | start, | |||
| int * | end | |||
| ) | [static] |
トークンスペースをソートしてビーム内に残るトークンを決定する
heap sort を用いて現在のトークン集合をソートし,上位スコアのトークン 集合を求める. 上位 neednum 個のトークン集合が得られれば良いので, 全体が完全にソートされている必要はない. よって 上位 neednum 個のトークンのみをソートする. 実際には,全体のトークン 数と必要なトークン数から sort_token_upward() と sort_token_downward() の早い方が用いられる.
| d | [i/o] 第1パス探索処理用ワークエリア | |
| neednum | [in] 求める上位トークンの数 | |
| start | [out] 上位 neednum のトークンが存在するトークンスペースの最初のインデックス番号 | |
| end | [out] 上位 neednum のトークンが存在するトークンスペースの最後のインデックス番号 |
| static boolean init_nodescore | ( | HTK_Param * | param, | |
| RecogProcess * | r | |||
| ) | [static] |
| boolean get_back_trellis_init | ( | HTK_Param * | param, | |
| RecogProcess * | r | |||
| ) |
フレーム同期ビーム探索の初期化
ここではビームサーチに用いるワークエリアの確保と初期化を行う. 初期化説の生成は init_nodescore() で行われる.
| param | [in] 入力ベクトル列情報 (最初の1フレーム目のみ用いられる) | |
| r | [i/o] 音声認識処理インスタンス |
参照元 decode_proceed().

| static void propagate_token | ( | FSBeam * | d, | |
| int | next_node, | |||
| LOGPROB | next_score, | |||
| TRELLIS_ATOM * | last_tre, | |||
| WORD_ID | last_cword, | |||
| LOGPROB | last_lscore | |||
| ) | [static] |
トークンを次ノードに伝搬する.
| d | [i/o] work area for 1st pass recognition processing | |
| next_node | [in] next node id | |
| next_score | [in] score when transmitted to the next node | |
| last_tre | [in] previous word context for the next node | |
| last_cword | [in] previous context-valid word for the next node | |
| last_lscore | [in] LM score to be propagated |
| static void beam_intra_word_core | ( | WCHMM_INFO * | wchmm, | |
| FSBeam * | d, | |||
| TOKEN2 ** | tk_ret, | |||
| int | j, | |||
| int | next_node, | |||
| LOGPROB | next_a | |||
| ) | [static] |
| static void beam_intra_word | ( | WCHMM_INFO * | wchmm, | |
| FSBeam * | d, | |||
| TOKEN2 ** | tk_ret, | |||
| int | j | |||
| ) | [static] |
| static TRELLIS_ATOM* save_trellis | ( | BACKTRELLIS * | bt, | |
| WCHMM_INFO * | wchmm, | |||
| TOKEN2 * | tk, | |||
| int | t, | |||
| boolean | final_for_multipath | |||
| ) | [static] |
| static void beam_inter_word | ( | WCHMM_INFO * | wchmm, | |
| FSBeam * | d, | |||
| TOKEN2 ** | tk_ret, | |||
| TRELLIS_ATOM * | tre, | |||
| int | j | |||
| ) | [static] |
| boolean get_back_trellis_proceed | ( | int | t, | |
| HTK_Param * | param, | |||
| RecogProcess * | r, | |||
| boolean | final_for_multipath | |||
| ) |
フレーム同期ビーム探索を進行する.
与えられた1フレーム分,探索処理を進める. また,フレーム内に残った 単語を単語トレリス構造体に保存する. ショートポーズセグメンテーション時 はセグメント終了の判断もこの中から呼び出される.
| t | [in] 現在のフレーム (このフレームについて計算が進められる) | |
| param | [in] 入力ベクトル列構造体 (t 番目のフレームのみ用いられる) | |
| r | [in] 認識処理インスタンス | |
| final_for_multipath | [i/o] 入力最後のフレームを処理するときに TRUE |
< Local workarea to hold the generated trellis word
< Temporal work to hold the current node number on the lexicon tree
参照元 decode_proceed().

| void get_back_trellis_end | ( | HTK_Param * | param, | |
| RecogProcess * | r | |||
| ) |
フレーム同期ビーム探索:最終フレーム
第1パスのフレーム同期ビーム探索を終了するために, (param->samplenum -1) の最終フレームに対する終了処理を行う.
| param | [in] 入力ベクトル列 (param->samplenum の値のみ用いられる) | |
| r | [in] 音声認識処理インスタンス |
参照元 decode_end().

| void finalize_1st_pass | ( | RecogProcess * | r, | |
| int | len | |||
| ) |
第1パスの終了処理を行う.
この関数は get_back_trellis_end() の直後に呼ばれ,第1パスの終了処理を 行う. 生成した単語トレリス構造体の最終的な後処理を行い第2パスで アクセス可能な形に内部を変換する. また, 仮説のバックトレースを行い第1パスのベスト仮説を出力する.
| r | [in] 認識処理インスタンス | |
| len | [in] 第1パスで処理された最終的なフレーム長 |
参照元 decode_end(), と decode_end_segmented().

| void fsbeam_free | ( | FSBeam * | d | ) |
第1パスのためのワークエリア領域を開放する
| d | [in] work are for 1st pass input handling |

1.5.4