簡述LDA主題模型

簡述LDA

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

什麼是LDA主題模型

首先咱們簡單瞭解一下什麼是LDA以及LDA能夠用來作什麼。markdown

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

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

如今來看怎麼用LDA,LDA會給咱們返回什麼結果。分佈式

LDA是非監督的機器學習模型,而且使用了詞袋模型。一篇文章將會用詞袋模型構形成詞向量。LDA須要咱們手動肯定要劃分的主題的個數,超參數將會在後面講述,通常超參數對結果無很大影響。函數

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

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

主題分佈與詞分佈

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

若是你數學基礎和我同樣薄弱,可能你已經忘了什麼事多項式分佈,這裏咱們首先回顧一下兩點分佈和二項分佈,多項式分佈是二項分佈的延伸。二項分佈是兩點分佈的延伸。atom

兩點分佈

已知隨機變量X的分佈率爲spa

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個可能狀況 A一、A二、…、Ak,分別將他們的出現次數記爲隨機變量X一、X二、…、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數學八卦
共軛先驗

相關文章
相關標籤/搜索