LDA(Latent Dirichlet Allocation)のちょっとしたメモ

変分ベイズの復習のためにLDAを再実装しようかと思っている。記憶の整理を兼ねて概要をメモしておく。一応初心者向けに書いたつもり。

Latent Dirichlet Allocation D.M.Blei et al


LDAは文書集合Dに関する分布をモデリングしていて、αとβというふたつのパラメータを持っている。文書集合Dは個々の文書wで構成されている。つまり

P(D;α,β) = ΠP(w;α,β)

というかたち。ここで与えられた文書集合Dの尤度を最大化するようなパラメータを求めたい。
LDAは文書を構成する単語はいくつかのトピックに属していると考える。このトピックの種類は事前に与えてあげる必要がある。以下ではトピック数をkとしておく。
パラメータαはサイズkのベクトルでトピックのもともとの出やすさを表す。今回はすべてのトピックを等価に扱うことにする。つまり

α = (1, 1, ..., 1)

という感じ。
パラメータβはk×Vの行列(Vは単語の種類)。各トピックごとの単語の出やすさを表している。つまり文書集合Dが与えられたときに、尤度を最大化するβを求めることで文書集合Dがもつトピックと、それぞれのトピックで出やすい単語がわかる。
たとえば

     カレー, 六本木, オフィス
==============================
k=1|  0.6  ,  0.3  ,   0.1
k=2|  0.1  ,  0.4  ,   0.5

というβ行列が得られたらk=1はランチについてのトピックで、k=2は仕事についてのトピックかなーということがわかる。
↑はトピックごとの言語モデルと考えることができる。学習時に使ったものと別の文書に対して各トピックごとのモデルで尤度を計算して、その文書が尤度が最大のトピックに属していると考えると入力文書のトピック推定のようなことができる。
というわけで、かなりふわっとした説明を書いた。潜在変数とかがっつり無視してるので怒られるかもしれない。けど私が最初にLDAを知ったときは今回書いたようなそもそも何がうれしいのレベルのことが分かっていなかったので、こういう記事も一つくらいあってもいいんじゃないかと思った。