LDA主題模型

玄夜使發表於2020-06-10

最近看了一下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. 流程

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

  1. 從引數為 \(\xi\) 的Poisson分佈中選取文件單詞數 \(N\);
  2. 從引數為 \(\alpha\) 的Dirichlet分佈中選擇一個引數 \(\theta\);
  3. 依次生成每個單詞 \(w_n\)(\(n=1,\cdots,N\)):
    1. 從引數為 \(\theta\) 的多項分佈中選擇一個主題 \(z_n\);
    2. 從以 \(\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} \]

計算偽碼為

5. 引數估計

引數應極大化對數似然

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

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

EM演算法:

  1. (E步)對每個文件, 尋找最優變分引數 \(\{\gamma_d^{*}, \phi_d^{*}: d\in D\}\), 這一步由變分推斷得到;
  2. (M步)通過極大化證據下界更新引數 \(\alpha\)\(\beta\).

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

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

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

接下來希望能夠弄清楚具體的程式碼實現.

相關文章