Pseudo HMM セットの作成と管理. [詳細]
#include <sent/stddefs.h>
#include <sent/htk_param.h>
#include <sent/htk_hmm.h>
#define | CD_STATE_SET_STEP 10 |
static void | cdset_init (HTK_HMM_INFO *hmminfo) |
static CD_Set * | cdset_new () |
CD_Set * | cdset_lookup (HTK_HMM_INFO *hmminfo, char *cdstr) |
CD_Set * | lcdset_lookup_by_hmmname (HTK_HMM_INFO *hmminfo, char *hmmname) |
CD_Set * | rcdset_lookup_by_hmmname (HTK_HMM_INFO *hmminfo, char *hmmname) |
static void | put_cdset (void *ptr) |
void | put_all_cdinfo (HTK_HMM_INFO *hmminfo) |
boolean | regist_cdset (APATNODE **root, HTK_HMM_Data *d, char *cdname) |
boolean | remove_cdset (HTK_HMM_INFO *hmminfo, char *cdname) |
boolean | make_cdset (HTK_HMM_INFO *hmminfo) |
static void | callback_free_lcdset_content (void *arg) |
void | free_cdset (APATNODE **root) |
Pseudo HMM セットの作成と管理.
"Pseudo %HMM" は,与えられた音響モデルやHMMリストで定義されていない バイフォンやモノフォンについて,それを共通コンテキストとする トライフォン集合で代替するもので,主に第1パスの単語間トライフォン 計算に用いられます.
Julius は HMM 定義ファイルおよびHMMリストを読み込んだあと, まず全ての許され得るモノフォンおよびバイフォンのリストを生成します. そしてれぞれについて,それを共通のコンテキストとする トライフォンのリストを作成し,そのリスト中のトライフォンの各状態を マージしたもの (CD_State_Set) を要素とする構造体 CD_Set を HTKのHMM定義とは別に新たに生成します.
例えば,"a-k" という名前の pseudo HMM は,"a-k+e", "a-k+b" などの トライフォン状態の集合体となります.また "k" というモノフォンの pseudo HMM は,ベース音素が "k" である全てのトライフォンの状態の集合となります. この生成された pseudo HMM は全て HTK_HMM_INFO 内の cdset_info に 保存されます.
さらに,HMM論理名から実体を探すインデックス木 (logical_root) に, この pseudo HMM のリストが追加されます.これにより,HMM定義ファイル およびHMMリストファイルのどちらにも定義されていないバイフォンや モノフォンについては,この pseudo HMM が代用されるようになります. バイフォンやモノフォンが HMM 定義ファイルや HMMリストファイルのどちらかで 明示的に指定されていれば,そちらが優先されます.
cdset.c で定義されています。