mots quotidiens. | |
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp | by hns, version 2.10-pl1. |
|
||||||||||||||||||||||||||||||||||||||||||||||
lda のページを修正。ファイルも新しくなっています。今日はちょっとつかれてるみたい なんで続きは後日..。
% make % ./lda -N 20 train modelのようにすれば使えます。 一つだけ注: 工藤君の plsi を使っていた方は, 基本的にそのまま使えますが (ということを意識して作ってある), featureのIDが 1始まり になっています (SVMlightと同じ。MATLAB版との整合性の意味もあります。)
"Note"に書いたけど, 完成してからたまたま Google で検索していて,
ほとんど同じ時期に Blei 自身がパッケージ
LDA-C
を公開しているのに気付いた。
ただ, 試してみると, かなり遅く感じる。具体的には, Cranfield 1397記事に対して,
同じ条件で(iteration の数を揃えているので, 少し速め),
lda-c% ./lda est 0.01 20 mysettings train random logs lda-c% cat logs/011.other num_topics 20 num_terms 1325 alpha 4.6451764357という感じで, どうもトピックの prior を均一な分布にして (Dir(α0,α0,..,α0) ということ)絶対値だけ推定しているような模様。最近の nonparametric Bayes の方向を考えると, これはちょっと?が付く感じ。 (Bleiがそのことを知らないはずはないので, 何か考えがあるのかも知れないけれど。)
static const double neginf = - 1.0/0;調べてみると, このコードは gcc 2.95 では通るが, gcc 3.2以降では warning を吐く 模様。
static const double neginf = - 1.0/0.0;0 は自動的に double に型変換されるので上でもいいはずなのだけど, 下のように /0.0 と double で割っている場合は自然な結果として, あるいは意図的に∞を返す のであろうのに対して, 上の場合はコーディングミスであることが多かろう ということではないか, という予想。 Minka が書いた時は gcc 2.95以前だったので, 警告にならなかったのかも。
というわけで, Cで数学的な性質上∞や不定値を返さなければいけない場合 (わかりやすい例だと, tan(x) で x = π/2 + nπ の場合など)では,
#define inf (1.0/0.0) #define nan (0.0/0.0)としておけば使えるようです。
タイトル一覧 |