簡述LDA主題模型


簡述LDA

LDA涉及的知識很多,對於作者這樣的菜鳥來說想要弄清楚LDA要費一番功夫,想簡單說清更是不易,寫下此文,也是希望在行文的過程中,把握LDA主要脈絡,理順思路。也希望我理解的方式與順序,能幫到一部分初學的朋友。如果有不對的地方,也歡迎作出指正。

什么是LDA主題模型

首先我們簡單了解一下什么是LDA以及LDA可以用來做什么。

LDA(Latent Dirichlet Allocation)是一種文檔生成模型。它認為一篇文章是有多個主題的,而每個主題又對應着不同的詞。一篇文章的構造過程,首先是以一定的概率選擇某個主題,然后再在這個主題下以一定的概率選出某一個詞,這樣就生成了這篇文章的第一個詞。不斷重復這個過程,就生成了整片文章。當然這里假定詞與詞之間是沒順序的。

LDA的使用是上述文檔生成的逆過程,它將根據一篇得到的文章,去尋找出這篇文章的主題,以及這些主題對應的詞。

現在來看怎么用LDA,LDA會給我們返回什么結果。

LDA是非監督的機器學習模型,並且使用了詞袋模型。一篇文章將會用詞袋模型構造成詞向量。LDA需要我們手動確定要划分的主題的個數,超參數將會在后面講述,一般超參數對結果無很大影響。

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

上圖是推斷《Seeking Life’s Bare(Genetic)Necessities》(Figure 1)的例子。使用主題建模算法(假設有100個主題)推斷《科學》上17000篇文章的潛在主題結構,然后推斷出最能描述圖1中示例文章的主題分布(圖左)。需要注意的是,盡管主題分布上有無窮個主題,但事實上只有其中的一小部分的概率不為零。進一步地,文章中詞可被分主題進行組織,可以看到最常見的主題所包含的概率最大的詞。

主題分布與詞分布

上面說了,一篇文章的生成過程,每次生成一個詞的時候,首先會以一定的概率選擇一個主題。不同主題的概率是不一樣的,在這里,假設這些文章-主題符合多項式分布。同理,主題-詞也假定為多項式分布。所謂分布(概率),就是不同情況發生的可能性,它們符合一定的規律。

如果你數學基礎和我一樣薄弱,可能你已經忘了什么事多項式分布,這里我們首先回顧一下兩點分布和二項分布,多項式分布是二項分布的延伸。二項分布是兩點分布的延伸。

兩點分布

已知隨機變量X的分布率為

X 1 0
p p 1-p

則有
E(x)=1p+0q=p
D(x)=E(x2)[E(x)]2=pq

拋一次硬幣的時候,不是正面就是反面,符合兩點分布。這里概率P為參數。

二項分布

二項分布,即是重復n次兩點分布。設隨機變量X服從參數為n,p的二項分布。其中,n為重復的次數,p為兩點分布中,事件A發生的概率。設X=k為n次實驗中事件A發生了k次的概率。
可以得到X的分布率為:
這里寫圖片描述
例如,丟5次硬幣,事件A為硬幣正面朝上,則PX=k表示求拋5次硬幣,有k次硬幣正面朝上的概率。通過計算可以得知二項分布的期望和方差如下,這里就不計算了:
E(x)=np
D(x)=np(1p)

多項式分布

多項式分布(multinomial)是二項分布在兩點分布上的延伸。在兩點分布中,一次實驗只有兩種可能性,p以及 (1-p)。例如拋一枚硬幣,不是正面就是反面。在多項式分布中,這種可能的情況得到了擴展。例如拋一個骰子,一共有6種可能,而不是2種。

設某隨機實驗如果有k個可能情況 A1、A2、…、Ak,分別將他們的出現次數記為隨機變量X1、X2、…、Xk,它們的概率分布分別是p1,p2,…,pk,那么在n次采樣的總結果中,A1出現n1次、A2出現n2次、…、Ak出現nk次的這種事件的出現概率P有下面公式:
這里寫圖片描述
這里,p1,p2…pk都是參數

那么現在我們回到LDA身上,前面已經說了主題和詞是符合多項分布的,我們可以用骰子形象地表達一篇文章的生成的過程。

這里寫圖片描述

這里寫圖片描述

有兩類骰子,一種是文章-主題(doc-topic)骰子,骰子的每面代表一種主題。這里設一共有K個主題,則K面。骰子的各個面的概率記為ϑ⃗ =(p1,p2,p3,...,pk)。各個面的概率即為這個多項式分布的參數。

另一種骰子為主題-詞(topic-word)骰子,一共有K個,從1~K編號,分別對應着不同的主題。骰子的一個面代表一個單詞。由於有K個骰子,把不同主題-詞骰子各個面的概率分別記為φ⃗ 1,φ⃗ 2,...φ⃗ k。對於一個主題-詞骰子,他的各個面的概率即為這個多項式分布的參數。

那么一篇文章的生成過程可以表示為:

  1. 拋擲這個doc-topic骰子,得到主題編號z
  2. 選擇編號為z的topic-word骰子,得到詞w
  3. 不斷重復步驟1以及步驟2

參數估計

上面我們已經知道了主題分布和詞分布都屬於多項式分布,只是它們的參數究竟是什么值,我們還無從知曉。如果我們能估算出它們的參數,我們就能求得這些主題分布和詞分布。LDA的主要目的就是求出主題分布和詞分布,距離這個目的,我們近在咫尺。

極大似然估計

我們知道,頻率可以用來估計參數。例如對於兩點分布,拋硬幣。當我們拋的次數足夠多,可以估出p接近1/2,大數定理是有力的保證。頻率學派為參數估計提供了另一種有力的工具——極大似然估計。它的思想可以這樣形象地表達:既然樣本已經出來了,我們有理由相信它們發生的概率很大,於是我們不如就設給定參數的情況下,出現這些樣本的概率是最大的,通過求導計算極值,從而計算出參數。

在這里,我們的樣本就是我們觀察到的,文章d,以及文章里的詞w。要求參數,我們可以寫出如下式子:
p(wj|dm)=k=1Kp(wj|zk)p(zk|dm)
給定第m篇文章情況下,第i個詞出現的概率正式上式。這里z主題是隱變量,我們觀測不到,但把它暴露了出來。p(wj|zk)是詞分布。p(zk|dm)是主題分布,也是我們要求的參數:φkj表示第k個主題詞wj出現的概率;ϑmk表示第m篇文章主題k出現的概率。這樣我們就可以求他們了。

這里寫圖片描述

我們設詞和詞,文章和文章之間是獨立的。進一步,有了一個單詞的概率,我們就可以求一篇文章的概率:
p(w⃗ |dm)=j=1nk=1Kp(wj|zk)p(zk|dm)

進一步,有了整個語料庫(訓練集,多篇文章)的概率:
L=m=1Mj=1nk=1Kp(wj|zk)p(zk|dm)

上面說過,極大似然估計就是要讓這個式子達到最大值。接下來還需要把式兩邊取對手,求導,解似然方程,就可以得到參數。實際上,到這里為止,講述的是其實還只是plsa模型,因此這里不寫出求解過程。LDA在plsa的求參上作了一些變化,下面將會講到。

形式化地,似然函數可以如下表示:
P(x1,x2,...xn|ϑ)
哪個參數能夠使得這個P最大,則把這個參數作為我們選定的參數。

貝葉斯估計

上一小節中我們知道,plsa模型用頻率學派來估計主題分布和詞分布的參數,頻率學派認為參數是一個定值。而貝葉斯學派則認為參數是變化的,也應該符合一定的分布。LDA在plsa的基礎上引入了貝葉斯學派的方式。
我們先來看看貝葉斯公式

P(ϑ|x)=P(x,ϑ)P(x)=P(x|ϑ)P(ϑ)P(x)

我們看看每個部分的含義:
P(θ):θ發生的概率,先驗概率。
P(θ|x):在數據x的支持下,θ發生的概率,后驗概率。
P(x|θ):似然函數,前面已經提及。

百度百科對先驗后驗有如下解釋:
先驗概率不是根據有關自然狀態的全部資料測定的,而只是利用現有的材料(主要是歷史資料)計算的;后驗概率使用了有關自然狀態更加全面的資料,既有先驗概率資料,也有補充資料;

貝葉斯學派的思路很直觀,就是如果只做了少量試驗來估計參數(如均值或概率p),會由於小樣本數據而造成估計不准。但利用之前已經擁有的經驗(以前做過的試驗數據),就可以讓估計更為合理。

那么在給定樣本X的情況下,要如何去修正參數P(ϑ|x)呢?類似極大似然函數那樣,我們可以選擇另P(θ|x)最大的θ,由於樣本X是給定的,因此P(X)是不變的,由此有:
P(ϑ|x)P(x|ϑ)P(ϑ)

共軛先驗分布

回到我們的LDA上,通過貝葉斯學派的觀點對plsa模型進行改造。參數也是服從一定的分布的。

這里寫圖片描述

原本綠色骰子(doc-topic分布)是P(θ)先驗概率,現在成了P(θ|x)后驗概率。詞分布也是同樣的。我們已經知道,主題分布以及詞分布式服從多項式分布的。那么他們的參數要服從什么分布呢?我們知道,P(ϑ|x)P(x|ϑ)P(ϑ),而P(θ|x)服從多項式分布,因此P(θ)P(x|θ)歸一化后也要服從多項式分布。

在貝葉斯概率理論中,有這么一種定義,如果后驗概率P(θ|x)和先驗概率p(θ)滿足同樣的分布律,那么先驗分布和后驗分布被叫做共軛分布,同時,先驗分布叫做似然函數的共軛先驗分布。

那么,我們就可以選擇似然函數P(x|θ)的共軛先驗作為P(θ)的分布。而Dirichlet分布正是多項式分布的共軛先驗概率分布。

Dirichlet分布的更多說明和數學推導可以參考篇尾參考資料里的LDA數學八卦以及LDA漫游指南。這里敘述共軛先驗分布一些后面要用到的特性。

Dir(p⃗ |α⃗ )+MultCount(m⃗ )=Dir(p⃗ |α⃗ +m⃗ )

對應貝葉斯參數估計的過程:先驗分布+數據的知識= 后驗分布

MultCount是什么我們還沒說到,但是根據式子可以知道它們對應我們觀測到的樣本數據。我們似乎還沒講到這些樣本數據要如何組織,如何使用。舉一個例子:

假設語料庫中所有詞的總數是N,如果我們關注每個詞vi的發生次數ni,那么n⃗ =(n1,n2...nv)正好是一個多項分布

這里寫圖片描述

這就是MultCount。

對應到LDA中,文章-主題分布的MultCount是每個主題的詞的總數。主題-詞對應的是詞分布里每個單詞的計數。

最后,我們通過共軛先驗分布來求參數的后驗分布:
這里寫圖片描述

有了分布,就可以使用(a)式用平均值來估計參數的值,可以通過計算分布的極值或者期望來作為我們選擇的參數。

如果p⃗ Dir(t⃗ |α⃗ ),有期望
這里寫圖片描述

於是有:
這里寫圖片描述

ni是詞頻的計數,對應到主題分布和詞分布就是每個主題的詞的總數/詞分布里每個單詞的計數。α成為先驗分布的偽計數。可以看到它的物理意義很直觀,就是先驗的偽計數+數據樣本的計數占整體計數的比重。

有了參數的形式,對它的求解,可以使用變分EM以及吉布斯(Gibbs Sampling)的方式。在下一篇文章中,將給出吉布斯采樣的原理以及代碼解析。

形式化LDA

上面對LDA進行了形象的描述以及相關的數學討論,現在我們來更准確地,形式化地描述一下LDA。下圖為LDA的概率圖模型。

這里寫圖片描述

符號 解釋
M 文章的數量
K 主題的個數
V 詞袋的長度
Nm 第m篇文章中單詞的總數
α⃗  是每篇文章的主題分布的先驗分布Dirichlet分布的參數(也被稱為超參數)通常是手動設定的
β⃗  是每個主題的詞分布的先驗分布Dirichlet分布的參數(也被稱為超參數)通常是手動設定的
ϑ⃗ m θ是一個M*K的矩陣,ϑ⃗ m表示第m篇文章的主題分布,ϑ⃗ mDir(α⃗ )是我們要求的參數
φ⃗ k φ是一個K*V的矩陣,φ⃗ k表示第k個主題的詞分布,φ⃗ kDir(β⃗ )是我們要求的參數
zm,n 第m篇文章第n個詞被賦予的主題,隱變量
wm,n 第m篇文章第n個詞,這個是可以被我們觀測到的


LDA模型文章的生成過程如下:

  1. 選擇一個ϑ⃗ mDir(α⃗ )
  2. 對每個准備生成的單詞Wm,n
    (a)選擇一個主題Zm,n ~Multinomial(ϑ⃗ m)
    (b)生成一個單詞Wm,n 從P(Wm,n|Zm,n,β⃗ )

根據上節的討論,可以推導出主題分布:
這里寫圖片描述

詞分布有類似的形式。

這里寫圖片描述

最后,可以寫出資料庫的聯合概率。
這里參數轉化為每個topic的單詞計數以及詞分布的單詞計數。概率將有這些計數除它們對應的總數所得。

參考以及引用:
LDA原始論文
百度百科
LDA算法漫游
LDA數學八卦
共軛先驗

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM