1. 程式人生 > >再看LDA主題模型

再看LDA主題模型

之前學習文字挖掘時已經寫過一篇關於主題模型的部落格《文字建模之Unigram Model,PLSA與LDA》,前幾天小組討論主題模型時,又重新理解了一遍LDA,有了更深刻的認識,特記錄一下。

1、Unigram Model

Unigram model是最簡單的文字模型,其直接將文字的生成過程看作是從一個詞彙表中重複取詞的過程。因此只要知道每個詞的產生概率,就能計算出一篇文件的產生概率。假設一篇文件由NN個詞w1,w2,,wnw_1,w_2,\dots,w_n組成,如下圖所示:

NN個詞必定來自於一個詞彙表v1,v2, ,vV

v_1,v_2,\cdots,v_V,其中VV是詞彙表大小,viv_i是詞彙表中某一個詞,上圖中紅、黃、藍、綠代表文件中該詞所對應的詞彙表中詞。文件中每個詞的產生相互獨立(不考慮詞產生過程中的相互影響),因此在知道詞彙表中每個詞的產生概率p=(pv1,pv2,,pvV)\vec{p}=(p_{v_1},p_{v_2},\dots,p_{v_V}),和詞彙表中每個詞的出現次數n=(nv1,nv2,,nvV)\vec{n}=(n_{v_1},n_{v_2},\dots,n_{v_V}),同時nv1+nv2++nvV=Nn_{v_1}+n_{v_2}+\dots+n_{v_V}=Nn\vec{n}的發生概率滿足多項分佈: p(n)=Multi(np,N)=(Nn)i=1Vpvinvi p(\vec{n})=Multi(\vec{n}|\vec{p},N)=\begin{pmatrix} N \\ \vec{n} \end{pmatrix}\prod_{i=1}^Vp_{v_i}^{n_{v_i}}

一篇文件相當於詞彙表中V

V各詞nn次取值實驗中的一種,因此一篇文件的產生概率可以寫成: p(w)=i=1Vpvinvi p(\vec{w})=\prod_{i=1}^Vp_{v_i}^{n_{v_i}}

語料中MM篇文件的生成過程相互獨立,所以語料的產生概率為: p(W)=m=1Mi=1Vpvinmvi=i=1pvinvi p(W)=\prod_{m=1}^M\prod_{i=1}^Vp_{v_i}^{n_{mv_i}}=\prod_{i=1}p_{v_i}^{n_{v_i}}

此處,nmvin_{mv_i}表示詞彙表中詞viv_i在第mm篇文件中的出現次數,nvin_{v_i}表示viv_i在整個語料庫中的出現次數。現在,只剩下最後一個問題,怎麼通過觀測到的語料去估計詞彙表中每個詞的產生概率p\vec{p},按照頻率學派和貝葉斯學派的觀點,存在兩種計算方法。

頻率學派

頻率學派認為,詞彙表中每個詞的產生概率p\vec{p}雖然未知,但是其取值是固定的,是取值空間中的一個定值。 可以採用最大似然估計,於是引數p\vec{p}的估計值是 p^vi=nviN \hat{p}_{v_i}=\frac{n_{v_i}}{N}

其圖模型是

圖中方框表示重複此過程,灰色圓圈的w表示可觀測變數,N表示一篇文件中包含N個單詞,M表示生成M篇文件。

貝葉斯學派

貝葉斯學派認為,詞彙表中每個詞的產生概率p\vec{p}不僅未知,且其取值也未定,取值空間中的每種情況都有可能取到,也就是說,分佈p\vec{p}也是從一個概率分佈中取出來的,我們稱這個概率分佈為p\vec{p}的先驗分佈。 因為每一個分佈p\vec{p}都有可能產生我們的語料,我們不知道語料究竟是由哪一個p\vec{p}產生。假設p\vec{p}被選中的概率為p(p)p(\vec{p}),那麼此時語料的產生概率為: p(W)=p(Wp)p(p)dp p(W)=\int p(W|\vec{p})p(\vec{p})d\vec{p}

上面的推導中,我們已經知道p(n)p(\vec{n})符合多項分佈,p(W)p(W)n\vec{n}的一種情況,因此也可以近似認為p(W)p(W)符合多項分佈,所以先驗分佈p(p)p(\vec{p})的一個較比好的選擇是多項分佈的共軛先驗分佈,即Dirichlet分佈Dir(pα)Dir(\vec{p}|\vec{\alpha})。此時,語料的產生概率為: p(Wα)=p(Wp)p(pα)dp=i=1VpvinviDir(pα)dp=i=1Vpvinvi1Δ(α)i=1Vpviαi1dp=1Δ(α)i=1Vpviαi+nvi1dp=Δ(n+α)Δ(α) \begin{aligned} p(W|\vec{\alpha}) &= \int p(W|\vec{p})p(\vec{p}|\vec{\alpha})d\vec{p}\\ &= \int\prod_{i=1}^Vp_{v_i}^{n_{v_i}}Dir(\vec{p}|\vec{\alpha})d\vec{p} \\ &= \int\prod_{i=1}^Vp_{v_i}^{n_{v_i}}\frac{1}{\Delta(\vec{\alpha})}\prod_{i=1}^Vp_{v_i}^{\alpha_i-1}d\vec{p} \\ &= \frac{1}{\Delta(\vec{\alpha})}\int\prod_{i=1}^Vp_{v_i}^{\alpha_i+n_{v_i}-1}d\vec{p} \\ &= \frac{\Delta(\vec{n}+\vec{\alpha})}{\Delta(\vec{\alpha})} \end{aligned}