最近看了一下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散度的優化問題:
可以得到
計算偽碼為
5. 引數估計
引數應極大化對數似然
但是對數似然卻難以計算. 我們可以利用變分推斷得到的下界近似對數似然, 可以在EM演算法的M步, 極大化證據下界以更新變分引數 \(\gamma\) 和 \(\phi\), 而對於固定的變分引數, 又可以通過極大化證據下界更新引數 \(\alpha\) 和 \(\beta\).
EM演算法:
- (E步)對每個文件, 尋找最優變分引數 \(\{\gamma_d^{*}, \phi_d^{*}: d\in D\}\), 這一步由變分推斷得到;
- (M步)通過極大化證據下界更新引數 \(\alpha\) 和 \(\beta\).
其中第二步中, 引數 \(\beta\) 可以解析表示
但引數 \(\alpha\) 則需要用Newton-Raphson方法計算.
接下來希望能夠弄清楚具體的程式碼實現.