トピックモデル
仕事で使うことになりそうだったので,トピックモデルについて復習してみた.結構戸惑うところがあったのでメモ.基本的には,「文書dは確率変数ではない」と解釈しておくと,後々楽な気がする.
wd=(wd1,…,wdNd)を文書dを表す長さNdの単語列とする.wdの従う確率分布の密度関数をpdとする.いま,{wd}d=1Dという文書集合が与えられたとする.ここで,注意しなければならないのは,wdとwd′は独立だと仮定するが,同一の分布には従っているとは仮定しない.つまり,i.i.d.は仮定しない.そのことに注意すると,
p({wd}d=1D)=d=1∏Dpd(wd)
となる.
一方で,wdnとwdn′に対してはi.i.d.を仮定する.よって,任意のn∈{1,…,Nd}に対して,wdnの従う確率分布の密度関数を,qdとする.このことに注意すると,
pd(wd)=n=1∏Ndqd(wdn)
と表すことができる.まとめると,文書集合の尤度は以下のようにかける.
p({wd}d=1D)=d=1∏Dn=1∏Ndqd(wdn)
ここで,単語はトピックk∈{1,…,K}に基づいて生成されると仮定すると,上の尤度は以下のように表される.
p({wd}d=1D)=d=1∏Dn=1∏Ndk=1∑Kqd(wdn∣k)qd(k)
トピックに関して周辺化を行っただけ.ここまでくればqd(⋅∣⋅)やqd(⋅)をどのようにモデル化するかは自由である.
僕の読んでいる本(機械学習プロフェッショナルシリーズのトピックモデル)では,qd(v∣k)=ϕkv,qd(k)=θdkとしていた.注意しなければならないのは,qd(v∣k)=ϕkvの部分で,単語はトピックのみに依存し,文書には依存しないモデルを使っていること.
本とかでは,いろんな仮定が省略されて書かれているので,今回はそれを明確に記述するために,かなりめんどくさい定式化をしてみた.
Written with StackEdit.
0 件のコメント:
コメントを投稿