libjulius/src/outprob_style.c

状態の出力確率計算(第1パス) [詳細]

#include <julius/julius.h>

ソースコードを見る。

関数

void outprob_style_cache_init (WCHMM_INFO *wchmm)
 語頭トライフォン変化用キャッシュの初期化
CD_Setlcdset_lookup_with_category (WCHMM_INFO *wchmm, HMM_Logical *hmm, WORD_ID category)
 単語末尾のトライフォンセット (pseudo phone set) を検索する.
static void lcdset_register_with_category (WCHMM_INFO *wchmm, HMM_Logical *hmm, WORD_ID category)
 単語末用カテゴリ付き pseudo phone set を生成する.
void lcdset_register_with_category_all (WCHMM_INFO *wchmm)
 全ての単語末用カテゴリ付き pseudo phone set を生成する.
void lcdset_remove_with_category_all (WCHMM_INFO *wchmm)
 カテゴリ付き pseudo phone set をすべて消去する.
LOGPROB outprob_style (WCHMM_INFO *wchmm, int node, int last_wid, int t, HTK_Param *param)
 木構造化辞書上の状態の出力確率を計算する.
void error_missing_right_triphone (HMM_Logical *base, char *rc_name)
 トライフォンエラーメッセージ:右コンテキスト用
void error_missing_left_triphone (HMM_Logical *base, char *lc_name)
 トライフォンエラーメッセージ:左コンテキスト用


説明

状態の出力確率計算(第1パス)

第1パスで,木構造化辞書上のノードの,入力ベクトルに対する HMM の 出力対数確率を計算する.

トライフォン使用時は,単語内の音素環境依存については辞書読み込み時に 考慮されて対応するトライフォンがすでに割り当てられているので,ここで 特別な処理は行われない. 単語先頭および末尾の音素は,木構造化辞書上では pseudo triphone が割り当たっており,これらについては,以下のように 単語間を音素環境依存性を考慮した計算が行われる.

  1. 単語内音素: 通常通り計算する.
  2. 単語の先頭音素: 直前単語の情報から,pseudo triphone を正しい トライフォンに動的に切り替えて計算.
  3. 単語の末尾音素: その pseudo triphone に含まれる(同じ左コンテキストを 持つトライフォンの)状態集合中のすべての状態について尤度を計算し,
  4. 1音素からなる単語の場合: 上記を両方とも考慮する.

上記の処理を行うには,木構造化辞書の状態ごとに,それぞれが単語内でどの 位置の音素に属する状態であるかの情報が必要である. 木構造化辞書では, 状態ごとに上記のどの処理を行えば良いかを AS_Style であらかじめ保持している.

また,上記の 2 と 4 の状態では,コンテキストに伴うtriphone変化を, 直前単語ID とともに状態ごとにフレーム単位でキャッシュしている. これにより 計算量の増大を防ぐ.

作者:
Akinobu Lee
日付:
Mon Aug 22 17:14:26 2005
Revision
1.4

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


関数

void outprob_style_cache_init ( WCHMM_INFO wchmm  ) 

語頭トライフォン変化用キャッシュの初期化

引数:
wchmm [i/o] 木構造化辞書

outprob_style.c100 行で定義されています。

参照元 init_nodescore().

呼出しグラフ:

CD_Set* lcdset_lookup_with_category ( WCHMM_INFO wchmm,
HMM_Logical hmm,
WORD_ID  category 
)

単語末尾のトライフォンセット (pseudo phone set) を検索する.

文法認識では,各カテゴリごとに独立した pseudo phone set を用いる. ここでは単語末用カテゴリ付き pseudo phone set を検索する.

引数:
wchmm [in] 木構造化辞書
hmm [in] 単語の末尾の HMM
category [in] 単語の属するカテゴリ
戻り値:
該当 set が見つかればそこへのポインタ,あるいは見つからなければ NULL を返す.

outprob_style.c144 行で定義されています。

参照元 lcdset_register_with_category()outprob_style()wchmm_add_word().

呼出しグラフ:

static void lcdset_register_with_category ( WCHMM_INFO wchmm,
HMM_Logical hmm,
WORD_ID  category 
) [static]

単語末用カテゴリ付き pseudo phone set を生成する.

Julian では,ある単語に後続可能な単語集合は文法によって制限される. よって, 単語末尾から次に後続しうる単語先頭音素の種類も文法によって限定 される. そこで,与えられた辞書上で,単語のカテゴリごとに,後続しうる先頭音素 をカテゴリ対情報から作成し,それらをカテゴリ付き pseudo phone set として 定義して単語終端に用いることで,Julian における単語間トライフォンの 近似誤差を小さくすることができる.

この phone set の名前は通常の "a-k" などと異なり "a-k::38" となる (数字はカテゴリID). ここでは,辞書を検索して可能なすべてのカテゴリ付き pseudo phone set を,生成する. これは通常の pseudo phone set とは別に 保持され,単語末端のみで使用される.

引数:
wchmm [i/o] 木構造化辞書
hmm [in] これから登録する単語の終端の論理HMM
category [in] これから登録する単語の文法カテゴリID

outprob_style.c206 行で定義されています。

参照元 lcdset_register_with_category_all().

void lcdset_register_with_category_all ( WCHMM_INFO wchmm  ) 

全ての単語末用カテゴリ付き pseudo phone set を生成する.

辞書上のすべての単語について,その末尾に登場しうるカテゴリ付き pseudo phone set を生成する(文法認識用).

引数:
wchmm [i/o] 木構造化辞書情報

outprob_style.c267 行で定義されています。

参照元 build_wchmm()build_wchmm2().

呼出しグラフ:

void lcdset_remove_with_category_all ( WCHMM_INFO wchmm  ) 

カテゴリ付き pseudo phone set をすべて消去する.

この関数は Julian で文法が 変更された際に,カテゴリ付き pseudo phone set を再構築するのに用いられる.

引数:
wchmm [i/o] 木構造化辞書

outprob_style.c317 行で定義されています。

LOGPROB outprob_style ( WCHMM_INFO wchmm,
int  node,
int  last_wid,
int  t,
HTK_Param param 
)

木構造化辞書上の状態の出力確率を計算する.

引数:
wchmm [in] 木構造化辞書情報
node [in] ノード番号
last_wid [in] 直前単語(単語先頭のトライフォン計算に用いる)
t [in] 時間フレーム
param [in] 特徴量パラメータ構造体 (t 番目のベクトルについて計算する)
戻り値:
出力確率の対数値を返す.

< Local workarea for HMM name conversion

outprob_style.c354 行で定義されています。

参照元 bt_discount_pescore()get_back_trellis_proceed()init_nodescore().

呼出しグラフ:

void error_missing_right_triphone ( HMM_Logical base,
char *  rc_name 
)

トライフォンエラーメッセージ:右コンテキスト用

指定した右コンテキストを持つトライフォンが 見つからなかった場合にエラーメッセージを出力する関数.

引数:
base [in] ベースのトライフォン
rc_name [in] 右コンテキストの音素名

< Local workarea for HMM name conversion

outprob_style.c520 行で定義されています。

参照元 lcdset_register_with_category()next_word()scan_word().

呼出しグラフ:

void error_missing_left_triphone ( HMM_Logical base,
char *  lc_name 
)

トライフォンエラーメッセージ:左コンテキスト用

指定した左コンテキストを持つトライフォンが 見つからなかった場合にエラーメッセージを出力する関数.

引数:
base [in] ベースのトライフォン
lc_name [in] 左コンテキストの音素名

< Local workarea for HMM name conversion

outprob_style.c552 行で定義されています。

参照元 outprob_style()scan_word().

呼出しグラフ:


Juliusに対してThu Jul 23 12:17:00 2009に生成されました。  doxygen 1.5.1