julius/wchmm.c
木構造化辞書を構築する
[詳細]
#include <julius.h>
ソースコードを見る。
関数 |
WCHMM_INFO * | wchmm_new () |
static void | wchmm_init (WCHMM_INFO *wchmm) |
static void | wchmm_extend (WCHMM_INFO *wchmm) |
void | wchmm_free (WCHMM_INFO *w) |
static int | compare_wseq (WORD_ID *widx1, WORD_ID *widx2) |
static void | wchmm_sort_idx_by_wseq (WORD_INFO *winfo, WORD_ID *windex, WORD_ID bgn, WORD_ID len) |
static int | wchmm_check_match (WORD_INFO *winfo, int i, int j) |
static void | add_wacc (WCHMM_INFO *wchmm, int node, LOGPROB a, int arc) |
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) |
static void | wchmm_duplicate_state (WCHMM_INFO *wchmm, int node, int word) |
static void | wchmm_duplicate_leafnode (WCHMM_INFO *wchmm) |
static void | wchmm_add_word (WCHMM_INFO *wchmm, int word, int matchlen, int matchword) |
static void | wchmm_index_ststart (WCHMM_INFO *wchmm) |
static void | wchmm_calc_wordend_arc (WCHMM_INFO *wchmm) |
static int | compare_prob (LOGPROB *a, LOGPROB *b) |
static LOGPROB | get_nbest_uniprob (WORD_INFO *winfo, int n) |
void | build_wchmm2 (WCHMM_INFO *wchmm) |
void | print_wchmm_info (WCHMM_INFO *wchmm) |
変数 |
static int | dupcount = 0 |
| Number of duplicated nodes (for debug only).
|
static WORD_INFO * | local_winfo |
| Temporary work area for sort callbacks.
|
static int | separated_word_count |
| Number of words actually separated (linearlized) from the tree.
|
説明
木構造化辞書を構築する
- 作者:
- Akinobu Lee
- 日付:
- Mon Sep 19 23:39:15 2005
ここでは,与えられた単語辞書, HMM定義および言語制約から木構造化辞書を 構築する関数が定義されています.木構造化辞書は起動時に構築され, 第1パスの認識に用いられます.木構造化辞書は状態単位で構成され, 各状態はHMM出力確率と遷移先の他,および探索のための様々な情報を含みます.
開発の経緯上,ソース内では木構造化辞書は wchmm (word-conjunction HMM) と も表現されています.
- Revision
- 1.4
wchmm.c で定義されています。
関数
static void wchmm_init |
( |
WCHMM_INFO * |
wchmm |
) |
[static] |
static void wchmm_extend |
( |
WCHMM_INFO * |
wchmm |
) |
[static] |
木構造化辞書およびその内部の割付メモリを全て解放する.
- 引数:
-
wchmm.c の 206 行で定義されています。
単語を音素のならびでソートするqsort関数
- 引数:
-
| widx1 | [in] 単語ID 1 へのポインタ |
| widx2 | [in] 単語ID 2 へのポインタ |
- 戻り値:
- 単語widx2が単語widx1の一部か昇順であれば 1, 単語widx1が単語widx2の一部か昇順であれば -1, 全く同じ音素並びであれば 0 を返す.
wchmm.c の 292 行で定義されています。
参照元 wchmm_sort_idx_by_wseq().
単語IDの集合 windex[bgn..bgn+len-1] を単語の音素ならびでソートする.
- 引数:
-
| winfo | [in] 単語辞書 |
| windex | [i/o] 単語IDのインデックス列(内部でソートされる) |
| bgn | [in] windex のソート開始点 |
| len | [in] windex の bgn からのソートする要素数 |
wchmm.c の 341 行で定義されています。
参照元 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.c の 430 行で定義されています。
参照元 build_wchmm2().
ある音素の末尾の状態から,ある音素の先頭状態への遷移を追加する.
- 引数:
-
| wchmm | [i/o] 木構造化辞書 |
| from_node | [in] ある音素の末尾の状態 |
| to_node | [in] ある音素の先頭状態 |
| tinfo | [in] from_node の属する音素HMMの遷移確率行列 |
wchmm.c の 592 行で定義されています。
参照元 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.c の 641 行で定義されています。
参照元 wchmm_add_word().
static void wchmm_duplicate_state |
( |
WCHMM_INFO * |
wchmm, |
|
|
int |
node, |
|
|
int |
word | |
|
) |
| | [static] |
- 覚え書き:
同音語処理: 木構造化辞書においてすべての単語は独立した最終状態を持つ必要があるため, 同音語は注意深く扱う必要がある.このため,最初の木構造化辞書を構築した後, 別の単語と完全に共有された単語(同音語), あるいは別の単語の一部として 埋め込まれてしまっている単語を発見するとともに, その最終ノードを コピーして新たな単語終端ノードを作る必要がある.
単語終端状態の独立化:与えられた単語の終端ノードをコピーして, 新たにある単語の最終状態として定義する.
- 引数:
-
| wchmm | [i/o] 木構造化辞書 |
| node | [in] 同音語の終端ノード番号 |
| word | [in] 新たに登録する単語 |
wchmm.c の 696 行で定義されています。
参照元 wchmm_duplicate_leafnode().
static void wchmm_duplicate_leafnode |
( |
WCHMM_INFO * |
wchmm |
) |
[static] |
static void wchmm_add_word |
( |
WCHMM_INFO * |
wchmm, |
|
|
int |
word, |
|
|
int |
matchlen, |
|
|
int |
matchword | |
|
) |
| | [static] |
木構造化辞書に新たに単語を追加する.追加場所の情報として,現在の木構造化 辞書内で最もその単語と先頭から良くマッチする単語,およびそのマッチする長さ を指定する.
- 引数:
-
| wchmm | [i/o] 木構造化辞書 |
| word | [in] 追加する辞書単語のID |
| matchlen | [in] word と matchword の先頭からマッチする音素長 |
| matchword | [in] 既存の木構造化辞書中で word と最もマッチする単語 |
wchmm.c の 891 行で定義されています。
参照元 build_wchmm2().
static void wchmm_index_ststart |
( |
WCHMM_INFO * |
wchmm |
) |
[static] |
static void wchmm_calc_wordend_arc |
( |
WCHMM_INFO * |
wchmm |
) |
[static] |
1-gramスコアの上位 N 番目の値を求める.
- 引数:
-
| winfo | [in] 単語辞書 |
| n | [in] 求める順位 |
- 戻り値:
- 上位 N 番目の uni-gram 確率の値を返す.
wchmm.c の 1433 行で定義されています。
参照元 build_wchmm2().
与えられた単語辞書と言語モデルから木構造化辞書を構築する. この関数は bulid_wchmm() と同じ処理を行いますが, 最初に単語を音素列でソートして音素列の似た順に単語を並べるため, より高速に木構造化を行うことができる.とくにオプション指定をしない 限り,Julius/Julianではこちらが用いられる.
- 引数:
-
wchmm.c の 1682 行で定義されています。
参照元 final_fusion().
変数