メインページ | モジュール | データ構造 | Directories | ファイル一覧 | データフィールド | グローバル | 関連ページ

search_bestfirst_v1.c

第2パスで仮説のViterbi演算およびスコア計算を行う(backscan用). [詳細]

#include <julius.h>

search_bestfirst_v1.cのインクルード依存関係図

ソースコードを見る。

関数

void free_node (NODE *node)
 < Define if want triphone debug messages
NODEcpy_node (NODE *dst, NODE *src)
NODEnewnode ()
void malloc_wordtrellis ()
void free_wordtrellis ()
void scan_word (NODE *now, HTK_Param *param)
void next_word (NODE *now, NODE *new, NEXTWORD *nword, HTK_Param *param, BACKTRELLIS *backtrellis)
void start_word (NODE *new, NEXTWORD *nword, HTK_Param *param, BACKTRELLIS *backtrellis)
void last_next_word (NODE *now, NODE *new, HTK_Param *param)

変数

static LOGPROBwordtrellis [2]
 Buffer to compute viterbi path of a word.
static int tn
 Temporal pointer to current buffer.
static int tl
 Temporal pointer to previous buffer.
static LOGPROBg
 Buffer to hold source viterbi scores.
static HMM_Logical ** phmmseq
 Phoneme sequence to be computed.
static int phmmlen_max
 Maximum length of phmmseq.


説明

第2パスで仮説のViterbi演算およびスコア計算を行う(backscan用).

作者:
Akinobu Lee
日付:
Sun Sep 11 23:54:53 2005
ここでは,第2パスにおいて探索中の仮説のViterbiスコアの更新演算, 次単語とのトレリス接続,および仮説のスコア計算を行う関数が定義されて います.

単語接続部の単語間音素環境依存性は,高速な backscan アルゴリズムに よって行われます.このファイルで定義されている関数は,config.h において PASS2_STRICT_IWCD が undef であるときに使用されます.逆に上記が define されているときは,search_bestfirst_v2.c の関数が用いられます.

Backscan アルゴリズムでは,デコーディングの高速化のため, 次単語とその前の単語の接続点について,「単語間音素コンテキストの遅延処理」 を行ないます:

  1. 新仮説の生成(next_word())では,次単語の最後の音素の右コンテキスト のみが考慮される.
  2. その単語間の完全な音素環境依存性は,その仮説がいったんスタックに 入った後もう一度 POP されたときに scan_word() にて改めて計算する.

仮説生成時にはすべての生成仮説に対して依存計算を行なず,あとでスコアが 高く POP された仮説についてのみ再計算を行ないます.このため処理が 高速化されますが,仮説スコア計算(next_word())において次単語接続部分の 環境依存性が考慮されないので, 探索中のスコアに誤差が生じる場合があります.

実装について:

  1. next_word() では,次単語の最後の音素のみを右コンテキスト(=展開元 単語の最初の音素)を考慮して変化させ,トレリス接続点の出力確率を求める.
  2. scan_word() では,新単語部分ともう1つ前の単語の最初の音素を変化 させ,scan する.そのため新単語部分だけでなく,そのもう一音素前まで scan の対象となる.この "1-phoneme backscan" を行なうため, 各仮説ノードは最終HMM状態の前向きスコア (NODEにおける g[]) だけでなく, その backscan 開始点(もう1つ前の単語の最初の音素の手前)のスコア も保存しておく必要がある (NODE における g_prev[]).

なお,1音素のみからなる単語では backscan 開始点と単語境界が重なることを 考慮する必要があるため,実装はもう少し複雑になる.

Revision
1.1.1.1

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


関数

void free_node NODE node  ) 
 

< Define if want triphone debug messages

仮説ノードを解放する.

引数:
node [in] 仮説ノード

search_bestfirst_v1.c129 行で定義されています。

参照元 free_all_nodes(), put_all_in_stack(), put_to_stack(), result_reorder_and_output(), と wchmm_fbs().

NODE* cpy_node NODE dst,
NODE src
 

仮説をコピーする.

引数:
dst [out] コピー先の仮説
src [in] コピー元の仮説
戻り値:
dst を返す.

search_bestfirst_v1.c166 行で定義されています。

参照元 last_next_word(), と wchmm_fbs().

NODE* newnode  ) 
 

新たな仮説ノードを割り付ける.

戻り値:
新たに割り付けられた仮説ノードへのポインタを返す.

search_bestfirst_v1.c240 行で定義されています。

参照元 wchmm_fbs().

void malloc_wordtrellis  ) 
 

1単語分のトレリス計算用のワークエリアを確保.

search_bestfirst_v1.c321 行で定義されています。

参照元 wchmm_fbs().

void free_wordtrellis  ) 
 

1単語分のトレリス計算用のワークエアリアを解放

search_bestfirst_v1.c359 行で定義されています。

参照元 wchmm_fbs().

void scan_word NODE now,
HTK_Param param
 

最後の1単語の前向きトレリスを計算して,文仮説の前向き尤度を更新する.

引数:
now [i/o] 文仮説
param [in] 入力パラメータ列

search_bestfirst_v1.c458 行で定義されています。

参照元 wchmm_fbs().

void next_word NODE now,
NODE new,
NEXTWORD nword,
HTK_Param param,
BACKTRELLIS backtrellis
 

展開元仮説に次単語を接続して新しい仮説を生成する.次単語の単語トレリス上の スコアから最尤接続点を求め,仮説スコアを計算する.

引数:
now [in] 展開元仮説
new [out] 新たに生成された仮説が格納される
nword [in] 接続する次単語の情報
param [in] 入力パラメータ列
backtrellis [in] 単語トレリス

search_bestfirst_v1.c1256 行で定義されています。

参照元 wchmm_fbs().

void start_word NODE new,
NEXTWORD nword,
HTK_Param param,
BACKTRELLIS backtrellis
 

与えられた単語から初期仮説を生成する.

引数:
new [out] 新たに生成された仮説が格納される
nword [in] 初期仮説単語の情報
param [in] 入力パラメータ列
backtrellis [in] 単語トレリス

search_bestfirst_v1.c1544 行で定義されています。

参照元 wchmm_fbs().

void last_next_word NODE now,
NODE new,
HTK_Param param
 

終端処理:終端まで達した文仮説の最終的なスコアをセットする.

引数:
now [in] 終端まで達した仮説
new [out] 最終的な文仮説のスコアを格納する場所へのポインタ
param [in] 入力パラメータ列

search_bestfirst_v1.c1650 行で定義されています。

参照元 wchmm_fbs().


Juliusに対してTue Mar 28 16:21:15 2006に生成されました。  doxygen 1.4.2