LDA 追試(訓練データとテストデータを分けたら)

LDA の評価結果+Collapsed Variational Bayesian の初期化における工夫 - Mi manca qualche giovedi`? のコメント欄にて、daichi さんに「テストデータを用意して、そちらのperplexityを順次評価してみるとどうなるでしょうか。LWLM等と同様、その場合には smart init が一番高い確率を与える可能性があるかも知れません」とアドバイスをいただいた。多謝。
θ_d が大変そう、とつぶやいてたら同じくコメント欄にて yossy さんから「θ_d周りの実装が少し面倒なせいか、各文書の90%の単語で学習して残り10%で評価することがよく行われます」とさらにアドバイスをいただいた。またまた多謝。
というわけで試してみた。


こちらを前回と同じように実行すると、コーパスの各ドキュメントについて、その 90% の terms を訓練に使用し、残り 10% を perplexity の計算に用いる。
スクリプトを使って前回と同様 Collapsed Gibbs sampling(CGS) と Collapsed Variational Bayesian(CVB0) それぞれについて、smart init の有無ごとに perplexity の変化を推論のイテレーションごとに記録してみた。今回はイテレーションの回数を 1000 回に増やしている。

$ python lda_test2.py -c 0:500 -i 1000 -k 50 --seed=0


なお、訓練データに含まれない単語があると初期値がそのまま残って比較しにくくなるので、document frequency の足切りを 10 にした(ドキュメント 10個以下にしか登場しない単語は除外)。そのおかげで語彙数が減り、perplexity は前回のものより全体的に大きく下がっている。ちょっと減らしすぎたかな……まあいいか。
結果はこんな感じ。横軸がイテレーションの回数、縦軸がパープレキシティ。



細かいところが読めるように、底の方を拡大したのがこちら。



前回の結果では、CVB0(ランダム初期化) が perplexity が一度下がりきった後に、そこから単調増加していたのが特徴的であったが、今回はそのようなことは基本的にはなく、大局的には微減傾向にあることがわかる。
また、CVB0 については smart init ありの方が なしより perplexity が小さくなり、daichi さんのアドバイス通りの結果になった。


ただ CGS についてはあいかわらず smart init なしのほうが perplexity が小さい。
また CVB0 との差が大きいのも少々腑に落ちない。イテレーションの回数を増やせばいつかは CGS(近似無し) が CVB0(変分近似崩し+0次項までの近似) を上回るんじゃあないか、というイメージを抱いているのだが、上のグラフを見る限りではそういうことが起こりそうな気配は感じられない。うーん。