julius/beam.c

第1パス:フレーム同期ビーム探索 [詳細]

#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 TOKEN2tlist [2]
 Token space to hold all token entities.
static TOKENIDtindex [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 TOKENIDtoken
 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_ATOMtre
 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_CELLac
 Temporal work to hold the next states of a node.
static int next_node2
 Temporal work to hold the next node.
static LOGPROB tmpprob
 Temporal work for computing LM likelihood.
static LOGPROBiwparray
 Temporal pointer to hold inter-word cache array.
static LOGPROB wordend_best_score
 Best score of word-end nodes.
static int wordend_best_node
 Node id of the best wordend nodes.
static TRELLIS_ATOMwordend_best_tre
 Trellis word corresponds to above.
static WORD_ID wordend_best_last_cword
 Last context-aware word of above.
static int isoid
 Temporal work to hold isolated node.

説明

第1パス:フレーム同期ビーム探索

作者:
Akinobu LEE
日付:
Tue Feb 22 17:00:45 2005

静的木構造辞書を用いて,入力特徴量ベクトル列に対して,Juliusの第1パス であるフレーム同期ビーム探索を行います.

入力データ全体があらかじめ得られている場合は,一括で計算を 行う関数 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の場合,木構造化辞書は文法の カテゴリ単位で作成され,単語間の接続(単語対制約)は単語間遷移で 適用されます.

Revision
1.10

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


関数

static void put_atom ( TRELLIS_ATOM atom,
WORD_INFO winfo 
) [static]

あるトレリス単語の情報をテキストで出力 (デバッグ用)

引数:
atom [in] 出力するトレリス単語
winfo [in] 単語辞書

beam.c173 行で定義されています。

参照元 trace_backptr().

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] 単語辞書
戻り値:
得られた最尤単語系列の言語スコア.

beam.c217 行で定義されています。

参照元 bt_current_max(), と print_1pass_result().

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] 単語辞書
戻り値:
第1パスの最尤仮説系列のスコア,あるいは第1パスで有効な仮説系列が 見つからなければ NULL.

beam.c312 行で定義されています。

参照元 finalize_1st_pass().

static void bt_current_max ( BACKTRELLIS bt,
int  t,
WORD_INFO winfo 
) [static]

第1パスの処理中に,あるフレームまでのベストパスを表示する.

引数:
bt [in] 単語トレリス構造体
t [in] フレーム
winfo [in] 単語辞書

beam.c442 行で定義されています。

参照元 get_back_trellis_proceed().

static void bt_current_max_word ( BACKTRELLIS bt,
int  t,
WORD_INFO winfo 
) [static]

第1パスの処理中に,あるフレーム上の最尤単語を表示する(デバッグ用)

引数:
bt [in] 単語トレリス構造体
t [in] フレーム
winfo [in] 単語辞書

beam.c490 行で定義されています。

参照元 get_back_trellis_proceed().

static void malloc_nodes ( int  n,
int  ntoken_init,
int  ntoken_step 
) [static]

第1パスのビーム探索用の初期ワークエリアを確保する. 足りない場合は探索中に動的に伸長される.

引数:
n [in] 木構造化辞書のノード数
ntoken_init [in] 最初に確保するトークンの数
ntoken_step [in] トークン不足で伸長する場合の1回あたりの伸長数

beam.c582 行で定義されています。

参照元 get_back_trellis_init().

static void expand_tlist (  )  [static]

第1パスのビーム探索用のワークエリアを伸ばして再確保する.

beam.c605 行で定義されています。

参照元 create_token().

static void free_nodes (  )  [static]

第1パスのビーム探索用のワークエリアを全て解放する.

beam.c624 行で定義されています。

参照元 finalize_1st_pass().

static void clear_tlist ( int  tt  )  [static]

トークンスペースをリセットする.

引数:
tt [in] ワークエリアID (0 または 1)

beam.c649 行で定義されています。

参照元 get_back_trellis_proceed().

static void clear_tokens ( int  tt  )  [static]

アクティブトークンリストをクリアする.

引数:
tt [in] 直前のワークエリアID (0 または 1)

beam.c667 行で定義されています。

参照元 get_back_trellis_proceed().

static TOKENID create_token (  )  [static]

トークンスペースから新たなトークンを取りだす.

戻り値:
新たに取り出されたトークンのID

beam.c689 行で定義されています。

参照元 get_back_trellis_proceed(), と init_nodescore().

static void node_assign_token ( int  node,
TOKENID  tkid 
) [static]

木構造化辞書のノードにトークンを割り付ける.

木構造化辞書のノードのアクティブトークンリストにトークンを保存する. またトークンスペースにおいてトークンからノード番号へのリンクを保存する.

既にトークンがある場合は,新たなトークンによって上書きされる.なお WPAIR 指定時はそのリストに新たなトークンを追加する.

引数:
node [in] 木構造化辞書のノード番号
tkid [in] トークン番号

beam.c731 行で定義されています。

参照元 get_back_trellis_proceed(), と init_nodescore().

static TOKENID node_exist_token ( int  tt,
int  node,
WORD_ID  wid 
) [static]

木構造化辞書上のあるノードが,現在なんらかのトークンを 保持しているかをチェックする.

WPAIR が定義されている場合,ノードは直前単語ごとに異なるトークンを複数 保持する.この場合, 指定された単語IDを直前単語とするトークンが そのノードに保持されているかどうかがチェックされる.すなわち,既にトークン が存在しても,そのトークンの表すパスの直前単語が指定した単語と異なって いれば未保持 (TOKENID_UNDEFINED) を返す.

引数:
tt [in] 直前のワークエリアID (0 または 1)
node [in] ノード番号
wid [in] 直前単語のID (WPAIR定義時のみ有効, 他では無視される)
戻り値:
そのノードが既に保持するトークン番号,無ければ TOKENID_UNDEFINED.

beam.c776 行で定義されています。

参照元 get_back_trellis_proceed(), と init_nodescore().

static void sort_token_upward ( int  neednum,
int  totalnum 
) [static]

トークンスペースをスコアの大きい順にソートする.

heap sort を用いて現在のトークン集合をスコアの大きい順にソートする. 上位 neednum 個のトークンがソートされればそこで処理を終了する.

引数:
neednum [in] 上位 neednum 個が得られるまでソートする
totalnum [in] トークンスペース内の有効なトークン数

beam.c875 行で定義されています。

参照元 sort_token_no_order().

static void sort_token_downward ( int  neednum,
int  totalnum 
) [static]

トークンスペースをスコアの小さい順にソートする.

ビームのしきい値決定のために,heap sort を用いて 現在のトークン集合をスコアの小さい順にソートする. 下位 neednum 個のトークンがソートされればそこで処理を終了する.

引数:
neednum [in] 下位 neednum 個が得られるまでソートする
totalnum [in] トークンスペース内の有効なトークン数

beam.c939 行で定義されています。

参照元 sort_token_no_order().

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 のトークンが存在するトークンスペースの最後のインデックス番号

beam.c1009 行で定義されています。

参照元 get_back_trellis_init(), と get_back_trellis_proceed().

static void init_nodescore ( HTK_Param param,
WCHMM_INFO wchmm 
) [static]

ビームサーチ用の初期化を行う.出力確率キャッシュの 初期化および初期仮説の生成を行う.初期仮説の初期スコア設定のため, 最初の1フレーム目の入力が得られている必要がある.

引数:
param [in] 入力ベクトル列情報(最初のフレームのみ必要)
wchmm [in] 木構造化辞書

beam.c1273 行で定義されています。

参照元 get_back_trellis_init().

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] 単語トレリス構造体 (この関数内で初期化される)

beam.c1477 行で定義されています。

参照元 get_back_trellis(), RealTimeParam(), と RealTimePipeLine().

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 番目のフレーム上に残った単語が追加される)
戻り値:
TRUE (通常どおり終了) あるいは FALSE (ここで探索を中断する 場合: 逐次デコーディング時にショートポーズ区間を検出したか,ビーム内の アクティブノード数が0になったとき)

beam.c1608 行で定義されています。

参照元 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] 単語トレリス構造体 (最終フレームの単語候補が格納される)

beam.c2363 行で定義されています。

参照元 get_back_trellis(), RealTimeParam(), と RealTimeTerminate().

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パスで処理された最終的なフレーム長
戻り値:
第1パスの最尤仮説の累積尤度,あるいは仮説が見つからない場合 は LOG_ZERO.

beam.c2455 行で定義されています。

参照元 get_back_trellis(), RealTimeParam(), と RealTimeTerminate().

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)

beam.c2656 行で定義されています。

参照元 main_recognition_loop().


Juliusに対してTue Sep 22 00:13:57 2009に生成されました。  doxygen 1.6.0