Julius 4.2
|
木構造化辞書の構築 [詳細]
#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_INFO * | wchmm_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) と も表現されています.
wchmm.c で定義されています。
WCHMM_INFO* wchmm_new | ( | ) |
木構造化辞書構造体を新規に割り付ける.
参照元 j_launch_recognition_instance().
static void wchmm_init | ( | WCHMM_INFO * | wchmm | ) | [static] |
static void wchmm_extend | ( | WCHMM_INFO * | wchmm | ) | [static] |
木構造化辞書の状態格納領域を MAXWCNSTEP 分だけ伸長する.
wchmm | [i/o] 木構造化辞書 |
static void wchmm_extend_startnode | ( | WCHMM_INFO * | wchmm | ) | [static] |
木構造化辞書の単語先頭ノード格納領域を STARTNODE_STEP分だけ伸長する.
(multipath)
wchmm | [i/o] 木構造化辞書 |
void wchmm_free | ( | WCHMM_INFO * | w | ) |
木構造化辞書およびその内部の割付メモリを全て解放する.
w | [in] 木構造化辞書 |
単語を音素のならびでソートするqsort_reentrant関数
widx1 | [in] 単語ID 1 へのポインタ |
widx2 | [in] 単語ID 2 へのポインタ |
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] windex の bgn からのソートする要素数 |
参照元 build_wchmm2().
単語をカテゴリIDでソートするqsort関数.
widx1 | [in] 要素1へのポインタ |
widx2 | [in] 要素2へのポインタ |
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 の要素数 |
参照元 build_wchmm2().
static int wchmm_check_match | ( | WORD_INFO * | winfo, |
int | i, | ||
int | j | ||
) | [static] |
2単語間で,単語の先頭から同一で共有可能な音素の数を調べる.
winfo | [in] 単語辞書 |
i | [in] 単語1 |
j | [in] 単語2 |
参照元 build_wchmm(), と build_wchmm2().
static void acc_init | ( | WCHMM_INFO * | wchmm, |
int | node | ||
) | [static] |
ノードの遷移情報を初期化する.
wchmm | [i/o] tree lexicon |
node | [in] node id |
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 |
参照元 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_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_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_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_add_word().
static void wchmm_duplicate_state | ( | WCHMM_INFO * | wchmm, |
int | node, | ||
int | word | ||
) | [static] |
単語終端状態の独立化:与えられた単語の終端ノードをコピーして, 新たにある単語の最終状態として定義する.
同音語処理: 木構造化辞書においてすべての単語は独立した最終状態を持つ必要があるため, 同音語は注意深く扱う必要がある. このため,最初の木構造化辞書を構築した後, 別の単語と完全に共有された単語(同音語), あるいは別の単語の一部として 埋め込まれてしまっている単語を発見するとともに, その最終ノードを コピーして新たな単語終端ノードを作る必要がある.
wchmm | [i/o] 木構造化辞書 |
node | [in] 同音語の終端ノード番号 |
word | [in] 新たに登録する単語 |
static int wchmm_duplicate_leafnode | ( | WCHMM_INFO * | wchmm | ) | [static] |
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] word と matchword の先頭からマッチする音素長 |
matchword | [in] 既存の木構造化辞書中で word と最もマッチする単語 |
enable_iwsp | [in] 単語間ショートポーズ機能使用時TRUEを指定 |
参照元 build_wchmm(), と build_wchmm2().
static void wchmm_calc_wordend_arc | ( | WCHMM_INFO * | wchmm | ) | [static] |
木構造化辞書を走査し,単語の終端状態から外への次遷移確率のリストを作成する.
(non multipath)
wchmm | [i/o] 木構造化辞書 |
参照元 build_wchmm(), と build_wchmm2().
boolean build_wchmm | ( | WCHMM_INFO * | wchmm, |
JCONF_LM * | lmconf | ||
) |
与えられた単語辞書と言語モデルから木構造化辞書を構築する.
この関数は 処理が遅く,Julianで"-oldtree"オプション指定時のみ使用されます. オプション 非指定時およびJuliusでは代わりに build_wchmm2() が用いられます.
wchmm | [i/o] 木構造化辞書 |
lmconf | [in] 言語モデル(LM)設定パラメータ |
参照元 j_launch_recognition_instance().
boolean build_wchmm2 | ( | WCHMM_INFO * | wchmm, |
JCONF_LM * | lmconf | ||
) |
与えられた単語辞書と言語モデルから木構造化辞書を構築する.
この関数は bulid_wchmm() と同じ処理を行いますが, 最初に単語を音素列でソートして音素列の似た順に単語を並べるため, より高速に木構造化を行うことができる. とくにオプション指定をしない 限り,Julius/Julianではこちらが用いられる.
wchmm | [i/o] 木構造化辞書 |
lmconf | [in] 言語モデル(LM)設定パラメータ |
参照元 j_launch_recognition_instance().
void print_wchmm_info | ( | WCHMM_INFO * | wchmm | ) |