#include <julius.h>
beam.cのインクルード依存関係図
マクロ定義 | |
#define | SD(A) tindex[tn][A-1] |
Index locater for sort_token_*() | |
#define | SCOPY(D, S) D = S |
Content copier for sort_token_*() | |
#define | SVAL(A) (tlist[tn][tindex[tn][A-1]].score) |
Score locater for sort_token_*() | |
#define | STVAL (tlist[tn][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, BACKTRELLIS *backtrellis, WORD_INFO *winfo) |
認識結果の単語トレリス上の最尤単語系列を求める | |
static LOGPROB | print_1pass_result (BACKTRELLIS *backtrellis, int framelen, WORD_INFO *winfo) |
第1パスの認識処理結果を出力する | |
static void | bt_current_max (BACKTRELLIS *bt, int t, WORD_INFO *winfo) |
static void | bt_current_max_word (BACKTRELLIS *bt, int t, WORD_INFO *winfo) |
static void | malloc_nodes (int n, int ntoken_init, int ntoken_step) |
static void | expand_tlist () |
static void | free_nodes () |
static void | clear_tlist (int tt) |
static void | clear_tokens (int tt) |
static TOKENID | create_token () |
static void | node_assign_token (int node, TOKENID tkid) |
木構造化辞書のノードにトークンを割り付ける. | |
static TOKENID | node_exist_token (int tt, int node, WORD_ID wid) |
木構造化辞書上のあるノードが,現在なんらかのトークンを 保持しているかをチェックする. | |
static void | sort_token_upward (int neednum, int totalnum) |
トークンスペースをスコアの大きい順にソートする. | |
static void | sort_token_downward (int neednum, int totalnum) |
トークンスペースをスコアの小さい順にソートする. | |
static void | sort_token_no_order (int neednum, int *start, int *end) |
トークンスペースをソートしてビーム内に残るトークンを決定する | |
static void | init_nodescore (HTK_Param *param, WCHMM_INFO *wchmm) |
void | get_back_trellis_init (HTK_Param *param, WCHMM_INFO *wchmm, BACKTRELLIS *backtrellis) |
フレーム同期ビーム探索:最初の1フレーム目 | |
boolean | get_back_trellis_proceed (int t, HTK_Param *param, WCHMM_INFO *wchmm, BACKTRELLIS *backtrellis) |
フレーム同期ビーム探索:2フレーム目以降 | |
void | get_back_trellis_end (HTK_Param *param, WCHMM_INFO *wchmm, BACKTRELLIS *backtrellis) |
フレーム同期ビーム探索:最終フレーム | |
LOGPROB | finalize_1st_pass (BACKTRELLIS *backtrellis, WORD_INFO *winfo, int len) |
第1パスの終了処理を行う. | |
void | get_back_trellis (HTK_Param *param, WCHMM_INFO *wchmm, BACKTRELLIS *backtrellis, LOGPROB *backmax) |
フレーム同期ビーム探索:メイン | |
変数 | |
static boolean | idc_on |
set to TRUE when activating tty progress indicator | |
static int | progout_interval_frame |
Local work area to hold the output interval in frames for progressive output | |
static TOKEN2 * | tlist [2] |
Token space to hold all token entities. | |
static TOKENID * | tindex [2] |
Token index corresponding to tlist for sort | |
static int | maxtnum = 0 |
Allocated number of tokens (will grow) | |
static int | expand_step = 0 |
Number of tokens to be increased per expansion | |
static int | tnum [2] |
Current number of tokens used in tlist | |
static int | n_start |
Start index of in-beam nodes on tindex | |
static int | n_end |
end index of in-beam nodes on tindex | |
static int | tl |
Current work area id (0 or 1, swapped for each frame) | |
static int | tn |
Next work area id (0 or 1, swapped for each frame) | |
static TOKENID * | token |
Active token list that holds currently assigned tokens for each tree node | |
static int | totalnodenum |
Allocated number of nodes in token | |
static TRELLIS_ATOM | bos |
Special token for beginning-of-sentence | |
static boolean | nodes_malloced = FALSE |
Flag to check if tokens already allocated | |
static TRELLIS_ATOM * | tre |
Local workarea to hold the generated trellis word | |
static int | node |
Temporal work to hold the current node number on the lexicon tree | |
static int | stid |
Temporal worl to specify beginning-of-word nodes on the lexicon tree | |
static A_CELL * | ac |
Temporal work to hold the next states of a node | |
static int | next_node2 |
Temporal work to hold the next node |
入力データ全体があらかじめ得られている場合は,一括で計算を 行う関数 get_back_trellis() がメインから呼ばれます.オンライン認識 の場合は realtime_1stpass.c から get_back_trellis_init(), get_back_trellis_proceed(), get_back_trellis_end() などがそれぞれ 入力の進行状況にあわせて個別に呼ばれます.
単語履歴近似は 1-best 近似がデフォルトですが,単語対近似も使用可能です.
Julius では単語間の接続制約は 1-gram factoring (2-gram factoring も 選択可)を用いて計算されます.Julianの場合,木構造化辞書は文法の カテゴリ単位で作成され,単語間の接続(単語対制約)は単語間遷移で 適用されます.
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, | |||
BACKTRELLIS * | backtrellis, | |||
WORD_INFO * | winfo | |||
) | [static] |
認識結果の単語トレリス上の最尤単語系列を求める
与えられたトレリス単語から入力始端に向かって単語トレリス上を トレースバックし, その最尤単語系列候補およびその言語スコアを返す. 起点となる最初のトレリス単語が与えられる必要がある.
wordseq_rt | [out] 結果の最尤単語系列が格納されるバッファ | |
rt_wordlen | [out] wordseq_rt の長さ | |
atom | [in] バックトレースの起点となるトレリス単語 | |
backtrellis | [in] 単語トレリス構造体 | |
winfo | [in] 単語辞書 |
参照元 bt_current_max().
static LOGPROB print_1pass_result | ( | BACKTRELLIS * | backtrellis, | |
int | framelen, | |||
WORD_INFO * | winfo | |||
) | [static] |
第1パスの認識処理結果を出力する
第1パスの計算結果である単語トレリスから,第1パスでの最尤候補を求めて 出力する.内部では,最終フレームに残った中から起点となるトレリス単語 を求め,trace_backptr() を呼び出して第1パスの尤仮説系列を求めて その結果を出力する.
この第1パスの最尤仮説列は 大域変数 pass1_wseq, pass1_wnum, pass1_scoreにも保存される. これらは第2パスで探索が失敗したときに第1パスの結果を最終結果として 出力する際に参照される.
またWORD_GRAPH 定義時は,この関数内でさらに generate_lattice() を呼び出し 単語グラフの抽出を行う.
backtrellis | [i/o] 単語トレリス構造体 | |
framelen | [in] 第1パスで処理が到達したフレーム数 | |
winfo | [in] 単語辞書 |
参照元 finalize_1st_pass().
static void bt_current_max | ( | BACKTRELLIS * | bt, | |
int | t, | |||
WORD_INFO * | winfo | |||
) | [static] |
static void bt_current_max_word | ( | BACKTRELLIS * | bt, | |
int | t, | |||
WORD_INFO * | winfo | |||
) | [static] |
static void malloc_nodes | ( | int | n, | |
int | ntoken_init, | |||
int | ntoken_step | |||
) | [static] |
第1パスのビーム探索用の初期ワークエリアを確保する. 足りない場合は探索中に動的に伸長される.
n | [in] 木構造化辞書のノード数 | |
ntoken_init | [in] 最初に確保するトークンの数 | |
ntoken_step | [in] トークン不足で伸長する場合の1回あたりの伸長数 |
static void expand_tlist | ( | ) | [static] |
static void free_nodes | ( | ) | [static] |
static void clear_tlist | ( | int | tt | ) | [static] |
static void clear_tokens | ( | int | tt | ) | [static] |
アクティブトークンリストをクリアする.
tt | [in] 直前のワークエリアID (0 または 1) |
static TOKENID create_token | ( | ) | [static] |
static void node_assign_token | ( | int | node, | |
TOKENID | tkid | |||
) | [static] |
木構造化辞書のノードにトークンを割り付ける.
木構造化辞書のノードのアクティブトークンリストにトークンを保存する. またトークンスペースにおいてトークンからノード番号へのリンクを保存する.
既にトークンがある場合は,新たなトークンによって上書きされる.なお WPAIR 指定時はそのリストに新たなトークンを追加する.
node | [in] 木構造化辞書のノード番号 | |
tkid | [in] トークン番号 |
参照元 init_nodescore().
木構造化辞書上のあるノードが,現在なんらかのトークンを 保持しているかをチェックする.
WPAIR が定義されている場合,ノードは直前単語ごとに異なるトークンを複数 保持する.この場合, 指定された単語IDを直前単語とするトークンが そのノードに保持されているかどうかがチェックされる.すなわち,既にトークン が存在しても,そのトークンの表すパスの直前単語が指定した単語と異なって いれば未保持 (TOKENID_UNDEFINED) を返す.
tt | [in] 直前のワークエリアID (0 または 1) | |
node | [in] ノード番号 | |
wid | [in] 直前単語のID (WPAIR定義時のみ有効, 他では無視される) |
参照元 init_nodescore().
static void sort_token_upward | ( | int | neednum, | |
int | totalnum | |||
) | [static] |
トークンスペースをスコアの大きい順にソートする.
heap sort を用いて現在のトークン集合をスコアの大きい順にソートする. 上位 neednum 個のトークンがソートされればそこで処理を終了する.
neednum | [in] 上位 neednum 個が得られるまでソートする | |
totalnum | [in] トークンスペース内の有効なトークン数 |
static void sort_token_downward | ( | int | neednum, | |
int | totalnum | |||
) | [static] |
トークンスペースをスコアの小さい順にソートする.
ビームのしきい値決定のために,heap sort を用いて 現在のトークン集合をスコアの小さい順にソートする. 下位 neednum 個のトークンがソートされればそこで処理を終了する.
neednum | [in] 下位 neednum 個が得られるまでソートする | |
totalnum | [in] トークンスペース内の有効なトークン数 |
static void sort_token_no_order | ( | int | neednum, | |
int * | start, | |||
int * | end | |||
) | [static] |
トークンスペースをソートしてビーム内に残るトークンを決定する
heap sort を用いて現在のトークン集合をソートし,上位スコアのトークン 集合を求める.上位 neednum 個のトークン集合が得られれば良いので, 全体が完全にソートされている必要はない.よって 上位 neednum 個のトークンのみをソートする.実際には,全体のトークン 数と必要なトークン数から sort_token_upward() と sort_token_downward() の早い方が用いられる.
neednum | [in] 求める上位トークンの数 | |
start | [out] 上位 neednum のトークンが存在するトークンスペースの最初のインデックス番号 | |
end | [out] 上位 neednum のトークンが存在するトークンスペースの最後のインデックス番号 |
static void init_nodescore | ( | HTK_Param * | param, | |
WCHMM_INFO * | wchmm | |||
) | [static] |
ビームサーチ用の初期化を行う.出力確率キャッシュの 初期化および初期仮説の生成を行う.初期仮説の初期スコア設定のため, 最初の1フレーム目の入力が得られている必要がある.
param | [in] 入力ベクトル列情報(最初のフレームのみ必要) | |
wchmm | [in] 木構造化辞書 |
void get_back_trellis_init | ( | HTK_Param * | param, | |
WCHMM_INFO * | wchmm, | |||
BACKTRELLIS * | backtrellis | |||
) |
フレーム同期ビーム探索:最初の1フレーム目
ここではビームサーチに用いるノードやトークン,単語トレリス構造体などの 初期化,および最初のフレームの計算を行う.2フレーム目以降は get_back_trellis_proceed() を用いる.
param | [in] 入力ベクトル列情報 (最初の1フレーム目のみ用いられる) | |
wchmm | [in] 木構造化辞書 | |
backtrellis | [i/o] 単語トレリス構造体 (この関数内で初期化される) |
boolean get_back_trellis_proceed | ( | int | t, | |
HTK_Param * | param, | |||
WCHMM_INFO * | wchmm, | |||
BACKTRELLIS * | backtrellis | |||
) |
フレーム同期ビーム探索:2フレーム目以降
フレーム同期ビーム探索のメイン部分です.与えられた1フレーム分計算を 進め,そのフレーム内に残った単語を単語トレリス構造体の中に保存する. 第1フレームに対しては get_back_trellis_init() を用いる. 詳細は関数内のコメントを参照のこと.
t | [in] 現在のフレーム (このフレームについて計算が進められる) | |
param | [in] 入力ベクトル列構造体 (t 番目のフレームのみ用いられる) | |
wchmm | [in] 木構造化辞書 | |
backtrellis | [i/o] 単語トレリス構造体 (t 番目のフレーム上に残った単語が追加される) |
参照元 get_back_trellis()・get_back_trellis_end()・RealTimeParam()・RealTimePipeLine().
void get_back_trellis_end | ( | HTK_Param * | param, | |
WCHMM_INFO * | wchmm, | |||
BACKTRELLIS * | backtrellis | |||
) |
フレーム同期ビーム探索:最終フレーム
第1パスのフレーム同期ビーム探索を終了するために, (param->samplenum -1) の最終フレームに対する終了処理を行う.
param | [in] 入力ベクトル列 (param->samplenum の値のみ用いられる) | |
wchmm | [in] 木構造化辞書 | |
backtrellis | [i/o] 単語トレリス構造体 (最終フレームの単語候補が格納される) |
LOGPROB finalize_1st_pass | ( | BACKTRELLIS * | backtrellis, | |
WORD_INFO * | winfo, | |||
int | len | |||
) |
第1パスの終了処理を行う.
この関数は get_back_trellis_end() の直後に呼ばれ,第1パスの終了処理を 行う.生成した単語トレリス構造体の最終的な後処理を行い第2パスで アクセス可能な形に内部を変換する.また, 仮説のバックトレースを行い第1パスのベスト仮説を出力する.
backtrellis | [i/o] 単語トレリス構造体 (後処理が行われる) | |
winfo | [in] 単語辞書 | |
len | [in] 第1パスで処理された最終的なフレーム長 |
void get_back_trellis | ( | HTK_Param * | param, | |
WCHMM_INFO * | wchmm, | |||
BACKTRELLIS * | backtrellis, | |||
LOGPROB * | backmax | |||
) |
フレーム同期ビーム探索:メイン
与えられた入力ベクトル列に対して第1パス(フレーム同期ビーム探索)を 行い,その結果を出力する.また全フレームに渡る単語終端を,第2パス のために単語トレリス構造体に格納する.
この関数は入力ベクトル列があらかじめ得られている場合に用いられる. 第1パスが入力と並列して実行されるオンライン認識の場合, この関数は用いられず,代わりにこのファイルで定義されている各サブ関数が 直接 realtime-1stpass.c 内から呼ばれる.
param | [in] 入力ベクトル列 | |
wchmm | [in] 木構造化辞書 | |
backtrellis | [out] 単語トレリス情報が書き込まれる構造体へのポインタ | |
backmax | [out] 第1パスの最尤スコア (探索失敗なら LOG_ZERO) |