在前面我們講到了基於矩陣分解的LSI和NMF主題模型,這里我們開始討論被廣泛使用的主題模型:隱含狄利克雷分布(Latent Dirichlet Allocation,以下簡稱LDA)。注意機器學習還有一個LDA,即線性判別分析,主要是用於降維和分類的,如果大家需要了解這個LDA的信息,參看之前寫的線性判別分析LDA原理總結。文本關注於隱含狄利克雷分布對應的LDA。
1. LDA貝葉斯模型
LDA是基於貝葉斯模型的,涉及到貝葉斯模型離不開“先驗分布”,“數據(似然)”和"后驗分布"三塊。在朴素貝葉斯算法原理小結中我們也已經講到了這套貝葉斯理論。在貝葉斯學派這里:
先驗分布 + 數據(似然)= 后驗分布
這點其實很好理解,因為這符合我們人的思維方式,比如你對好人和壞人的認知,先驗分布為:100個好人和100個的壞人,即你認為好人壞人各占一半,現在你被2個好人(數據)幫助了和1個壞人騙了,於是你得到了新的后驗分布為:102個好人和101個的壞人。現在你的后驗分布里面認為好人比壞人多了。這個后驗分布接着又變成你的新的先驗分布,當你被1個好人(數據)幫助了和3個壞人(數據)騙了后,你又更新了你的后驗分布為:103個好人和104個的壞人。依次繼續更新下去。
2. 二項分布與Beta分布
對於上一節的貝葉斯模型和認知過程,假如用數學和概率的方式該如何表達呢?
對於我們的數據(似然),這個好辦,用一個二項分布就可以搞定,即對於二項分布:
其中p我們可以理解為好人的概率,k為好人的個數,n為好人壞人的總數。
雖然數據(似然)很好理解,但是對於先驗分布,我們就要費一番腦筋了,為什么呢?因為我們希望這個先驗分布和數據(似然)對應的二項分布集合后,得到的后驗分布在后面還可以作為先驗分布!就像上面例子里的“102個好人和101個的壞人”,它是前面一次貝葉斯推薦的后驗分布,又是后一次貝葉斯推薦的先驗分布。也即是說,我們希望先驗分布和后驗分布的形式應該是一樣的,這樣的分布我們一般叫共軛分布。在我們的例子里,我們希望找到和二項分布共軛的分布。
和二項分布共軛的分布其實就是Beta分布。Beta分布的表達式為:
其中ΓΓ是Gamma函數,滿足Γ(x)=(x−1)!Γ(x)=(x−1)!
仔細觀察Beta分布和二項分布,可以發現兩者的密度函數很相似,區別僅僅在前面的歸一化的階乘項。那么它如何做到先驗分布和后驗分布的形式一樣呢?后驗分布P(p|n,k,α,β)P(p|n,k,α,β)推導如下:
將上面最后的式子歸一化以后,得到我們的后驗概率為:
可見我們的后驗分布的確是Beta分布,而且我們發現:
這個式子完全符合我們在上一節好人壞人例子里的情況,我們的認知會把數據里的好人壞人數分別加到我們的先驗分布上,得到后驗分布。
我們在來看看Beta分布Beta(p|α,β)Beta(p|α,β)的期望:
由於上式最右邊的乘積對應Beta分布Beta(p|α+1,β)Beta(p|α+1,β),因此有:
這樣我們的期望可以表達為:
這個結果也很符合我們的思維方式。
3. 多項分布與Dirichlet 分布
現在我們回到上面好人壞人的問題,假如我們發現有第三類人,不好不壞的人,這時候我們如何用貝葉斯來表達這個模型分布呢?之前我們是二維分布,現在是三維分布。由於二維我們使用了Beta分布和二項分布來表達這個模型,則在三維時,以此類推,我們可以用三維的Beta分布來表達先驗后驗分布,三項的多項分布來表達數據(似然)。
三項的多項分布好表達,我們假設數據中的第一類有m1m1個好人,第二類有m2m2個壞人,第三類為m3=n−m1−m2m3=n−m1−m2個不好不壞的人,對應的概率分別為p1,p2,p3=1−p1−p2p1,p2,p3=1−p1−p2,則對應的多項分布為:
那三維的Beta分布呢?超過二維的Beta分布我們一般稱之為狄利克雷(以下稱為Dirichlet )分布。也可以說Beta分布是Dirichlet 分布在二維時的特殊形式。從二維的Beta分布表達式,我們很容易寫出三維的Dirichlet分布如下:
同樣的方法,我們可以寫出4維,5維,。。。以及更高維的Dirichlet 分布的概率密度函數。為了簡化表達式,我們用向量來表示概率和計數,這樣多項分布可以表示為:Dirichlet(p⃗ |α⃗ )Dirichlet(p→|α→),而多項分布可以表示為:multi(m⃗ |n,p⃗ )multi(m→|n,p→)。
一般意義上的K維Dirichlet 分布表達式為:
而多項分布和Dirichlet 分布也滿足共軛關系,這樣我們可以得到和上一節類似的結論:
對於Dirichlet 分布的期望,也有和Beta分布類似的性質:
4. LDA主題模型
前面做了這么多的鋪墊,我們終於可以開始LDA主題模型了。
我們的問題是這樣的,我們有MM篇文檔,對應第d個文檔中有有NdNd個詞。即輸入為如下圖:

我們的目標是找到每一篇文檔的主題分布和每一個主題中詞的分布。在LDA模型中,我們需要先假定一個主題數目KK,這樣所有的分布就都基於KK個主題展開。那么具體LDA模型是怎么樣的呢?具體如下圖:

LDA假設文檔主題的先驗分布是Dirichlet分布,即對於任一文檔dd, 其主題分布θdθd為:
其中,αα為分布的超參數,是一個KK維向量。
LDA假設主題中詞的先驗分布是Dirichlet分布,即對於任一主題kk, 其詞分布βkβk為:
其中,ηη為分布的超參數,是一個VV維向量。VV代表詞匯表里所有詞的個數。
對於數據中任一一篇文檔dd中的第nn個詞,我們可以從主題分布θdθd中得到它的主題編號zdnzdn的分布為:
而對於該主題編號,得到我們看到的詞wdnwdn的概率分布為:
理解LDA主題模型的主要任務就是理解上面的這個模型。這個模型里,我們有MM個文檔主題的Dirichlet分布,而對應的數據有MM個主題編號的多項分布,這樣(α→θd→z⃗ dα→θd→z→d)就組成了Dirichlet-multi共軛,可以使用前面提到的貝葉斯推斷的方法得到基於Dirichlet分布的文檔主題后驗分布。
如果在第d個文檔中,第k個主題的詞的個數為:n(k)dnd(k), 則對應的多項分布的計數可以表示為
利用Dirichlet-multi共軛,得到θdθd的后驗分布為:
同樣的道理,對於主題與詞的分布,我們有KK個主題與詞的Dirichlet分布,而對應的數據有KK個主題編號的多項分布,這樣(η→βk→w⃗ (k)η→βk→w→(k))就組成了Dirichlet-multi共軛,可以使用前面提到的貝葉斯推斷的方法得到基於Dirichlet分布的主題詞的后驗分布。
如果在第k個主題中,第v個詞的個數為:n(v)knk(v), 則對應的多項分布的計數可以表示為
利用Dirichlet-multi共軛,得到βkβk的后驗分布為:
由於主題產生詞不依賴具體某一個文檔,因此文檔主題分布和主題詞分布是獨立的。理解了上面這M+KM+K組Dirichlet-multi共軛,就理解了LDA的基本原理了。
現在的問題是,基於這個LDA模型如何求解我們想要的每一篇文檔的主題分布和每一個主題中詞的分布呢?
一般有兩種方法,第一種是基於Gibbs采樣算法求解,第二種是基於變分推斷EM算法求解。
如果你只是想理解基本的LDA模型,到這里就可以了,如果想理解LDA模型的求解,可以繼續關注系列里的另外兩篇文章。
轉載自 文本主題模型之LDA(一) LDA基礎 - 劉建平Pinard - 博客園 https://www.cnblogs.com/pinard/p/6831308.html
