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

[julius-u:00133] 不具合報告


皆さま初めまして,大河と申します。

このMLにふさわしい話題か分かりませんが
julius3.3p4-multipathを使っていまして
core dumpをすることがありまして,少し原因を探ってみました。

使った音響モデルなのですが,最大64mixtureの状態共有モデルです。
PTMモデルですが<TMIX>ではなく<MIXTURE>で表記してあります。

このモデルなんですが,学習データが少なかったらしく
下のようにところどころ<mixture>タグが抜けています。
~s "TC_i2_1"
<NUMMIXES> 64
<MIXTURE> 3 5.032351e-02
~m "i3m3"
<MIXTURE> 4 1.199540e-02
~m "i3m4"
<MIXTURE> 10 8.401376e-03
~m "i3m10"
<MIXTURE> 11 4.948544e-02
~m "i3m11"
[以下略]

で,
libsent/src/phmm/calc_mix.cのなかで
  for(i=0;i<OP_calced_num;i++) {
      OP_calced_score[i] += OP_state->bweight[OP_calced_id[i]];
    }
  logprob = addlog_array(OP_calced_score, OP_calced_num);
のように全mixtureの結果をまとめているのですが,
libsent/src/phmm/gprune_none.cのなかで
  int *id = OP_calced_id;
  OP_calced_num = num;
  for(; num >= 1; num--) {
      dens = *(g++);
      if (!dens) continue;        /* skip if density = NULL */
      *(prob++) = compute_g_base(dens);
      *(id++) = i++;
    }
のように,あらかじめOP_calced_idにmixtureのあるところだけを
登録してあります。
ところがcalc_mix.cのなかではOP_calced_numの個数分だけ計算するのですが
途中に分布が抜けていようがいまいが, gprune_none.cのなかで混合数の値が
OP_calced_numに代入されています。
つまり,OP_calced_idの中身が,分布が存在しなかった個数分だけ
不定になっているのもかかわらず,そこにアクセスしますから,
セグメンテーション違反を起こすわけです。

多分,
libsent/src/phmm/gprune_none.c:58
  int *id = OP_calced_id;
- OP_calced_num = none;
  for(; num >= 1; num--) {
      dens = *(g++);
      if (!dens) continue;        /* skip if density = NULL */
      *(prob++) = compute_g_base(dens);
      *(id++) = i++;
    }
+ OP_calced_num = i;
  }
が正しいのではないかと思います。

もちろんこのバグは-gprune noneの時にしか起こりませんので
<TMIX>を使ってモデルを表現すればいいのですが…

-- 
====================================================
 大 河  雄 一 OHKAWA Yuichi (kuri@xxxxxxxxxxxxxxx)
 東北大学 大学院 教育情報学研究部・教育部
 Research and Education Divisions,
 Graduate School of Educational Informatics,
 Tohoku University, 980-8576 Sendai, JAPAN.
====================================================

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

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