博士以前

人間です

トピックモデル

最近トピックモデル、特に Latent Dirichlet Allocation (LDA) について勉強したので教科書や参考になったサイト等をまとめておきたいと思います。

トピックモデルとは

トピックモデルというのは自然言語処理の分野で使われる、文書に潜在するトピックを推定するために用いられるモデルのことです。 例えばニュース記事にはスポーツや芸能、政治や経済といったトピックが含まれています。このようなトピックを文書だけから推測することができるでしょうか?もちろん我々人間は単語の「意味」を知っているので文書を読んで意味を理解することで、その記事のトピックを言い当てることができます。しかしコンピュータには同じことはできません。

この問題をコンピュータで扱うために注目するのが単語どうしの共起です。例えばニュース記事では、「サッカー」や「野球」という単語は主にスポーツ記事に集中して現れるでしょうし、逆に政治・経済の記事で出てくるのは稀でしょう。同じトピックに属する単語は一緒に現れやすいはずです。

この単語どうしの共起を数学的にモデル化したものがトピックモデルです。その中でも2003年に提唱された Latent Dirichlet Allocation (LDA) が基本的で重要なモデルだと考えられています。 このモデルは

  • 文書中の単語の出現順は無視する

  • 各文書の各単語一つ一つが潜在トピックを持っている

  • 実際に観測された単語はそれぞれのトピックが持つ単語分布に応じて確率的に選ばれた

と考え、ベイズ推論の枠組みでトピックの推定を行います。

参考になった書籍等

トピックモデル (機械学習プロフェッショナルシリーズ)

トピックモデル (機械学習プロフェッショナルシリーズ)

この本はトピックモデルの基本的な説明や実装する際のアルゴリズムが簡潔にまとめられており最初に読む本としては良いと思います。 式変形も比較的丁寧で、補助情報付きのモデルや階層が入ったモデルなどの拡張についても簡潔にまとまっています。 ただ、簡潔であるがゆえに踏み込んだ説明が少ないです。例えば Dirichlet 分布のパラメーター推定に関してはどのパラメータを対称にとってどのパラメータを非対称に取るかなどは、初学者にとっても重要だと思いますが、詳しく書かれてはいません。

この本はトピックモデルに限らずベイズ推論一般に関する入門書です。多分この緑のシリーズの特徴なのでしょうが、言葉による説明が丁寧でどのような気持ちで理論が組み立てられているか理解するには良いと思います。僕はつい先日までトピックモデルどころかベイズ推論に関しても完全に無知だったのですが、この辺りを読んで何をやりたいのかわかるようになりました。あくまで入門書なので、進んだアルゴリズムを学ぶような本ではないです。

トピックモデルに関しては現在日本語では一番良い教科書なのではないでしょうか。あまりちゃんと読んでいないのですが、上の青い本で書かれていないことが詳しく書いてあり有用そうです。

参考になった WEB ページ

Vol.27 No.3 (2012/05) Latent Topic Model (潜在的トピックモデル) – 人工知能学会 (The Japanese Society for Artificial Intelligence)

これはググって見つけた人工知能学会のページで2012年と少し古いですが、分野の発展がリファレンスと共にまとまっていて有用でした。 特に実際に実装する際には、上の本で解説されているようなナイーブな方法だと遅いので、ここで紹介されている効率的なアルゴリズムを使うのが良いと思います。(https://mimno.infosci.cornell.edu/papers/fast-topic-model.pdf は僕も実装してみたので、いずれ解説したい…)

簡単な解説

LDAの詳しい解説は上記の教科書を読んでもらえば良いと思うのでしませんが、せっかく勉強したのでエッセンスだけメモしておきます。

LDAでやっているのは結局のところ行列分解です。 我々が持っているデータは「各文書にある単語がいくつ入っているか」というものです。 文書 dに入っている単語番号 vの単語数を N_{dv}と書きましょう。 学習に使う文書データは通常非常に多く、またそこに入っている単語の量も膨大です。 d=1,\dots,D,  v=1,\dots,Vとして、行列  N_{dv} D\times V という大きな次元を持っています。この行列を特異値分解して、特異値が大きい部分だけを見ることにすると、次のような近似的な分解が可能です

 N_{dv} \approx \sum_{k} A_{dk} B_{kv}

ここで k=1,\dots,Kで、 K D Vよりもはるかに小さい数に選ぶことができます。つまりもとの D\times Vの大きいデータを D\times K + V\times Kの小さい次元のデータで表現しようということです。  k潜在的なトピックを区別する番号と解釈すると、 A_{dk}は文書 dに入っているトピック kの量、  B_{kv}はトピック kに属する単語 vの量と思えそうな気がします。しかし、 A_{dk} B_{kv}は正であるとは限らないので、常にそのような解釈が可能であるわけではないですし、モデルを拡張するのも難しそうです。

LDAでは単語数のデータ N_{dv} を直接行列分解するのではなく、それを生成する確率分布を行列分解します。  p_{dv}を文書 dに単語 vが出現する確率とし、これを同様に

 p_{dv} \approx \sum_{k} \theta_{dk}\phi_{kv}

と分解します。これは先ほどの場合と違い、クリアーな意味付けを与えることができます。 文書 dに単語 vが出現する確率というのは、その文書にトピック kが割り当てられる確率 \theta_{dk}と、トピック kで単語 vが出現する確率 \phi_{kv}の積として表されるというわけです(ここでは \theta_{dk} \phi_{kv}が正しく確率となるような制限付きの行列分解を行うことにしています)。

LDAの目標はこの確率分布を使って、観測された文書データから逆に各単語のトピックを推測することで、上の教科書で説明されているような方法で実行することができるのです。