天天看點

java lda主題模型_LDA主題模型

最近看了一下LDA的文章, 寫個小結, 了解正确與否有待驗證.

Latent Dirichlet Allocation(LDA)是三層的層次機率貝葉斯模型(生成模型), 用于處理離散資料, 比如文本資料.

1. 概念

單詞(word): 形成資料的基本單元

文檔(document): 單詞形成的有限序列

語料庫(corpus): 所有文檔的集合

2. 記号

假設一共有 \(V\) 個單詞, 則第 \(j\) 個單詞表示為:

\[w = (0,\cdots,0,1,0,\cdots, 0), \text{其中$ 1 $位于第$ j $個位置.} \]

假設一共有 \(K\) 個主題, 則第 \(i\) 個主題表示為:

\[z = (0,\cdots,0,1,0,\cdots, 0), \text{其中$ 1 $位于第$ i $個位置.} \]

3. 流程

生成一個文檔的過程如下:

從參數為 \(\xi\) 的Poisson分布中選取文檔單詞數 \(N\);

從參數為 \(\alpha\) 的Dirichlet分布中選擇一個參數 \(\theta\);

依次生成每個單詞 \(w_n\)(\(n=1,\cdots,N\)):

從參數為 \(\theta\) 的多項分布中選擇一個主題 \(z_n\);

從以 \(\beta\) 為參數的條件多項分布 \(p(w_n|z_n, \beta)\) 中選取出單詞 \(w_n\).

其中假設Dirichlet分布的維數固定為 \(K\)(即主題數固定為 \(K\)).

各參數分析如下:

參數 \(\xi\) 是一個數;

參數 \(\theta = (\theta^1, \cdots, \theta^K)\) 是一個 \(K\)維向量, 表示 \(K\) 個主題的機率分布;

參數 \(\alpha=(\alpha^1, \cdots, \alpha^K)\) 是一個 \(K\) 維向量, \(\alpha^i\) 表示 \(\theta^i\) 對應的Dirichlet分布參數;

參數 \(\beta\) 是一個 \(K\times V\) 的矩陣, \(\beta_{ij} = p(w^j=1|z^i=1)\), 即第 \(i\) 個主題中第 \(j\) 個單詞的機率.

從上面的參數分析可以看見, 之是以使用Dirichlet先驗分布, 是因為它恰到好處地, 給了我們想要的主題分布的每個參數 \(\theta^i\) 一個對應的參數 \(\alpha^i\), 并且對後面的變分推斷和參數估計有益.

給定參數 \(\alpha\) 和 \(\beta\), 可以得到 \(\theta = (\theta^1, \cdots,\theta^K)\), \(z=(z_1, \cdots, z_N)\), \(w = (w_1, \cdots, w_N)\)的聯合分布

\[p(\theta,z,w|\alpha, \beta) = p(\theta|\alpha)\prod_{n=1}^{N}p(z_n|\theta)p(w_n|z_n, \beta), \]

對 \(\theta\) 和 \(z\) 分别積分求和, 可以得到關于文檔的邊際分布

\[p(w|\alpha, \beta) = \int p(\theta|\alpha) \bigg(\prod_{n=1}^{N}\sum_{z_n} p(z_n|\theta)p(w_n|z_n, \beta) \bigg) d\theta. \]

4. 推斷

LDA的推斷問題是, 給定文檔後, 隐變量的後驗分布

\[p(\theta, z|w, \alpha, \beta) = \frac{p(\theta, z, w|\alpha, \beta)}{p(w|\alpha, \beta)}. \]

上式分母不可計算, 近似的方法包括Laplace逼近, 變分逼近, Markov鍊蒙特卡羅法等.

用上面後驗分布的解耦樣式

\[q(\theta, z|\gamma, \phi) = q(\theta|\gamma)\prod_{n=1}^{N} q(z_n|\phi_n) \]

逼近, 其中 \(\gamma=(\gamma^1, \cdots, \gamma^K)\) 為Dirichlet參數(近似 \(\alpha\)), \(\phi = (\phi_1, \cdots, \phi_N)\) 每個分量都是多項分布參數(近似 \(\beta\)). 極大似然問題變為極小化KL散度的優化問題:

\[(\gamma^{*}, \phi^{*}) = \arg\min_{(\gamma, \phi)} D(a(\theta, z)\Vert p(\theta, z|w, \alpha, \beta)), \]

可以得到

\[\begin{aligned} \phi_{ni} &\propto \beta_{iw_n} e^{E_q[\log(\theta_i)|\gamma]} \\ \gamma_i &= \alpha_i + \sum_{n=1}^{N} \phi_{ni}. \end{aligned} \]

計算僞碼為

java lda主題模型_LDA主題模型

5. 參數估計

參數應極大化對數似然

\[l(\alpha, \beta) = \sum_{d=1}^{M} \log p(w_d|\alpha, \beta), \]

但是對數似然卻難以計算. 我們可以利用變分推斷得到的下界近似對數似然, 可以在EM算法的M步, 極大化證據下界以更新變分參數 \(\gamma\) 和 \(\phi\), 而對于固定的變分參數, 又可以通過極大化證據下界更新參數 \(\alpha\) 和 \(\beta\).

EM算法:

(E步)對每個文檔, 尋找最優變分參數 \(\{\gamma_d^{*}, \phi_d^{*}: d\in D\}\), 這一步由變分推斷得到;

(M步)通過極大化證據下界更新參數 \(\alpha\) 和 \(\beta\).

其中第二步中, 參數 \(\beta\) 可以解析表示

\[\beta_{ij} \propto \sum_{d=1}^{M}\sum_{n=1}^{N_d} \phi_{dni}^{*} w_{dn}^j, \]

但參數 \(\alpha\) 則需要用Newton-Raphson方法計算.

接下來希望能夠弄清楚具體的代碼實作.