[Julius Web page]
[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[julius-u:00166] Re: tmix_read fuction bug ?


奈良先端大の 李 です。

以下、かなり専門的なお話ですが・・・

> 数理システムの齋藤と申します。初めて投稿させていただきます。
> 
> 現在Julius(version 3.4)のソースをハックしているのですが、
> 
> libsent/src/hmminfo/rdhmmdef_tiedmix.c tmix_read関数内 115-116行目
> 
> >  /* set pointer to the GCODEBOOK structure  */
> >  state->b = (HTK_HMM_Dens **)thebook;
> 
> となっています。thebookはGCODEBOOK型の変数で、GCODEBOOK型は
> 
> libsent/include/sent/htk_hmm.h内で
> 
> /* Gaussian(mixture) codebook for tied-mixture model */
> typedef struct {
>   char *name;			/* codebook name */
>   int num;			/* # of mixtures in the codebook */
>   HTK_HMM_Dens **d;		/* pointer to each mixture info */
>   unsigned short id;
> } GCODEBOOK;
> 
> のように宣言されています。ですから、116行目は
> 
> >  state->b = (HTK_HMM_Dens **)thebook->d;
> 
> が適当と思うのですが、いかがでしょうか。

いえ、state->b = (HTK_HMM_Dens **)thebook; で合っています。
これは tied-mixture モデル使用時の設定です。

通常の音響モデルでは、HMM状態ごとに混合ガウス分布を定義しており、
この各状態(state)に属するガウス分布のリストが state->b に格納されます。
これに対して、tied-mixture形式の音響モデルの場合、ガウス分布集合は
状態間で共有されるため、ガウス分布のリストは状態から切り離されて
定義されます。この場合、Julius では このガウス分布リスト定義を
GCODEBOOK 構造体に格納して、各HMM状態からは、そのガウス分布リスト
へのポインタ、およびその中の各要素に対する重みパラメータ配列を
定義するようになっています。
このため、tied-mixtureモデル使用時には、
state->b には通常の混合分布リストではなく、
代わりにガウス分布リスト(GCODEBOOK)のポインタ thebook が記録されます。
thebook->d だけ記録すると、コードブックのサイズ (thebook->num) など
のデータが計算時に参照できませんので、thebook へのポインタを
保存しています。

異なるデータ型 (HTK_HMM_Dens ** と GCODEBOOK *)へのポインタを
格納しているので、プログラムスタイル的には良くないですね。
本来なら GCODEBOOK の定義を下記のようにunion で定義するのが
筋かもしれません。

typedef struct {
  char *name;			/* codebook name */
  int num;			/* # of mixtures in the codebook */
  struct union {
    HTK_HMM_Dens **d;		/* pointer to each mixture info */
    GCODEBOOK *book		/* pointer to gcodebook info */
  } mixlist;
  unsigned short id;
} GCODEBOOK;

では失礼します。
-- 
 李 晃伸 (ri@xxxxxxxxxxxxxxxxxx) 
 奈良先端科学技術大学院大学(奈良先端大)
 情報科学研究科 音情報処理学講座 助手

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: