前言
本篇博文将詳細講解LDA主題模型,從最底層數學推導的角度來詳細講解,隻想了解LDA的讀者,可以隻看第一小節簡介即可。PLSA和LDA非常相似,PLSA也是主題模型方面非常重要的一個模型,本篇也會有的放矢的講解此模型。如果讀者閱讀起來比較吃力,可以定義一個菲波那切數列,第 f(n) = f(n-1) + f(n-2) 天再閱讀一次,直到這個知識點收斂。如果讀者發現文章中的錯誤或者有改進之處,歡迎交流。
1. 簡介
在機器學習領域,LDA是兩個常用模型的簡稱:Linear Discriminant Analysis 和 Latent Dirichlet Allocation。本文的LDA僅指代Latent Dirichlet Allocation. LDA 在主題模型中占有非常重要的地位,常用來文本分類。
LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,用來推測文檔的主題分布。它可以将文檔集中每篇文檔的主題以機率分布的形式給出,進而通過分析一些文檔抽取出它們的主題分布後,便可以根據主題分布進行主題聚類或文本分類。
2. 先驗知識
LDA 模型涉及很多數學知識,這也許是LDA晦澀難懂的主要原因。本小節主要介紹LDA中涉及的數學知識。數學功底比較好的讀者可以直接跳過本小節。
LDA涉及到的先驗知識有:二項分布、Gamma函數、Beta分布、多項分布、Dirichlet分布、馬爾科夫鍊、MCMC、Gibbs Sampling、EM算法等。限于篇幅,本文僅會有的放矢的介紹部分概念,不會每個概念都仔細介紹,亦不會涉及到每個概念的數學公式推導。如果每個概念都詳細介紹,估計都可以寫一本百頁的書了。如果你對LDA的了解能達到如數家珍、信手拈來的程度,那麼恭喜你已經掌握了從事機器學習方面的紮實數學基礎。想進一步了解底層的數學公式推導過程,可以參考《數學全書》等資料。
2.1 詞袋模型
LDA 采用詞袋模型。所謂詞袋模型,是将一篇文檔,我們僅考慮一個詞彙是否出現,而不考慮其出現的順序。在詞袋模型中,“我喜歡你”和“你喜歡我”是等價的。與詞袋模型相反的一個模型是n-gram,n-gram考慮了詞彙出現的先後順序。有興趣的讀者可以參考其他書籍。
2.2 二項分布
二項分布是N重伯努利分布,即為X ~ B(n, p). 機率密度公式為:
P(K=k)=(nk)pk(1−p)n−k
2.3 多項分布
多項分布,是二項分布擴充到多元的情況. 多項分布是指單次試驗中的随機變量的取值不再是0-1的,而是有多種離散值可能(1,2,3…,k).機率密度函數為:
P(x1,x2,...,xk;n,p1,p2,...,pk)=n!x1!...xk!p1x1...pkxk
2.4 Gamma函數
Gamma函數的定義:
Γ(x)=∫∞0tx−1e−tdt
分部積分後,可以發現Gamma函數如有這樣的性質:
Γ(x+1)=xΓ(x)
Gamma函數可以看成是階乘在實數集上的延拓,具有如下性質:
Γ(n)=(n−1)!
2.5 Beta分布
Beta分布的定義:對于參數 α>0,β>0 , 取值範圍為[0, 1]的随機變量x的機率密度函數為:
f(x;α,β)=1B(α,β)xα−1(1−x)β−1
其中,
1B(α,β)=Γ(α+β)Γ(α)Γ(β)
2.6 共轭先驗分布
在貝葉斯機率理論中,如果後驗機率 P(θ∣x) 和先驗機率 p(θ) 滿足同樣的分布律,那麼,先驗分布和後驗分布被叫做共轭分布,同時,先驗分布叫做似然函數的共轭先驗分布。
P(θ∣x)=P(θ,x)P(x)
Beta分布是二項式分布的共轭先驗分布,而狄利克雷(Dirichlet)分布是多項式分布的共轭分布。
共轭的意思是,以Beta分布和二項式分布為例,資料符合二項分布的時候,參數的先驗分布和後驗分布都能保持Beta分布的形式,這種形式不變的好處是,我們能夠在先驗分布中賦予參數很明确的實體意義,這個實體意義可以延續到後續分布中進行解釋,同時從先驗變換到後驗過程中從資料中補充的知識也容易有實體解釋。
2.7 Dirichlet分布
Dirichlet的機率密度函數為:
f(x1,x2,...,xk;α1,α2,...,αk)=1B(α)∏i=1kxiαi−1
其中,
B(α)=∏ki=1Γ(αi)Γ(∑ki=1αi),∑i=1kxi=1
根據Beta分布、二項分布、Dirichlet分布、多項式分布的公式,我們可以驗證上一小節中的結論 – Beta分布是二項式分布的共轭先驗分布,而狄利克雷(Dirichlet)分布是多項式分布的共轭分布。
2.8 Beta / Dirichlet 分布的一個性質
如果 p∼Beta(t∣α,β) ,則
E(p)=∫10t∗Beta(t∣α,β)dt=∫10t∗Γ(α+β)Γ(α)Γ(β)t(α−1)(1−t)β−1dt=Γ(α+β)Γ(α)Γ(β)∫10tα(1−t)β−1dt
上式右邊的積分對應到機率分布 Beta(t∣α+1,β) , 對于這個分布,有
∫10Γ(α+β+1)Γ(α+1)Γ(β)tα(1−t)β−1dt=1
把上式帶入E(p)的計算式,得到
E(p)=Γ(α+β)Γ(α)Γ(β)⋅Γ(α+1)Γ(β)Γ(α+β+1)=Γ(α+β)Γ(α+β+1)⋅Γ(α+1)Γ(α)=αα+β
這說明,對于對于Beta分布的随機變量,其均值可以用 αα+β 來估計。Dirichlet分布也有類似的結論,如果 p⃗ ∼Dir(t⃗ ∣α⃗ ) , 同樣可以證明:
E(p)=(α1∑Ki=1αi,α1∑Ki=2αi,⋯,αK∑Ki=1αi)
這兩個結論非常重要,後面的LDA數學推導過程會使用這個結論。
2.9 MCMC 和 Gibbs Sampling
在現實應用中,我們很多時候很難精确求出精确的機率分布,常常采用近似推斷方法。近似推斷方法大緻可分為兩大類:第一類是采樣(Sampling), 通過使用随機化方法完成近似;第二類是使用确定性近似完成近似推斷,典型代表為變分推斷(variational inference).
在很多任務中,我們關心某些機率分布并非因為對這些機率分布本身感興趣,而是要基于他們計算某些期望,并且還可能進一步基于這些期望做出決策。采樣法正式基于這個思路。具體來說,嘉定我們的目标是計算函數f(x)在機率密度函數p(x)下的期望
Ep[f]=∫f(x)p(x)dx
則可根據p(x)抽取一組樣本 x1,x2,⋯,xN ,然後計算f(x)在這些樣本上的均值
f̂ =1N∑i=1Nf(xi)
以此來近似目标期望E[f]。若樣本 x1,x2,⋯,xN 獨立,基于大數定律,這種通過大量采樣的辦法就能獲得較高的近似精度。可是,問題的關鍵是如何采樣?對機率圖模型來說,就是如何高效地基于圖模型所描述的機率分布來擷取樣本。機率圖模型中最常用的采樣技術是馬爾可夫鍊臉蒙特卡羅(Markov chain Monte Carlo, MCMC). 給定連續變量 x∈X 的機率密度函數p(x), x在區間A中的機率可計算為
P(A)=∫Ap(x)dx
若有函數 f:X↦R , 則可計算f(x)的期望
P(f)=Ep[f(X)]=∫xf(x)p(x)dx
若x不是單變量而是一個高維多元變量x, 且服從一個非常複雜的分布,則對上式求積分通常很困難。為此,MCMC先構造出服從p分布的獨立同分布随機變量 x1,x2,⋯,xN , 再得到上式的無偏估計
p̃ (f)=1N∑i=1Nf(xi)
然而,若機率密度函數p(x)很複雜,則構造服從p分布的獨立同分布樣本也很困難。MCMC方法的關鍵在于通過構造“平穩分布為p的馬爾可夫鍊”來産生樣本:若馬爾科夫鍊運作時間足夠長,即收斂到平穩狀态,則此時産出的樣本X近似服從分布p.如何判斷馬爾科夫鍊到達平穩狀态呢?假定平穩馬爾科夫鍊T的狀态轉移機率(即從狀态X轉移到狀态 x′ 的機率)為 T(x′∣x) , t時刻狀态的分布為p(x^t), 則若在某個時刻馬爾科夫鍊滿足平穩條件
p(xt)T(xt−1∣xt)=p(xt−1)T(xt∣xt−1)
則p(x是馬爾科夫鍊的平穩分布,且馬爾科夫鍊在滿足該條件時已收斂到平穩條件。也就是說,MCMC方法先設法構造一條馬爾科夫鍊,使其收斂至平穩分布恰為待估計參數的後驗分布,然後通過這條馬爾科夫鍊來産生符合後驗分布的樣本,并基于這些樣本來進行估計。這裡馬爾科夫鍊轉移機率的構造至關重要,不同的構造方法将産生不同的MCMC算法。
Metropolis-Hastings(簡稱MH)算法是MCMC的重要代表。它基于“拒絕采樣”(reject sampling)來逼近平穩分布p。算法如下:
- 輸入:先驗機率 Q(x∗∣xt−1)
- 過程:
- 1. 初始化x^0;
- 2. for t = 1, 2, … do
- 3. 根據 Q(x∗∣xt−1) 采樣出候選樣本 x∗
- 4. 根據均勻分布從(0, 1)範圍内采樣出門檻值u;
- 5. if u ≤A(x∗∣xt−1)then
- 6. xt=x∗
- 7. else
- 8. xt=xt−1
- 9. end if
- 10. enf for
- 11. return x1,x2,...
-
輸出:采樣出的一個樣本序列 x1,x2,...
于是, 為了達到平穩狀态,隻需将接受率設定為
A(x∗∣xt−1)=min(1,p(x∗Q(xt−1∣x∗))p(xt−1)Q(x∗∣xt−1))
吉布斯采樣(Gibbs sampling)有時被視為MH算法的特例,它也使用馬爾科夫鍊讀取樣本,而該馬爾科夫鍊的平穩分布也是采用采樣的目标分布p(x).具體來說,假定 x=x1,x2,⋯,xN , 目标分布為p(x), 在初始化x的取值後,通過循環執行以下步驟來完成采樣:
- 1. 随機或以某個次序選取某變量 xi ;
- 2. 根據x中除 xi 外的變量的現有取值,計算條件機率 p(xi∣Xi) , 其中 Xi=x1,x2,⋯,xi−1,xi+1,⋯,xN ;
- 3. 根據 p(xi∣Xi) 對變量 xi 采樣,用采樣值代替原值.
3. 文本模組化
一篇文檔,可以看成是一組有序的詞的序列 d=(ω1,ω2,⋯,ωn) . 從統計學角度來看,文檔的生成可以看成是上帝抛擲骰子生成的結果,每一次抛擲骰子都生成一個詞彙,抛擲N詞生成一篇文檔。在統計文本模組化中,我們希望猜測出上帝是如何玩這個遊戲的,這會涉及到兩個最核心的問題:
- 上帝都有什麼樣的骰子;
- 上帝是如何抛擲這些骰子的;
第一個問題就是表示模型中都有哪些參數,骰子的每一個面的機率都對應于模型中的參數;第二個問題就表示遊戲規則是什麼,上帝可能有各種不同類型的骰子,上帝可以按照一定的規則抛擲這些骰子進而産生詞序列。
3.1 Unigram Model
在Unigram Model中,我們采用詞袋模型,假設了文檔之間互相獨立,文檔中的詞彙之間互相獨立。假設我們的詞典中一共有 V 個詞 ν1,ν2,⋯,νV ,那麼最簡單的 Unigram Model 就是認為上帝是按照如下的遊戲規則産生文本的。
- 1. 上帝隻有一個骰子,這個骰子有V面,每個面對應一個詞,各個面的機率不一;
- 2. 每抛擲一次骰子,抛出的面就對應的産生一個詞;如果一篇文檔中N個詞,就獨立的抛擲n次骰子産生n個詞;
3.1.1 頻率派視角
對于一個骰子,記各個面的機率為 p⃗ =(p1,p2,⋯,pV) , 每生成一個詞彙都可以看做一次多項式分布,記為 ω∼Mult(ω∣p⃗ ) 。一篇文檔 d=ω⃗ =(ω1,ω2,⋯,ωn) , 其生成機率是
p(ω⃗ )=p(ω1,ω2,⋯,ωn)=p(ω1)p(ω2)⋯p(ωn)
文檔之間,我們認為是獨立的,對于一個語料庫,其機率為: W=(ω⃗ 1,ω⃗ 2,⋯,ω⃗ m) 。
假設語料中總的詞頻是N,記每個詞 ωi 的頻率為 ni , 那麼 n⃗ =(n1,n2,⋯,nV) , n⃗ 服從多項式分布
p(n⃗ )=Mult(n⃗ ∣p⃗ ,N)=(Nn⃗ )∏k=1Vpnkk
整個語料庫的機率為
p(W)=p(ω⃗ 1)p(ω⃗ 2)⋯p(ω⃗ m)=∏k=1Vpnkk
此時,我們需要估計模型中的參數 p⃗ ,也就是詞彙骰子中每個面的機率是多大,按照頻率派的觀點,使用極大似然估計最大化p(W), 于是參數 pi 的估計值為
p̂ i=niN
3.1.2 貝葉斯派視角
對于以上模型,貝葉斯統計學派的統計學家會有不同意見,他們會很挑剔的批評隻假設上帝擁有唯一一個固定的骰子是不合理的。在貝葉斯學派看來,一切參數都是随機變量,以上模型中的骰子 p⃗ 不是唯一固定的,它也是一個随機變量。是以按照貝葉斯學派的觀點,上帝是按照以下的過程在玩遊戲的:
- 1. 現有一個裝有無窮多個骰子的壇子,裡面裝有各式各樣的骰子,每個骰子有V個面;
- 2. 現從壇子中抽取一個骰子出來,然後使用這個骰子不斷抛擲,直到産生語料庫中的所有詞彙
壇子中的骰子無限多,有些類型的骰子數量多,有些少。從機率分布角度看,壇子裡面的骰子 p⃗ 服從一個機率分布 p(p⃗ ) , 這個分布稱為參數 p⃗ 的先驗分布。在此視角下,我們并不知道到底用了哪個骰子 p⃗ ,每個骰子都可能被使用,其機率由先驗分布 p(p⃗ ) 來決定。對每個具體的骰子,由該骰子産生語料庫的機率為 p(W∣p⃗ ) , 故産生語料庫的機率就是對每一個骰子 p⃗ 上産生語料庫進行積分求和
p(W)=∫p(W∣p⃗ )p(p⃗ )dp⃗
先驗機率有很多選擇,但我們注意到 p(n⃗ )=Mult(n⃗ ∣p⃗ ,N) . 我們知道多項式分布和狄利克雷分布是共轭分布,是以一個比較好的選擇是采用狄利克雷分布
Dir(p⃗ ∣α⃗ )=1Δ(α⃗ )∏k=1Vpαk−1k,α⃗ =(α1,⋯,αV)
此處, Δ(α⃗ )就是歸一化因子Dir(α⃗ ) , 即
Δ(α⃗ )=∫∏k=1Vpαk−1kdp⃗
由多項式分布和狄利克雷分布是共轭分布,可得:
p(p⃗ ∣W,α⃗ )=Dir(p⃗ ∣n⃗ +α⃗ )=1Δ(n⃗ +α⃗ )∏k=1Vpnk+αk−1kdp⃗
此時,我們如何估計參數 p⃗ 呢?根據上式,我們已經知道了其後驗分布,是以合理的方式是使用後驗分布的極大值點,或者是參數在後驗分布下的平均值。這裡,我們取平均值作為參數的估計值。根據第二小節Dirichlet分布中的内容,可以得到:
E(p⃗ )=(n1+α1∑Vi=1(ni+αi),n2+α2∑Vi=1(ni+αi),⋯,nV+αV∑Vi=1(ni+αi))
對于每一個 pi , 我們使用下面的式子進行估計
p̂ i=ni+αi∑Vi=1(ni+αi)
αi 在 Dirichlet 分布中的實體意義是事件的先驗的僞計數,上式表達的是:每個參數的估計值是其對應事件的先驗的僞計數和資料中的計數的和在整體計數中的比例。由此,我們可以計算出産生語料庫的機率為:
p(W∣α)=∫p(W∣α)p(p⃗ ∣α)dp⃗ =∫∏k=1VpnkkDir(p⃗ ∣α⃗ )dp⃗ =∫∏k=1Vpnkk1Δ(α⃗ )∏k=1Vpαk−1kdp⃗ =1Δ(α⃗ )∫∏k=1Vpnkk∏k=1Vpnk+αk−1kdp⃗ =Δ(n⃗ +α⃗ )Δ(α⃗ )
3.2 PLSA模型
Unigram Model模型中,沒有考慮主題詞這個概念。我們人寫文章時,寫的文章都是關于某一個主題的,不是滿天胡亂的寫,比如一個财經記者寫一篇報道,那麼這篇文章大部分都是關于财經主題的,當然,也有很少一部分詞彙會涉及到其他主題。是以,PLSA認為生成一篇文檔的生成過程如下:
- 1. 現有兩種類型的骰子,一種是doc-topic骰子,每個doc-topic骰子有K個面,每個面一個topic的編号;一種是topic-word骰子,每個topic-word骰子有V個面,每個面對應一個詞;
- 2. 現有K個topic-word骰子,每個骰子有一個編号,編号從1到K;
- 3. 生成每篇文檔之前,先為這篇文章制造一個特定的doc-topic骰子,重複如下過程生成文檔中的詞:
- 3.1 投擲這個doc-topic骰子,得到一個topic編号z;
- 3.2 選擇K個topic-word骰子中編号為z的那個,投擲這個骰子,得到一個詞;
PLSA中,也是采用詞袋模型,文檔和文檔之間是獨立可交換的,同一個文檔内的詞也是獨立可交換的。K 個topic-word 骰子,記為 ϕ⃗ 1,⋯,ϕ⃗ K ; 對于包含M篇文檔的語料 C=(d1,d2,⋯,dM) 中的每篇文檔 dm ,都會有一個特定的doc-topic骰子 θ⃗ m ,所有對應的骰子記為 θ⃗ 1,⋯,θ⃗ M 。為了友善,我們假設每個詞 ω 都有一個編号,對應到topic-word 骰子的面。于是在 PLSA 這個模型中,第m篇文檔 dm 中的每個詞的生成機率為
p(ω∣dm)=∑z=1Kp(ω∣z)p(z∣dm)=∑z=1Kϕzωθωz
一篇文檔的生成機率為:
p(ω⃗ ∣dm)=∏i=1n∑z=1Kp(ω∣z)p(z∣dm)=∏i=1n∑z=1Kϕzωθωz
由于文檔之間互相獨立,很容易寫出整個語料的生成機率。求解PLSA 可以使用著名的 EM 算法進行求得局部最優解,有興趣的讀者參考 Hoffman 的原始論文,或者李航的《統計學習方法》,此處略去不講。
3.3 LDA 模型
3.3.1 PLSA 和 LDA 的差別
首先,我們來看看PLSA和LDA生成文檔的方式。在PLSA中,生成文檔的方式如下:
- 1. 按照機率 p(di) 選擇一篇文檔 di
- 2. 根據選擇的文檔 di ,從從主題分布中按照機率 p(zk∣di) 選擇一個隐含的主題類别 zk
- 3. 根據選擇的主題 zk , 從詞分布中按照機率 p(ωj∣zk) 選擇一個詞 ωj
LDA 中,生成文檔的過程如下:
- 1. 按照先驗機率 p(di) 選擇一篇文檔 di
- 2. 從Dirichlet分布 α 中取樣生成文檔 di 的主題分布 θi ,主題分布 θi 由超參數為 α 的Dirichlet分布生成
- 3. 從主題的多項式分布 θi 中取樣生成文檔 di 第 j 個詞的主題 zi,j
- 4. 從Dirichlet分布 β 中取樣生成主題 zi,j 對應的詞語分布 ϕzi,j ,詞語分布 ϕzi,j 由參數為 β 的Dirichlet分布生成
- 5. 從詞語的多項式分布 ϕzi,j 中采樣最終生成詞語 ωi,j
可以看出,LDA 在 PLSA 的基礎上,為主題分布和詞分布分别加了兩個 Dirichlet 先驗。
我們來看一個例子,如圖所示:

上圖中有三個主題,在PLSA中,我們會以固定的機率來抽取一個主題詞,比如0.5的機率抽取教育這個主題詞,然後根據抽取出來的主題詞,找其對應的詞分布,再根據詞分布,抽取一個詞彙。由此,可以看出PLSA中,主題分布和詞分布都是唯一确定的。但是,在LDA中,主題分布和詞分布是不确定的,LDA的作者們采用的是貝葉斯派的思想,認為它們應該服從一個分布,主題分布和詞分布都是多項式分布,因為多項式分布和狄利克雷分布是共轭結構,在LDA中主題分布和詞分布使用了Dirichlet分布作為它們的共轭先驗分布。是以,也就有了一句廣為流傳的話 – LDA 就是 PLSA 的貝葉斯化版本。下面兩張圖檔很好的展現了兩者的差別:
在PLSA和LDA的兩篇論文中,使用了下面的圖檔來解釋模型,它們也很好的對比了PLSA和LDA的不同之處。
3.3.2 LDA 解析一
現在我們來詳細講解論文中的LDA模型,即上圖。
α⃗ →θ⃗ m→zm,n , 這個過程表示在生成第m篇文檔的時候,先從抽取了一個doc-topic骰子 θ⃗ m , 然後投擲這個骰子生成了文檔中第n個詞的topic編号 zm,n ;
β⃗ →ϕ⃗ k→ωm,n∣=zm,n , 這個過程表示,從K個topic-word骰子 ϕ⃗ k 中,挑選編号為 k=zm,n 的骰子進行投擲,然後生成詞彙 ωm,n ;
在LDA中,也是采用詞袋模型,M篇文檔會對應M個獨立Dirichlet-Multinomial共轭結構;K個topic會對應K個獨立的Dirichlet-Multinomial共轭結構。
3.3.3 LDA 解析二
上面的LDA的處理過程是一篇文檔一篇文檔的過程來處理,并不是實際的處理過程。文檔中每個詞的生成都要抛兩次骰子,第一次抛一個doc-topic骰子得到 topic, 第二次抛一個topic-word骰子得到 word,每次生成每篇文檔中的一個詞的時候這兩次抛骰子的動作是緊鄰輪換進行的。如果語料中一共有 N 個詞,則上帝一共要抛 2N次骰子,輪換的抛doc-topic骰子和 topic-word骰子。但實際上有一些抛骰子的順序是可以交換的,我們可以等價的調整2N次抛骰子的次序:前N次隻抛doc-topic骰子得到語料中所有詞的 topics,然後基于得到的每個詞的 topic 編号,後N次隻抛topic-word骰子生成 N 個word。此時,可以得到:
p(w⃗ ,z⃗ ∣α⃗ ,β⃗ )=p(w⃗ ∣z⃗ ,β⃗ )p(z⃗ ∣α⃗ )=∏k=1KΔ(ϕ⃗ K+β⃗ )Δ(β⃗ )∏m=1MΔ(θ⃗ m+α⃗ )α⃗
3.3.4 使用Gibbs Sampling進行采樣
根據上一小節中的聯合機率分布 p(ω⃗ ,z⃗ ) , 我們可以使用Gibbs Sampling對其進行采樣。
語料庫 z⃗ 中的第i個詞我們記為 zi , 其中i=(m,n)是一個二維下标,對應于第m篇文檔的第n個詞,用 ¬i 表示去除下标為i的詞。根據第二小節中的Gibbs Sampling 算法,我們需要求任一個坐标軸 i 對應的條件分布 p(zi=k∣z⃗ ¬i,ω⃗ ) 。假設已經觀測到的詞 ωi=t , 則由貝葉斯法則,我們容易得到:
p(zi=k∣z⃗ ¬i,ω⃗ )∝p(zi=k,ωi=t∣z⃗ ¬i,ω⃗ ¬i)
由于 zi=k,wi=t 隻涉及到第 m 篇文檔和第k個 topic,是以上式的條件機率計算中, 實際上也隻會涉及到與之相關的兩個Dirichlet-Multinomial 共轭結構,其它的 M+K−2 個 Dirichlet-Multinomial 共轭結構和 zi=k,wi=t 是獨立的。去掉一個詞彙,并不會改變M + K 個Dirichlet-Multinomial共轭結構,隻是某些地方的計數減少而已。于是有:
p(θ⃗ m∣z⃗ ¬i,ω⃗ ¬i)p(φ⃗ k∣z⃗ ¬i,ω⃗ ¬i)=Dir(θ⃗ m∣n⃗ m,¬i+α⃗ )=Dir(φ⃗ k∣n⃗ k,¬i+β⃗ )
下面進行本篇文章最終的核心數學公式推導:
p(zi=k∣z⃗ ¬i,ω⃗ )∝p(zi=k,ωi=t∣z⃗ ¬i,ω⃗ ¬i)=∫p(zi=k,ωi=t,θ⃗ m,φ⃗ k∣z⃗ ¬i,ω⃗ ¬i)dθ⃗ mdφ⃗ k=∫p(zi=k,θ⃗ m,∣z⃗ ¬i,ω⃗ ¬i)⋅p(ωi=t,φ⃗ k,∣z⃗ ¬i,ω⃗ ¬i)dθ⃗ mdφ⃗ k=∫p(zi=k∣θ⃗ m)p(θ⃗ m∣z⃗ ¬i,ω⃗ ¬i)⋅p(ωi=t∣φ⃗ k)p(φ⃗ k∣z⃗ ¬i,ω⃗ ¬i)dθ⃗ mdφ⃗ k=∫p(zi=k∣θ⃗ m)Dir(θ⃗ m∣n⃗ m,¬i+α⃗ )dθ⃗ m⋅p(ωi=t∣φ⃗ k)Dir(φ⃗ k∣n⃗ k,¬i+β⃗ )dφ⃗ k=∫θmkDir(θ⃗ m∣n⃗ m,¬i+α⃗ )dθ⃗ m⋅∫φktDir(φ⃗ k∣n⃗ k,¬i+β⃗ )dφ⃗ k=E(θmk)⋅E(φkt)=θ̂ mk⋅φ̂ kt
最終得到的 θ̂ mk⋅φ̂ kt 就是對應的兩個 Dirichlet 後驗分布在貝葉斯架構下的參數估計。借助于前面介紹的Dirichlet 參數估計的公式 ,有:
θ̂ mkφ̂ kt=n(k)m,¬i+αk∑Kk=1(n(k)m,¬i+αk)=n(t)k,¬i+βt∑Vt=1(n(t)k,¬i+βt)
最終,我們得到LDA 模型的 Gibbs Sampling 公式為:
p(zi=k∣z→¬i,w→)∝n(k)m,¬i+αk∑Kk=1(n(k)m,¬i+αk)⋅n(t)k,¬i+βt∑Vt=1(n(t)k,¬i+βt)
3.3.5 LDA Training
根據上一小節中的公式,我們的目标有兩個:
- 1. 估計模型中的參數 φ⃗ 1,⋯,φ⃗ K 和 θ1,⋯,θM ;
- 2. 對于新來的一篇文檔,我們能夠計算這篇文檔的 topic 分布 θ⃗ 。
訓練的過程:
- 1. 對語料庫中的每篇文檔中的每個詞彙 ω ,随機的賦予一個topic編号z
- 2. 重新掃描語料庫,對每個詞 ω ,使用Gibbs Sampling公式對其采樣,求出它的topic,在語料中更新
- 3. 重複步驟2,直到Gibbs Sampling收斂
- 4. 統計語料庫的topic-word共現頻率矩陣,該矩陣就是LDA的模型;
根據這個topic-word頻率矩陣,我們可以計算每一個 p(word∣topic) 機率,進而算出模型參數 φ⃗ 1,⋯,φ⃗ K , 這就是那 K 個 topic-word 骰子。而語料庫中的文檔對應的骰子參數 θ1,⋯,θM 在以上訓練過程中也是可以計算出來的,隻要在 Gibbs Sampling 收斂之後,統計每篇文檔中的 topic 的頻率分布,我們就可以計算每一個 p(topic∣doc) 機率,于是就可以計算出每一個 θm 。由于參數 θm 是和訓練語料中的每篇文檔相關的,對于我們了解新的文檔并無用處,是以工程上最終存儲 LDA 模型時候一般沒有必要保留。通常,在 LDA 模型訓練的過程中,我們是取 Gibbs Sampling 收斂之後的 n 個疊代的結果進行平均來做參數估計,這樣模型品質更高。
3.3.6 LDA Inference
有了 LDA 的模型,對于新來的文檔 doc, 我們隻要認為 Gibbs Sampling 公式中的 φ⃗ kt 部分是穩定不變的,是由訓練語料得到的模型提供的,是以采樣過程中我們隻要估計該文檔的 topic 分布 θ 就好了. 具體算法如下:
- 1. 對目前文檔中的每個單詞 ω , 随機初始化一個topic編号z;
- 2. 使用Gibbs Sampling公式,對每個詞 ω , 重新采樣其topic;
- 3. 重複以上過程,知道Gibbs Sampling收斂;
- 4. 統計文檔中的topic分布,該分布就是 θ⃗
4 Tips
懂 LDA 的面試官通常會詢問求職者,LDA 中主題數目如何确定?
在 LDA 中,主題的數目沒有一個固定的最優解。模型訓練時,需要事先設定主題數,訓練人員需要根據訓練出來的結果,手動調參,優化主題數目,進而優化文本分類結果。
LDA 在提出後,之後産生了很多基于 LDA 的改進模型,基本都是機率圖模型加 LDA 的組合方式。但 LDA 也有缺點,LDA對短文本的效果不好,而且計算量比較大,訓練時間比較長。
5 後記
LDA 有非常廣泛的應用,深層次的懂 LDA 對模型的調優,乃至提出新的模型以及AI技能的進階有巨大幫助。隻是了解 LDA 能用來幹什麼,隻能忽悠小白。
百度開源了其 LDA 模型,有興趣的讀者可以閱讀:https://github.com/baidu/Familia/wiki
References
[1]: Blei, D. M., Ng, A. Y., & Jordan, M. I. (2003). Latent dirichlet allocation. Journal of machine Learning research, 3(Jan), 993-1022.
[2]: Hofmann, T. (1999). Probabilistic latent semantic indexing. In Proceedings of the 22nd annual international ACM SIGIR conference on Research and development in information retrieval (pp. 50-57). ACM.
[3]: Li, F., Huang, M., & Zhu, X. (2010). Sentiment Analysis with Global Topics and Local Dependency. In AAAI (Vol. 10, pp. 1371-1376).
[4]: Medhat, W., Hassan, A., & Korashy, H. (2014). Sentiment analysis algorithms and applications: A survey. Ain Shams Engineering Journal, 5(4), 1093-1113.
[5]: Rick, Jin. (2014). Retrieved from http://www.flickering.cn/數學之美/2014/06/【lda數學八卦】神奇的gamma函數/.
[6]: 通俗了解LDA主題模型. (2014). Retrieved from http://blog.csdn.net/v_july_v/article/details/41209515.
[7]: 志華, 周. (2017). 機器學習. 北京, 北京: 清華大學出版社.
[8]: Goodfellow, I., Bengio, Y., & Courville, A. (2017). Deep learning. Cambridge, MA: The MIT Press.
[9]: 航, 李. (2016). 統計學習方法. 北京, 北京: 清華大學出版社.