Julius 4.2
|
ガウス分布計算プラグインのサンプル [詳細]
マクロ定義 | |
#define | PLUGIN_TITLE "Gaussian calculation plugin for Julius" |
Required for a file. | |
#define | GPRUNE_OPT "mycalc" |
関数 | |
int | initialize () |
読み込み時の初期化(任意) | |
int | get_plugin_info (int opcode, char *buf, int buflen) |
プラグイン情報取得(必須) | |
void | calcmix_get_optname (char *buf, int buflen) |
計算方法選択用オプションのための文字列を返す(必須) | |
void | calcmix (HMMWork *wrk, HTK_HMM_Dens **g, int num, int *last_id, int lnum) |
ガウス分布計算関数 | |
void | calcmix_free (HMMWork *wrk) |
calcmix_init() で確保されたワークエリアを開放する. | |
boolean | calcmix_init (HMMWork *wrk) |
計算用のワークエリアを確保する. |
ガウス分布計算プラグインのサンプル
このサンプルは julius のライブラリを使用します.
calcmix.c で定義されています。
#define PLUGIN_TITLE "Gaussian calculation plugin for Julius" |
Required for a file.
Optional for a file
Required:
参照元 get_plugin_info().
int initialize | ( | ) |
int get_plugin_info | ( | int | opcode, |
char * | buf, | ||
int | buflen | ||
) |
void calcmix_get_optname | ( | char * | buf, |
int | buflen | ||
) |
計算方法選択用オプションのための文字列を返す(必須)
Julius で起動時に "-gprune ここで返す値" と指定するとこのプラグイン が使用される.この関数では,上記の "-gprune" に与えるべき文字列を格 納して返す.返す文字は,システムの "-gprune" オプションにすでにある ものや,他のプラグインが使用しているものと同じでないこと.(もし同 じだった場合システム側が優先される)
この関数は,起動時のオプション解析時に何度か呼ばれる.
buf | [out] 値を格納して返すバッファ |
buflen | [in] buf の最大長 |
void calcmix | ( | HMMWork * | wrk, |
HTK_HMM_Dens ** | g, | ||
int | num, | ||
int * | last_id, | ||
int | lnum | ||
) |
ガウス分布計算関数
この関数では,与えられた複数のガウス分布に対して入力ベクトルの 出力確率を求める.この関数が行うのは,複数のガウス分布それぞれの 出力確率の算出と格納のみであり,混合分布としての重み計算や addlog はこの関数が返ったあとに Julius 側で行われる.
入力ベクトルは wrk->OP_vec[] に格納されており,長さは wrk->OP_veclen である.ガウス分布定義は g[] に配列として複数渡され,その数は num である.
なお,last_id と lnum はこのガウス分布集合 g[] において直前の入力フ レームで計算されたものの id が入っている.Julius の内部処理用なので, 使わなくても差し支えない.
各ガウス分布に対する入力ベクトルの対数出力確率は,そのガウス分布の ID (0 から始まる配列の添え字) を wrk->OP_calced_id に,値を wrk->OP_calced_score に格納すること.また,実際に計算された ガウス分布の数を wrk->OP_calced_num に格納すること. (これは Gaussian pruning を想定した実装である)
以下は,pruning 等を行わない単純な出力確率計算を実装したものである. ガウス分布は対角共分散を仮定している.なお Julius では読み込み時に HTK でいうところの gconst 値はあらかじめ計算される.このため,計算時に 下記の dens->gconst のように利用できる.
wrk | [i/o] HMM計算用ワークエリア |
g | [in] 出力確率を計算するガウス分布の列 |
num | [in] g のガウス分布の数 |
last_id | [in] 直前入力フレームで上位だったガウス分布のIDリスト, または内場合は NULL |
lnum | [in] last_id の長さ |
void calcmix_free | ( | HMMWork * | wrk | ) |