Julius 4.2
|
フレーム同期ビーム探索の実行(第1パス) [詳細]
#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パスの結果決定,セグメント 終了の検知などの処理が含まれています.
アルゴリズムについては,単語履歴近似は 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] |
認識結果の単語トレリス上の最尤単語系列を求める
与えられたトレリス単語から入力始端に向かって単語トレリス上を トレースバックし, その最尤単語系列候補およびその言語スコアを返す. 起点となる最初のトレリス単語が与えられる必要がある.
wordseq_rt | [out] 結果の最尤単語系列が格納されるバッファ |
rt_wordlen | [out] wordseq_rt の長さ |
atom | [in] バックトレースの起点となるトレリス単語 |
winfo | [in] 単語辞書 |
参照元 bt_current_max(), と find_1pass_result().
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] 認識処理インスタンス |
参照元 finalize_1st_pass().
static int compare_backscore | ( | TRELLIS_ATOM ** | x1, |
TRELLIS_ATOM ** | x2 | ||
) | [static] |
トレリス単語をスコアでソートするqsort関数.
x1 | [in] 要素1へのポインタ |
x2 | [in] 要素2へのポインタ |
static void find_1pass_result_word | ( | int | framelen, |
RecogProcess * | r | ||
) | [static] |
find_1pass_result() の単語認識モード版.
単語認識モードでは第1パスで 認識を終了するので,得られた候補は通常の第2パスと同じ場所に格納する.
framelen | [in] 第1パスで処理が到達したフレーム数 |
r | [i/o] 認識処理インスタンス |
参照元 finalize_1st_pass().
static void bt_current_max | ( | RecogProcess * | r, |
int | t | ||
) | [static] |
第1パスの処理中に,あるフレームまでのベストパスを表示する.
r | [i/o] 認識処理インスタンス |
t | [in] 現在の入力フレーム |
static void bt_current_max_word | ( | RecogProcess * | r, |
int | t | ||
) | [static] |
第1パスの処理中に,あるフレーム上の最尤単語を表示する(デバッグ用)
r | [i/o] 認識処理インスタンス |
t | [in] 現在の入力フレーム |
static void malloc_nodes | ( | FSBeam * | d, |
int | n, | ||
int | ntoken_init | ||
) | [static] |
第1パスのビーム探索用の初期ワークエリアを確保する.
足りない場合は探索中に動的に伸長される.
d | [i/o] 第1パス探索処理用ワークエリア |
n | [in] 木構造化辞書のノード数 |
ntoken_init | [in] 最初に確保するトークンの数 |
static void expand_tlist | ( | FSBeam * | d | ) | [static] |
static void prepare_nodes | ( | FSBeam * | d, |
int | ntoken_step | ||
) | [static] |
ノード情報を初期化する.
Julius は,木構造化辞書のサイズが直前の入力 時と変化がないときは,この関数によってノード情報を初期化するだけで よい. サイズが変更されているときはノードを開放・再確保する.
d | [i/o] work area for 1st pass recognition processing |
ntoken_step | [in] required token step |
static void free_nodes | ( | FSBeam * | d | ) | [static] |
static void clear_tlist | ( | FSBeam * | d, |
int | tt | ||
) | [static] |
トークンスペースをリセットする.
d | [i/o] 第1パス探索処理用ワークエリア |
tt | [in] ワークエリアID (0 または 1) |
static void clear_tokens | ( | FSBeam * | d, |
int | tt | ||
) | [static] |
アクティブトークンリストをクリアする.
d | [i/o] 第1パス探索処理用ワークエリア |
tt | [in] 直前のワークエリアID (0 または 1) |
トークンスペースから新たなトークンを取りだす.
d | [i/o] 第1パス探索処理用ワークエリア |
参照元 init_nodescore(), と propagate_token().
木構造化辞書のノードにトークンを割り付ける.
木構造化辞書のノードのアクティブトークンリストにトークンを保存する. またトークンスペースにおいてトークンからノード番号へのリンクを保存する.
既にトークンがある場合は,新たなトークンによって上書きされる. なお WPAIR 指定時はそのリストに新たなトークンを追加する.
d | [i/o] 第1パス探索処理用ワークエリア |
node | [in] 木構造化辞書のノード番号 |
tkid | [in] トークン番号 |
参照元 init_nodescore(), と propagate_token().
木構造化辞書上のあるノードが,現在なんらかのトークンを 保持しているかをチェックする.
WPAIR が定義されている場合,ノードは直前単語ごとに異なるトークンを複数 保持する. この場合, 指定された単語IDを直前単語とするトークンが そのノードに保持されているかどうかがチェックされる. すなわち,既にトークン が存在しても,そのトークンの表すパスの直前単語が指定した単語と異なって いれば未保持 (TOKENID_UNDEFINED) を返す.
d | [i/o] 第1パス探索処理用ワークエリア |
tt | [in] 直前のワークエリアID (0 または 1) |
node | [in] ノード番号 |
wid | [in] 直前単語のID (WPAIR定義時のみ有効, 他では無視される) |
参照元 init_nodescore(), と propagate_token().
static void sort_token_upward | ( | FSBeam * | d, |
int | neednum, | ||
int | totalnum | ||
) | [static] |
トークンスペースをスコアの大きい順にソートする.
heap sort を用いて現在のトークン集合をスコアの大きい順にソートする. 上位 neednum 個のトークンがソートされればそこで処理を終了する.
d | [i/o] 第1パス探索処理用ワークエリア |
neednum | [in] 上位 neednum 個が得られるまでソートする |
totalnum | [in] トークンスペース内の有効なトークン数 |
static void sort_token_downward | ( | FSBeam * | d, |
int | neednum, | ||
int | totalnum | ||
) | [static] |
トークンスペースをスコアの小さい順にソートする.
ビームのしきい値決定のために,heap sort を用いて 現在のトークン集合をスコアの小さい順にソートする. 下位 neednum 個のトークンがソートされればそこで処理を終了する.
d | [i/o] 第1パス探索処理用ワークエリア |
neednum | [in] 下位 neednum 個が得られるまでソートする |
totalnum | [in] トークンスペース内の有効なトークン数 |
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] |
初期仮説の生成
初期仮説は,N-gramでは winfo->head_silwid に固定されている. DFA では 文法上文頭にきうる単語すべてが初期仮説となる. 単語認識モードでは 全ての単語が初期仮説となる.
音響モデルが非multipathの場合,ここで最初のフレームの出力確率 計算まで行われる.
param | [in] 入力ベクトル列情報(最初のフレームのみ必要) |
r | [in] 音声認識処理インスタンス |
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] |
単語内のあるノード間の遷移を行う.
wchmm | [in] 木構造化辞書 |
d | [i/o] 第1パスワークエリア |
tk_ret | [i/o] 伝搬元のトークン(内部でポインタ更新時は上書き) |
j | [in] tk_ret の元のトークンリストのID |
next_node | [in] 遷移先のノード番号 |
next_a | [in] 遷移確率 |
< Temporal work to hold the current node number on the lexicon tree
参照元 beam_intra_word().
static void beam_intra_word | ( | WCHMM_INFO * | wchmm, |
FSBeam * | d, | ||
TOKEN2 ** | tk_ret, | ||
int | j | ||
) | [static] |
単語内遷移を行う.
wchmm | [in] 木構造化辞書 |
d | [i/o] 第1パスワークエリア |
tk_ret | [i/o] 伝搬元のトークン(内部でポインタ更新時は上書き) |
j | [in] tk_ret の元のトークンリストのID |
< Temporal work to hold the next states of a node
static TRELLIS_ATOM* save_trellis | ( | BACKTRELLIS * | bt, |
WCHMM_INFO * | wchmm, | ||
TOKEN2 * | tk, | ||
int | t, | ||
boolean | final_for_multipath | ||
) | [static] |
トークンからトレリス単語を保存する.
bt | [i/o] バックトレリス構造体 |
wchmm | [in] 木構造化辞書 |
tk | [in] 単語末端に到達しているトークン |
t | [in] 現在の時間フレーム |
final_for_multipath | [in] 入力最後の1回処理時 TRUE |
static void beam_inter_word | ( | WCHMM_INFO * | wchmm, |
FSBeam * | d, | ||
TOKEN2 ** | tk_ret, | ||
TRELLIS_ATOM * | tre, | ||
int | j | ||
) | [static] |
単語末トークンからの単語間遷移.
wchmm | [in] 木構造化辞書 |
d | [i/o] 第1パスワークエリア |
tk_ret | [in] 伝搬元の単語末トークン |
tre | [in] tk_ret から生成されたトレリス単語 |
j | [in] tk_ret の元のトークンリストのID |
< Temporal pointer to hold inter-word cache array
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(), と get_back_trellis_end().
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 |