DP-MRM (Kim+ ICML12) の数式を確認中

Dirichlet Process with Mixed Random Measures (Kim+ ICML2012, 以下 DP-MRM) を実装してみようかと論文の計算式をひと通り確かめているのだが、いくつか気になることが。

k, l のサンプリング

論文の (9), (10) 式にあげられている k, l の全条件付き事後分布。


\displaystyle p(k_{jt}=k, l_{jt}=l|\boldsymbol{k}_{-jt}, \boldsymbol{l}_{-jt},\text{rest})\propto\frac{m_{jk}+\eta}{m_{j}+K\eta}\times\frac{m_{kl}}{m_k+\gamma_k}f_{kl}(x_{ji})


末尾の x_ji は x_jt の間違い、というのは前回の記事ですでに書いたとおりだが、さらに r_j を考慮にいれないといけないはず。
導出は HDP の時の導出を参考にしてもらうと簡単だが、ちょっと手抜き気味に書くと、


\displaystyle \begin{eqnarray}
p(k_{jt}=k, l_{jt}=l|\boldsymbol{k}_{-jt}, \boldsymbol{l}_{-jt},\text{rest})
&=&\frac{p(\boldsymbol{x}_{jt}|k_{jt}=k,l_{jt}=l,\cdots)p(k_{jt}=k,l_{jt}=l|\cdots)}{p(\boldsymbol{x}_{jt}|\cdots)} \\
&\propto& f_{kl}(\boldsymbol{x}_{jt})\cdot p(l_{jt}=l|k_{jt}=k,\cdots)\cdot p(k_{jt}=k|\cdots)
\end{eqnarray}


ここで p(l_{jt}=l|k_{jt}=k,\cdots) の扱いは論文の通りで OK だが、p(k_{jt}=k|\cdots) はr_j、つまり label(j) の影響を受けることが触れられていない。
したがって


p(k_{jt}=k|\boldsymbol{k}_{-jt}, \boldsymbol{l}_{-jt}, \boldsymbol{t})\propto\begin{cases}m_{jk}^{-jt}+\eta\hspace{10px}&\text{if }r_{jk}=1,\\ 0&\text{if }r_{jk}=0\end{cases}


が正しいと思われる。

perplexity

論文の 4.3 章で perplexity を求めている。


p(\boldsymbol{x}^{\text{test}})=\prod_{ji\in\boldsymbol{x}^{\text{test}}}\frac 1S\sum_{s=1}^S\sum_{k=1}^K\sum_l \theta_{jkl}^{(s)}\psi_{jkl}^{(s)},
\displaystyle \theta_{jkl}^{(s)}=\frac{n_{jkl}+\alpha\{m_{kl}/(m_{k}+\gamma_k)\}}{n_{jk}+\alpha}


ψの方は問題ないので省略。
当初、ここで求めているθは事後分布 p(\theta_{j\cdot}=\phi_l^k|\boldsymbol{t},\boldsymbol{k},\boldsymbol{l}) (の期待値)かと思ったのだが(もちろん文脈的にもそうあるべき)、右辺を見ると l で summation を取ったらほぼ 1 になる(未知の l を選ぶ確率の分小さい)ので、あれー違うのかなあとしばらく悩んでしまった。でも perplexity の式では k でも周辺化しているし……。
というわけでこのθの式は正しくはこうなるはず。


\displaystyle \theta_{jkl}^{(s)}=\frac{n_{jkl}+\alpha\{m_{kl}/(m_{k}+\gamma_k)\}}{n_{j}+|\text{label}(j)|\alpha}


|\text{label}(j)| は document j に振られたラベルの個数。\sum_k r_jk と書いてもいいかも。
論文では、DP-MRM の perplexity は Labeled LDA との比較にのみ用い、またその際のデータセットはシングルラベルに限定しているようであり、そのときには論文の式とこの新しい式は一致するので、結果自体には問題はない気はする。
が、やはりθの式はマルチラベルのことも考慮したものであるほうがいいだろう。


とっとと英語で書けって? そーねー。ま、実装済んだら。


【以下 2012/8/22 追記】
上に書いたのは間違い。まじめに DP の事後分布を評価したら、こうなった。


\displaystyle \theta_{jkl}^{(s)}=\frac{1}{n_{j}+\alpha}\left(n_{jkl}+\alpha\cdot\frac{m_{jk}+\eta}{(m_{j}+|\text{label}(j)|\eta)}\cdot\frac{m_{kl}}{m_{k}+\gamma_k}\right)\hspace{20px}  \text{if}\; r_{jk}=1


そうだよな、eta が出てこないなんて変だと思ったんだ。
ちなみにシングルラベルの場合、j に対して k が1つしか対応しないので、その k に対して n_jk=n_j, m_jk=m_j, |label(j)|=1 となり、[Kim+ 2012] のθと上の式は一致する。


【以下 2012/8/23 追記】
都合良く勘違いしていたが、よくよく確認したら、[Kim+ 2012] で perplexity を求めているのはマルチラベルの dataset に対してだった。
そうすると、論文に書いてあるθの式では確率が不当に高くなり、DP-MRM の perplexity として本来よりも良い値が出てしまう懸念があるのだが、大丈夫なのだろうか。


あと実装してて気づいたが、l についても周辺化するのだから、l=l_new に対するθ, ψも必要だ。
これをもし忘れてたら、今度は perplexity が本来の値より悪くなる。まあ上の「間違いθ」よりは影響はだいぶ小さい気はするが。


\displaystyle \theta_{jkl_{\text{new}}}=\frac{\alpha\gamma_k}{(n_{jk}+\alpha)(m_k+\gamma_k)}
\displaystyle \psi_{kl_{\text{new}}v}=\frac 1W


しっかし「実装してみて、やっと気づく」ことが多すぎる……。全部が全部実装なんてしてられないので、もうちょっと実装する前に気づければいいんだけど(苦笑)。