Abnormally Distributed

統計解析担当のライフサイエンス研究者 -> データサイエンティスト@コンサル

LDAによるトピックモデル ①概要と確率モデル

トピックモデルはテキストデータの潜在的意味の解析に用いられる統計モデルの総称である。 ここでは一番有名なモデルである、Latent Dirichlet Allocation (LDA)について説明する。

LDAとは

文書データをLDAで処理することで、文書のトピックの分類や、トピックごとの単語の出現頻度を知ることができる。

LDAでは、単語の羅列である文章の背後に潜在的なトピック(スポーツ、政治、教育など)があると考え、トピックに基づいて文書中の単語が生成されると考える。 例えばスポーツに関する文章なら「試合」「得点」「選手」などの単語が多く、政治に関する文章なら「議会」「法案」「選挙」などの単語が多いと考えられる。 1つ注意点として、LDAは教師なし学習なので、トピックを教師データとして与えて学習する必要はない。

また、LDAでは文章における単語の順序を考慮せず、単語の出現回数のみを考える(Bag of words)。

トピックモデル とLDAの歴史

トピックモデルの起源は1990年に発表されたLatent Semantic Indexing (LSI, LSA, 潜在意味解析)にさかのぼる。
LSIでは共起行列(文書-単語行列)の特異値分解により、トピックを表す潜在変数を取得する手法。例えばK個のトピックを得たい場合は、特異値が大きいものからK個を選択すれば良い(行列の低ランク近似)。
ただし、LSIは確率モデルではなく、文書データの生成プロセスを直接的にモデリングする手法ではない。

1999年にHoffmanらが提唱したProbabilistic Latent Semantic Analysis (PLSA) は確率モデルである。
PLSAは混合モデルであり、文書ごとのトピックの確率 p(z \mid d)を混合比率、トピックごとの単語の生成確率 p(w \mid zを混合する確率分布としている。 ただし、新規の文書dについて、 p(z \sim d)を生成することができないため、完全な生成モデルとは言えない。つまり学習に用いた文書以外にはうまく適用できる保証がない。

f:id:kibya:20200516153355p:plain
PLSA

一方、LDAは完全な生成モデルであり、2003年、David Bleiらの論文で発表された。 その後、LDAについては教師ありモデル、単語の順番を考慮したモデルなどへの拡張や、最適なトピック数の推定、変分ベイズによる効率的な推論方法など様々な研究の対象となっている。

確率モデル

まず、全体のイメージを下図で確認して欲しい。

f:id:kibya:20200506141706p:plain
LDAのイメージ

次に、具体的な確率モデルを説明する。 まず、トピックの総数をKとする(この数値は自分で設定する必要がある)。 文書はK種類のトピックがトピック比率 (topic proportion) \theta_d)と呼ばれる重みをつけて混合されたものと考える。
例えば、国会で新しい教育制度の法案が可決されたことに関するニュース記事だとすると、トピック「政治」の割合0.7、トピック「教育」の割合0.2、その他のトピックの割合0.1のようになるだろう。

 \theta _ d)はK次元のベクトルであり、各成分の和は1になる。
このような値を生成する確率分布としては、ディリクレ分布(ベータ分布の多次元版)が用いられる。

 p(\theta _ d) = {\rm Dirichlet} (\theta _ d \mid \alpha)

文書中の各単語はK種類のトピックのいずれかから生成されると考える。 まず、文書dにおけるi番目の単語 w _ {d,i}がどのトピックから生成されたかを示すトピック割り当て (topic assignment) z _ {d, i}を導入する。  z _ {d, i}はK次元のベクトルであり、いずれか1つの要素が1、他の要素は0である。

このような値を生成する確率分布としては、カテゴリ分布(ベルヌーイ分布の多次元版)が用いられる。

 p(z _ {d, i} \mid \theta _ d) = {\rm Categorical} (z _ {d, i} \mid \theta _ d)

次に、単語 w _ {d,i} z_ {d, i}で指定されたトピックから生成される。 ただし、単語 w _ {d,i}はいわゆるOne-of-K表現したベクトルである。すなわち、語彙の総数をVとすると  w _ {d,i}は長さVのベクトルであり、該当する単語のインデックスのみ1、他は0となっている。

LDAでは、単語の出現確率がトピックにより異なると仮定しており、トピックkにおける単語の出現比率はV次元ベクトル \beta _ kで表される。  \beta _ kの各成分は0から1の範囲の値であり、成分の和は1になる。
そこで、 w _ {d,i}もカテゴリ分布により生成されると考えることができる。この際、 z_ {d, i}のk番目の成分が1のとき、単語  w _ {d,i}はトピックkから生成されていることに注意する。

 p(w _ {d,i} \mid z _ {d, i}, \boldsymbol{\beta}) = \prod _ {k=1} ^{K} {\rm Categorical} (z _ {d, i} \mid \beta _ k) ^ {z _ {d, i, k}}

ただし、 \boldsymbol{\beta} = \{ \beta_1, \beta_2, \dots, \beta_k \} としている。

また、 \beta _ kの事前分布としては、ディリクレ分布を用いる。
 p(\beta _ k) = {\rm Dirichlet} (\beta _ k \mid \eta)

グラフィカルモデルで示すと、下記の通り。

f:id:kibya:20200506092410p:plain
LDAのグラフィカルモデル

実践

scikit-learnのLatentDirichletAllocationやgensimのLdaModelを使うと簡単に実装することができる。
長くなってしまうので、この記事はここまで。 Tensorflow Probabilityを使ったベイズ推論について、別の記事で説明する。

参考文献

  1. “Latent Dirichlet Allocation” D. Blei, A. Ng, M. Jordan, 2003 (http://www.jmlr.org/papers/v3/blei03a)
    LDAを提唱した元論文。

  2. Chapter5でLDAの変分ベイズによる推論方法を解説している。

  3. "Indexing by latent semantic analysis" S. Deerwester, S. Dumais, T. Landauer, G. Furnas, and R. Harshman, 1990 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.108.8490 LSI (LSA)の元論文。

  4. "Probabilistic latent semantic indexing" T. Hoffman, 1999(https://dl.acm.org/doi/10.1145/312624.312649) PLSIの元論文。

  5. PLSAの仕組みとその有用性についての記事 www2.deloitte.com