Julius 4.2
マクロ定義 | 関数
libjulius/src/wchmm.c

木構造化辞書の構築 [詳細]

#include <julius/julius.h>

ソースコードを見る。

マクロ定義

#define WCHMM_SIZE_CHECK
 If defined, do wchmm size estimation (for debug only)
#define COUNT_STEP   500
 Word count step for debug progress output.

関数

WCHMM_INFOwchmm_new ()
 木構造化辞書構造体を新規に割り付ける.
static void wchmm_init (WCHMM_INFO *wchmm)
 木構造化辞書の内容を初期化する.
static void wchmm_extend (WCHMM_INFO *wchmm)
 木構造化辞書の状態格納領域を MAXWCNSTEP 分だけ伸長する.
static void wchmm_extend_startnode (WCHMM_INFO *wchmm)
 木構造化辞書の単語先頭ノード格納領域を STARTNODE_STEP分だけ伸長する.
void wchmm_free (WCHMM_INFO *w)
 木構造化辞書およびその内部の割付メモリを全て解放する.
static int compare_wseq (WORD_ID *widx1, WORD_ID *widx2, WORD_INFO *winfo)
 単語を音素のならびでソートするqsort_reentrant関数
static void wchmm_sort_idx_by_wseq (WORD_INFO *winfo, WORD_ID *windex, WORD_ID bgn, WORD_ID len)
 単語IDの集合 windex[bgn..bgn+len-1] を単語の音素ならびでソートする.
static int compare_category (WORD_ID *widx1, WORD_ID *widx2, WORD_INFO *winfo)
 単語をカテゴリIDでソートするqsort関数.
static void wchmm_sort_idx_by_category (WORD_INFO *winfo, WORD_ID *windex, WORD_ID len)
 単語ID集合 windex[0..len-1] をカテゴリIDでソートする.
static int wchmm_check_match (WORD_INFO *winfo, int i, int j)
 2単語間で,単語の先頭から同一で共有可能な音素の数を調べる.
static void acc_init (WCHMM_INFO *wchmm, int node)
 ノードの遷移情報を初期化する.
static void add_ac (WCHMM_INFO *wchmm, int node, LOGPROB a, int arc)
 ノードに遷移を追加する.
static void add_wacc (WCHMM_INFO *wchmm, int node, LOGPROB a, int arc)
 木構造化辞書のあるノードに,別のノードへの遷移を追加する
static void get_outtrans_list (WCHMM_INFO *wchmm, WORD_ID w, int pos, int *node, LOGPROB *a, int *num, int maxnum, boolean insert_sp)
 ある単語のある位置の音素から単語末端の外へ出る遷移のリストを得る.
static void wchmm_link_hmm (WCHMM_INFO *wchmm, int from_node, int to_node, HTK_HMM_Trans *tinfo)
 ある音素の末尾の状態から,ある音素の先頭状態への遷移を追加する.
static void wchmm_link_subword (WCHMM_INFO *wchmm, int from_word, int from_seq, int to_word, int to_seq)
 木構造化辞書中の2単語中のある音素間を接続する.
static void wchmm_duplicate_state (WCHMM_INFO *wchmm, int node, int word)
 単語終端状態の独立化:与えられた単語の終端ノードをコピーして, 新たにある単語の最終状態として定義する.
static int wchmm_duplicate_leafnode (WCHMM_INFO *wchmm)
 木構造化辞書全体を走査して,すべての同音語について単語終端状態の独立化 を行う.
static boolean wchmm_add_word (WCHMM_INFO *wchmm, int word, int matchlen, int matchword, boolean enable_iwsp)
 木構造化辞書に新たに単語を追加する.
static void wchmm_calc_wordend_arc (WCHMM_INFO *wchmm)
 木構造化辞書を走査し,単語の終端状態から外への次遷移確率のリストを作成する.
boolean build_wchmm (WCHMM_INFO *wchmm, JCONF_LM *lmconf)
 与えられた単語辞書と言語モデルから木構造化辞書を構築する.
boolean build_wchmm2 (WCHMM_INFO *wchmm, JCONF_LM *lmconf)
 与えられた単語辞書と言語モデルから木構造化辞書を構築する.
void print_wchmm_info (WCHMM_INFO *wchmm)
 木構造化辞書のサイズなどの情報を標準出力に出力する.

説明

木構造化辞書の構築

ここでは,与えられた単語辞書, HMM定義および言語制約から木構造化辞書を 構築する関数が定義されています. 木構造化辞書は起動時に構築され, 第1パスの認識に用いられます. 木構造化辞書は状態単位で構成され, 各状態はHMM出力確率と遷移先の他,および探索のための様々な情報を含みます.

開発の経緯上,ソース内では木構造化辞書は wchmm (word-conjunction HMM) と も表現されています.

作者:
Akinobu Lee
日付:
Mon Sep 19 23:39:15 2005
Revision:
1.9

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


関数

WCHMM_INFO* wchmm_new ( )

木構造化辞書構造体を新規に割り付ける.

戻り値:
新たにメモリ上に割り付けられた木構造化辞書構造体へのポインタを返す.

wchmm.c70 行で定義されています。

参照元 j_launch_recognition_instance().

関数の呼び出しグラフ:

呼出しグラフ:

static void wchmm_init ( WCHMM_INFO wchmm) [static]

木構造化辞書の内容を初期化する.

引数:
wchmm[out] 木構造化辞書へのポインタ

wchmm.c104 行で定義されています。

参照元 build_wchmm(), と build_wchmm2().

static void wchmm_extend ( WCHMM_INFO wchmm) [static]

木構造化辞書の状態格納領域を MAXWCNSTEP 分だけ伸長する.

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

wchmm.c163 行で定義されています。

参照元 wchmm_add_word(), と wchmm_duplicate_state().

static void wchmm_extend_startnode ( WCHMM_INFO wchmm) [static]

木構造化辞書の単語先頭ノード格納領域を STARTNODE_STEP分だけ伸長する.

(multipath)

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

wchmm.c190 行で定義されています。

参照元 wchmm_add_word(), と wchmm_duplicate_state().

void wchmm_free ( WCHMM_INFO w)

木構造化辞書およびその内部の割付メモリを全て解放する.

引数:
w[in] 木構造化辞書

wchmm.c214 行で定義されています。

参照元 j_recogprocess_free().

関数の呼び出しグラフ:

呼出しグラフ:

static int compare_wseq ( WORD_ID widx1,
WORD_ID widx2,
WORD_INFO winfo 
) [static]

単語を音素のならびでソートするqsort_reentrant関数

引数:
widx1[in] 単語ID 1 へのポインタ
widx2[in] 単語ID 2 へのポインタ
戻り値:
単語widx2が単語widx1の一部か昇順であれば 1, 単語widx1が単語widx2の一部か昇順であれば -1, 全く同じ音素並びであれば 0 を返す.

wchmm.c287 行で定義されています。

参照元 wchmm_sort_idx_by_wseq().

static void wchmm_sort_idx_by_wseq ( WORD_INFO winfo,
WORD_ID windex,
WORD_ID  bgn,
WORD_ID  len 
) [static]

単語IDの集合 windex[bgn..bgn+len-1] を単語の音素ならびでソートする.

引数:
winfo[in] 単語辞書
windex[i/o] 単語IDのインデックス列(内部でソートされる)
bgn[in] windex のソート開始点
len[in] windexbgn からのソートする要素数

wchmm.c336 行で定義されています。

参照元 build_wchmm2().

static int compare_category ( WORD_ID widx1,
WORD_ID widx2,
WORD_INFO winfo 
) [static]

単語をカテゴリIDでソートするqsort関数.

引数:
widx1[in] 要素1へのポインタ
widx2[in] 要素2へのポインタ
戻り値:

wchmm.c360 行で定義されています。

参照元 wchmm_sort_idx_by_category().

static void wchmm_sort_idx_by_category ( WORD_INFO winfo,
WORD_ID windex,
WORD_ID  len 
) [static]

単語ID集合 windex[0..len-1] をカテゴリIDでソートする.

引数:
winfo[in] 単語辞書
windex[i/o] 単語IDのインデックス列(内部でソートされる)
len[in] windex の要素数

wchmm.c385 行で定義されています。

参照元 build_wchmm2().

static int wchmm_check_match ( WORD_INFO winfo,
int  i,
int  j 
) [static]

2単語間で,単語の先頭から同一で共有可能な音素の数を調べる.

引数:
winfo[in] 単語辞書
i[in] 単語1
j[in] 単語2
戻り値:
共有可能な先頭からの音素数を返す.

wchmm.c417 行で定義されています。

参照元 build_wchmm(), と build_wchmm2().

static void acc_init ( WCHMM_INFO wchmm,
int  node 
) [static]

ノードの遷移情報を初期化する.

引数:
wchmm[i/o] tree lexicon
node[in] node id

wchmm.c444 行で定義されています。

参照元 wchmm_add_word(), と wchmm_duplicate_state().

static void add_ac ( WCHMM_INFO wchmm,
int  node,
LOGPROB  a,
int  arc 
) [static]

ノードに遷移を追加する.

この関数は自己遷移・隣への遷移以外の場合に使用される.

引数:
wchmm[i/o] tree lexicon
node[in] node id
a[in] transition probability in log10
arc[in] transition destination node id

wchmm.c468 行で定義されています。

参照元 add_wacc().

static void add_wacc ( WCHMM_INFO wchmm,
int  node,
LOGPROB  a,
int  arc 
) [static]

木構造化辞書のあるノードに,別のノードへの遷移を追加する

引数:
wchmm[i/o] 木構造化辞書
node[in] ノード番号
a[in] 遷移確率(対数)
arc[in] 遷移先のノード番号

wchmm.c505 行で定義されています。

参照元 wchmm_add_word(), wchmm_duplicate_state(), と wchmm_link_hmm().

static void get_outtrans_list ( WCHMM_INFO wchmm,
WORD_ID  w,
int  pos,
int *  node,
LOGPROB a,
int *  num,
int  maxnum,
boolean  insert_sp 
) [static]

ある単語のある位置の音素から単語末端の外へ出る遷移のリストを得る.

(multipath)

引数:
wchmm[in] 木構造化辞書
w[in] 単語ID
pos[in] 音素位置
node[out] 音素内の,単語末端外への遷移を持つ状態のリスト
a[out] node の各要素の遷移確率
num[out] node の要素数. 発見数だけ増加される.
maxnum[in] node の格納可能な最大数
insert_sp[in] 単語終端での sp 挟み込みを考慮するならTRUE

wchmm.c543 行で定義されています。

参照元 wchmm_add_word().

static void wchmm_link_hmm ( WCHMM_INFO wchmm,
int  from_node,
int  to_node,
HTK_HMM_Trans tinfo 
) [static]

ある音素の末尾の状態から,ある音素の先頭状態への遷移を追加する.

引数:
wchmm[i/o] 木構造化辞書
from_node[in] ある音素の末尾の状態
to_node[in] ある音素の先頭状態
tinfo[in] from_node の属する音素HMMの遷移確率行列

wchmm.c629 行で定義されています。

参照元 wchmm_link_subword().

static void wchmm_link_subword ( WCHMM_INFO wchmm,
int  from_word,
int  from_seq,
int  to_word,
int  to_seq 
) [static]

木構造化辞書中の2単語中のある音素間を接続する.

引数:
wchmm[i/o] 木構造化辞書
from_word[in] 遷移元の単語のID
from_seq[in] 遷移元の単語中の接続する音素の位置
to_word[in] 遷移先の単語のID
to_seq[in] 遷移先の単語中の接続する音素の位置

wchmm.c686 行で定義されています。

参照元 wchmm_add_word().

static void wchmm_duplicate_state ( WCHMM_INFO wchmm,
int  node,
int  word 
) [static]

単語終端状態の独立化:与えられた単語の終端ノードをコピーして, 新たにある単語の最終状態として定義する.

覚え書き:

同音語処理: 木構造化辞書においてすべての単語は独立した最終状態を持つ必要があるため, 同音語は注意深く扱う必要がある. このため,最初の木構造化辞書を構築した後, 別の単語と完全に共有された単語(同音語), あるいは別の単語の一部として 埋め込まれてしまっている単語を発見するとともに, その最終ノードを コピーして新たな単語終端ノードを作る必要がある.

引数:
wchmm[i/o] 木構造化辞書
node[in] 同音語の終端ノード番号
word[in] 新たに登録する単語

wchmm.c741 行で定義されています。

参照元 wchmm_duplicate_leafnode().

static int wchmm_duplicate_leafnode ( WCHMM_INFO wchmm) [static]

木構造化辞書全体を走査して,すべての同音語について単語終端状態の独立化 を行う.

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

wchmm.c871 行で定義されています。

参照元 build_wchmm(), と build_wchmm2().

static boolean wchmm_add_word ( WCHMM_INFO wchmm,
int  word,
int  matchlen,
int  matchword,
boolean  enable_iwsp 
) [static]

木構造化辞書に新たに単語を追加する.

追加場所の情報として,現在の木構造化 辞書内で最もその単語と先頭から良くマッチする単語,およびそのマッチする長さ を指定する.

引数:
wchmm[i/o] 木構造化辞書
word[in] 追加する辞書単語のID
matchlen[in] wordmatchword の先頭からマッチする音素長
matchword[in] 既存の木構造化辞書中で word と最もマッチする単語
enable_iwsp[in] 単語間ショートポーズ機能使用時TRUEを指定

wchmm.c959 行で定義されています。

参照元 build_wchmm(), と build_wchmm2().

static void wchmm_calc_wordend_arc ( WCHMM_INFO wchmm) [static]

木構造化辞書を走査し,単語の終端状態から外への次遷移確率のリストを作成する.

(non multipath)

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

wchmm.c1406 行で定義されています。

参照元 build_wchmm(), と build_wchmm2().

boolean build_wchmm ( WCHMM_INFO wchmm,
JCONF_LM lmconf 
)

与えられた単語辞書と言語モデルから木構造化辞書を構築する.

この関数は 処理が遅く,Julianで"-oldtree"オプション指定時のみ使用されます. オプション 非指定時およびJuliusでは代わりに build_wchmm2() が用いられます.

引数:
wchmm[i/o] 木構造化辞書
lmconf[in] 言語モデル(LM)設定パラメータ

wchmm.c1542 行で定義されています。

参照元 j_launch_recognition_instance().

関数の呼び出しグラフ:

呼出しグラフ:

boolean build_wchmm2 ( WCHMM_INFO wchmm,
JCONF_LM lmconf 
)

与えられた単語辞書と言語モデルから木構造化辞書を構築する.

この関数は bulid_wchmm() と同じ処理を行いますが, 最初に単語を音素列でソートして音素列の似た順に単語を並べるため, より高速に木構造化を行うことができる. とくにオプション指定をしない 限り,Julius/Julianではこちらが用いられる.

引数:
wchmm[i/o] 木構造化辞書
lmconf[in] 言語モデル(LM)設定パラメータ

wchmm.c1749 行で定義されています。

参照元 j_launch_recognition_instance().

関数の呼び出しグラフ:

呼出しグラフ:

void print_wchmm_info ( WCHMM_INFO wchmm)

木構造化辞書のサイズなどの情報を標準出力に出力する.

引数:
wchmm[in] 木構造化辞書

wchmm.c2082 行で定義されています。

参照元 print_engine_info().

関数の呼び出しグラフ:

呼出しグラフ: