このNLP2006前の時期に.. という感じですが, Reversing EM を実装した
DM の階層ベイズ版を dm-0.2.tar.gz として
公開
しました。
単に自分が使うからという話もありますが(^^;), 公開するようにしないと
細かい部分を詰める気が起こらないので, という理由だったりします。
以下は cranfield についての例です。(コマンドの名前は sdm になっています。)
~/work/sdm/src% ./sdm -h
sdm, hierarchically smoothed Dirichlet Mixtures.
Copyright (C) 2006 Daichi Mochihashi, all rights reserved.
$Id: sdm.c,v 1.2 2006/02/02 16:28:51 dmochiha Exp $
usage: sdm -M mixtures [-I emmax] [-R remmax] [-E epsilon] train model
~/work/sdm/src% ./sdm cran.dat cran.model
number of documents = 1397
number of words = 5177
number of mixtures = 50
convergence criterion = 0.01 %
iteration 3/50 [REM 2+16]... PPL = 258.464 ETA: 0:36:00 (45 sec/step)
converged. [ 0:01:43]
writing model..
done.
外側のEMではハイパーパラメータだけを最適化しているので3回しか回って
いませんが, 実際の最適化は内側の2+16=18回のReversing EMで行われて
います。cranfield だとかなり速いですが, 大きなコーパスだともっと時間が
かかります。
論文
を最初に読んだ時は式が複雑に見えてびっくりしましたが,
慣れてくると全然自明に見えてくるという罠。(もちろん, それを導くのは
全然自明ではないわけですが。)