LDA主題模型
最近看了一下LDA的文章, 寫個小結, 理解正確與否有待驗證.
Latent Dirichlet Allocation(LDA)是三層的層次概率貝葉斯模型(生成模型), 用於處理離散數據, 比如文本數據.
1. 概念
- 單詞(word): 形成數據的基本單元
- 文檔(document): 單詞形成的有限序列
- 語料庫(corpus): 所有文檔的集合
2. 記號
假設一共有 \(V\) 個單詞, 則第 \(j\) 個單詞表示為:
\]
假設一共有 \(K\) 個主題, 則第 \(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)\)的聯合分布
\]
對 \(\theta\) 和 \(z\) 分別積分求和, 可以得到關於文檔的邊際分布
\]
4. 推斷
LDA的推斷問題是, 給定文檔後, 隱變數的後驗分布
\]
上式分母不可計算, 近似的方法包括Laplace逼近, 變分逼近, Markov鏈蒙特卡羅法等.
用上面後驗分布的解耦樣式
\]
逼近, 其中 \(\gamma=(\gamma^1, \cdots, \gamma^K)\) 為Dirichlet參數(近似 \(\alpha\)), \(\phi = (\phi_1, \cdots, \phi_N)\) 每個分量都是多項分布參數(近似 \(\beta\)). 極大似然問題變為極小化KL散度的優化問題:
\]
可以得到
\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}
\]
計算偽碼為
5. 參數估計
參數應極大化對數似然
\]
但是對數似然卻難以計算. 我們可以利用變分推斷得到的下界近似對數似然, 可以在EM演算法的M步, 極大化證據下界以更新變分參數 \(\gamma\) 和 \(\phi\), 而對於固定的變分參數, 又可以通過極大化證據下界更新參數 \(\alpha\) 和 \(\beta\).
EM演算法:
- (E步)對每個文檔, 尋找最優變分參數 \(\{\gamma_d^{*}, \phi_d^{*}: d\in D\}\), 這一步由變分推斷得到;
- (M步)通過極大化證據下界更新參數 \(\alpha\) 和 \(\beta\).
其中第二步中, 參數 \(\beta\) 可以解析表示
\]
但參數 \(\alpha\) 則需要用Newton-Raphson方法計算.
接下來希望能夠弄清楚具體的程式碼實現.