系統學習NLP(二十三)--主題模型LDA

轉自:https://blog.csdn.net/kisslotus/article/details/78427585

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算法等。

2.1 詞袋模型
LDA 採用詞袋模型。所謂詞袋模型,是將一篇文檔,我們僅考慮一個詞彙是否出現,而不考慮其出現的順序。在詞袋模型中,“我喜歡你”和“你喜歡我”是等價的。與詞袋模型相反的一個模型是n-gram,n-gram考慮了詞彙出現的先後順序。

二項分佈是N重伯努利分佈,即爲X ~ B(n, p). 概率密度公式爲:

P(K = k) = \begin{pmatrix} n\\ k\\ \end{pmatrix}p^k{(1-p)}^{n-k}

2.3 多項分佈

多項分佈,是二項分佈擴展到多維的情況. 多項分佈是指單次試驗中的隨機變量的取值不再是0-1的,而是有多種離散值可能(1,2,3…,k).概率密度函數爲:

P(x_1, x_2, ..., x_k; n, p_1, p_2, ..., p_k) = \frac{n!}{x_1!...x_k!}{p_1}^{x_1}...{p_k}^{x_k}

2.4 Gamma函數

Gamma函數的定義:

\Gamma(x) = \int_0^\infty t^{x-1}e^{-t}dt

分部積分後,可以發現Gamma函數如有這樣的性質:\Gamma(x+1) = x\Gamma(x)

Gamma函數可以看成是階乘在實數集上的延拓,具有如下性質:\Gamma(n) = (n-1)!

2.5 Beta分佈

Beta分佈的定義:對於參數α>0,β>0, 取值範圍爲[0, 1]的隨機變量x的概率密度函數爲:

f(x; \alpha, \beta) = \frac{1}{B(\alpha, \beta)} x^{\alpha - 1} {(1-x)}^{\beta-1}

其中,\frac{1}{B(\alpha, \beta)} = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}

2.6 共軛先驗分佈

在貝葉斯概率理論中,如果後驗概率P(θ∣x)先驗概率 p(θ)滿足同樣的分佈律,那麼,先驗分佈和後驗分佈被叫做共軛分佈,同時,先驗分佈叫做似然函數的共軛先驗分佈。

Beta分佈是二項式分佈的共軛先驗分佈,而狄利克雷(Dirichlet)分佈是多項式分佈的共軛分佈。

共軛的意思是,以Beta分佈和二項式分佈爲例,數據符合二項分佈的時候,參數的先驗分佈和後驗分佈都能保持Beta分佈的形式,這種形式不變的好處是,我們能夠在先驗分佈中賦予參數很明確的物理意義,這個物理意義可以延續到後續分佈中進行解釋,同時從先驗變換到後驗過程中從數據中補充的知識也容易有物理解釋。

2.7 Dirichlet分佈

Dirichlet的概率密度函數爲:f(x_1, x_2, ..., x_k; \alpha_1, \alpha_2, ..., \alpha_k) = \frac{1}{B(\alpha)}\prod_{i=1}^{k}{x_i}^{\alpha^i-1}

其中,B(\alpha) = \frac{\prod_{i=1}^{k}\Gamma(\alpha^i)}{\Gamma(\sum_{i=1}^{k}\alpha^i)}, \sum_{i=1}^{k}x^i = 1

據Beta分佈、二項分佈、Dirichlet分佈、多項式分佈的公式,我們可以驗證Beta分佈是二項式分佈的共軛先驗分佈,而狄利克雷(Dirichlet)分佈是多項式分佈的共軛分佈。

對於Beta分佈的隨機變量,其均值可以用α/(α+β)來估計。Dirichlet分佈也有類似的結論,E(p) =\biggl ( \frac{\alpha ^ 1}{\sum_{i = 1}^K \alpha_i}, \frac{\alpha ^ 1}{\sum_{i = 2}^K \alpha_i}, \cdots, \frac{\alpha ^ K}{\sum_{i = 1}^K \alpha_i} \biggr)

這兩個結論非常重要,後面的LDA數學推導過程會使用這個結論。

2.9 MCMC 和 Gibbs Sampling
在現實應用中,我們很多時候很難精確求出精確的概率分佈,常常採用近似推斷方法。近似推斷方法大致可分爲兩大類:第一類是採樣(Sampling), 通過使用隨機化方法完成近似;第二類是使用確定性近似完成近似推斷,典型代表爲變分推斷(variational inference).(其實求解方法,理解就可以,這裏不搬了)

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.2 貝葉斯派視角
對於以上模型,貝葉斯統計學派的統計學家會有不同意見,他們會很挑剔的批評只假設上帝擁有唯一一個固定的骰子是不合理的。在貝葉斯學派看來,一切參數都是隨機變量,以上模型中的骰子\vec{p}不是唯一固定的,它也是一個隨機變量。所以按照貝葉斯學派的觀點,上帝是按照以下的過程在玩遊戲的:

1. 現有一個裝有無窮多個骰子的罈子,裏面裝有各式各樣的骰子,每個骰子有V個面;
2. 現從罈子中抽取一個骰子出來,然後使用這個骰子不斷拋擲,直到產生語料庫中的所有詞彙

LDA是基於貝葉斯模型的,涉及到貝葉斯模型離不開“先驗分佈”,“數據(似然)”和"後驗分佈"三塊。在貝葉斯學派這裏:

先驗分佈 + 數據(似然)= 後驗分佈

這點其實很好理解,因爲這符合我們人的思維方式,比如你對好人和壞人的認知,先驗分佈爲:100個好人和100個的壞人,即你認爲好人壞人各佔一半,現在你被2個好人(數據)幫助了和1個壞人騙了,於是你得到了新的後驗分佈爲:102個好人和101個的壞人。現在你的後驗分佈裏面認爲好人比壞人多了。這個後驗分佈接着又變成你的新的先驗分佈,當你被1個好人(數據)幫助了和3個壞人(數據)騙了後,你又更新了你的後驗分佈爲:103個好人和104個的壞人。依次繼續更新下去。

其實,這裏已經把關鍵問題解釋掉了,也就是說,我們用多項式分佈表示數據(似然),用Dirichlet分佈表示先驗分佈,之後,利用貝葉斯公式,先近似先驗分佈(如MCMC採樣),再計算後驗分佈(先驗和後驗共軛)。不斷迭代更新模型分佈。

LDA主題模型

前面做了這麼多的鋪墊,我們終於可以開始LDA主題模型了。

我們的問題是這樣的,我們有M篇文檔,對應第d個文檔中有有Nd個詞。即輸入爲如下圖:

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

LDA假設文檔主題的先驗分佈是Dirichlet分佈,即對於任一文檔d, 其主題分佈θd爲:θd=Dirichlet(α→),其中,α爲分佈的超參數,是一個K維向量。

LDA假設主題中詞的先驗分佈是Dirichlet分佈,即對於任一主題k, 其詞分佈βk爲:βk=Dirichlet(η→)其中,η爲分佈的超參數,是一個V維向量。V代表詞彙表裏所有詞的個數。

對於數據中任一一篇文檔d中的第n個詞,我們可以從主題分佈θd中得到它的主題編號zdn的分佈爲:zdn=multi(θd)

而對於該主題編號,得到我們看到的詞wdn的概率分佈爲:wdn=multi(βzdn)

理解LDA主題模型的主要任務就是理解上面的這個模型。這個模型裏,我們有M個文檔主題的Dirichlet分佈,而對應的數據有M個主題編號的多項分佈,這樣(α→θd→z→d)就組成了Dirichlet-multi共軛,可以使用前面提到的貝葉斯推斷的方法得到基於Dirichlet分佈的文檔主題後驗分佈。

如果在第d個文檔中,第k個主題的詞的個數爲:n(k)d, 則對應的多項分佈的計數可以表示爲n→d=(nd(1),nd(2),...nd(K))

利用Dirichlet-multi共軛,得到θd的後驗分佈爲:Dirichlet(θd|α→+n→d)

同樣的道理,對於主題與詞的分佈,我們有K個主題與詞的Dirichlet分佈,而對應的數據有K個主題編號的多項分佈,這樣η→βk→w→(k))就組成了Dirichlet-multi共軛,可以使用前面提到的貝葉斯推斷的方法得到基於Dirichlet分佈的主題詞的後驗分佈。

如果在第k個主題中,第v個詞的個數爲:n(v)k, 則對應的多項分佈的計數可以表示爲n→k=(nk(1),nk(2),...nk(V))

利用Dirichlet-multi共軛,得到βk的後驗分佈爲:Dirichlet(βk|η→+n→k)

由於主題產生詞不依賴具體某一個文檔,因此文檔主題分佈和主題詞分佈是獨立的。理解了上面這M+K組Dirichlet-multi共軛,就理解了LDA的基本原理了。

現在的問題是,基於這個LDA模型如何求解我們想要的每一篇文檔的主題分佈和每一個主題中詞的分佈呢?

一般有兩種方法,第一種是基於Gibbs採樣算法求解,第二種是基於變分推斷EM算法求解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章