【本文做者】達觀數據 夏琦
【做者簡介】夏琦,達觀數據NLP組實習生,就讀於東南大學和 Monash University,天然語言處理方向二年級研究生,師從知識圖譜專家漆桂林教授。曾獲第五屆「藍橋杯」江蘇省一等獎、國家二等獎。git
本篇博文將詳細講解LDA主題模型,從最底層數學推導的角度來詳細講解,只想瞭解LDA的讀者,能夠只看第一小節簡介便可。PLSA和LDA很是類似,PLSA也是主題模型方面很是重要的一個模型,本篇也會有的放矢的講解此模型。若是讀者閱讀起來比較吃力,能夠定義一個菲波那切數列,第 f(n) = f(n-1) + f(n-2) 天再閱讀一次,直到這個知識點收斂。若是讀者發現文章中的錯誤或者有改進之處,歡迎交流。github
在機器學習領域,LDA是兩個經常使用模型的簡稱:Linear Discriminant Analysis 和 Latent Dirichlet Allocation。本文的LDA僅指代Latent Dirichlet Allocation. LDA 在主題模型中佔有很是重要的地位,經常使用來文本分類。面試
LDA由Blei, David M.、Ng, Andrew Y.、Jordan於2003年提出,用來推測文檔的主題分佈。它能夠將文檔集中每篇文檔的主題以機率分佈的形式給出,從而經過分析一些文檔抽取出它們的主題分佈後,即可以根據主題分佈進行主題聚類或文本分類。算法
LDA 模型涉及不少數學知識,這也許是LDA晦澀難懂的主要緣由。本小節主要介紹LDA中涉及的數學知識。數學功底比較好的同窗能夠直接跳過本小節。框架
LDA涉及到的先驗知識有:二項分佈、Gamma函數、Beta分佈、多項分佈、Dirichlet分佈、馬爾科夫鏈、MCMC、Gibs Sampling、EM算法等。限於篇幅,本文僅會有的放矢的介紹部分概念,不會每一個概念都仔細介紹,亦不會涉及到每一個概念的數學公式推導。若是每一個概念都詳細介紹,估計均可以寫一本百頁的書了。若是你對LDA的理解能達到如數家珍、信手拈來的程度,那麼恭喜你已經掌握了從事機器學習方面的紮實數學基礎。想進一步瞭解底層的數學公式推導過程,能夠參考《數學全書》等資料。機器學習
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} $$優化
多項分佈,是二項分佈擴展到多維的狀況. 多項分佈是指單次試驗中的隨機變量的取值再也不是0-1的,而是有多種離散值可能(1,2,3...,k).機率密度函數爲:spa
$$ 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} $$
Gamma函數的定義:
$$ \Gamma(x) = \int_0^\infty t^{x-1}e^{-t}dt $$
分部積分後,能夠發現Gamma函數若有這樣的性質:
$$ \Gamma(x+1) = x\Gamma(x) $$
Gamma函數能夠當作是階乘在實數集上的延拓,具備以下性質:
$$ \Gamma(n) = (n-1)! $$
Beta分佈的定義:對於參數alpha > 0, beta > 0, 取值範圍爲[0, 1]的隨機變量x的機率密度函數爲:
$$ \begin{align} f(x; \alpha, \beta) = \frac{1}{B(\alpha, \beta)} x^{\alpha - 1} {(1-x)}^{\beta-1} \end{align} $$
其中,
$$ \begin{align} \frac{1}{B(\alpha, \beta)} = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)} \end{align} $$
在貝葉斯機率理論中,若是後驗機率P(θ|x)和先驗機率p(θ)知足一樣的分佈律,那麼,先驗分佈和後驗分佈被叫作共軛分佈,同時,先驗分佈叫作似然函數的共軛先驗分佈。
$$ \begin{align} P(\theta | x) = \frac{P(\theta, x)} {P(x)} \end{align} $$
Beta分佈是二項式分佈的共軛先驗分佈,而狄利克雷(Dirichlet)分佈是多項式分佈的共軛分佈。
共軛的意思是,以Beta分佈和二項式分佈爲例,數據符合二項分佈的時候,參數的先驗分佈和後驗分佈都能保持Beta分佈的形式,這種形式不變的好處是,咱們可以在先驗分佈中賦予參數很明確的物理意義,這個物理意義能夠延續到後續分佈中進行解釋,同時從先驗變換到後驗過程當中從數據中補充的知識也容易有物理解釋。
Dirichlet的機率密度函數爲:
$$ \begin{align} 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} \end{align} $$
其中,
$$ \begin{align} B(\alpha) = \frac{\prod_{i=1}^{k}\Gamma(\alpha^i)}{\Gamma(\sum_{i=1}^{k}\alpha^i)}, \sum_{i=1}^{k}x^i = 1 \end{align} $$
根據Beta分佈、二項分佈、Dirichlet分佈、多項式分佈的公式,咱們能夠驗證上一小節中的結論 -- Beta分佈是二項式分佈的共軛先驗分佈,而狄利克雷(Dirichlet)分佈是多項式分佈的共軛分佈。
若是 $p ~ Beta(t | \alpha, \beta)$,則
$$ \begin{align} E(p) & = \int_0^1 t * Beta(t| \alpha, \beta)dt \\ & = \int_0^1 t * \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}t ^ {(\alpha -1)} {(1 - t)}^{\beta - 1}dt \\ & = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}\int_0^1 t ^ \alpha {(1 - t)}^{\beta - 1}dt \end{align} $$
上式右邊的積分對應到機率分佈$Beta(t | \alpha + 1, \beta)$, 對於這個分佈,有
$$ \int_0^1 \frac{\Gamma(\alpha + \beta + 1)}{\Gamma(\alpha + 1)\Gamma(\beta)}t^\alpha {(1-t)}^{\beta - 1}dt = 1 $$
把上式帶入E(p)的計算式,獲得
$$ \begin{align} E(p) & = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)} \cdot \frac{\Gamma(\alpha + 1)\Gamma(\beta)}{\Gamma(\alpha + \beta + 1)} \\ & = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha + \beta + 1)} \cdot \frac{\Gamma(\alpha + 1)} {\Gamma(\alpha)} \\ & = \frac{\alpha}{\alpha + \beta} \end{align} $$
這說明,對於對於Beta分佈的隨機變量,其均值能夠用$\frac{\alpha}{\alpha + \beta}$來估計。Dirichlet分佈也有相似的結論,若是$\vec p \sim Dir (\vec t | \vec \alpha)$, 一樣能夠證實:
$$ \begin{align} 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) \end{align} $$
這兩個結論很是重要,後面的LDA數學推導過程會使用這個結論。
在現實應用中,咱們不少時候很難精確求出精確的機率分佈,經常採用近似推斷方法。近似推斷方法大體可分爲兩大類:第一類是採樣(Sampling), 經過使用隨機化方法完成近似;第二類是使用肯定性近似完成近似推斷,典型表明爲變分推斷(variational inference).
在不少任務中,咱們關心某些機率分佈並不是由於對這些機率分佈自己感興趣,而是要基於他們計算某些指望,而且還可能進一步基於這些指望作出決策。採樣法正式基於這個思路。具體來講,嘉定咱們的目標是計算函數f(x)在機率密度函數p(x)下的指望
$$ \begin{align} E_p[f] & = \int f(x)p(x)dx \end{align} $$
則可根據p(x)抽取一組樣本${x_1, x_2, \cdots, x_N}$,而後計算f(x)在這些樣本上的均值
$$ \begin{align} \hat f & = \frac{1}{N} \sum_{i=1}^Nf(x_i) \end{align} $$
以此來近似目標指望E[f]。若樣本${x_1, x_2, \cdots, x_N}$獨立,基於大數定律,這種經過大量採樣的辦法就能得到較高的近似精度。但是,問題的關鍵是如何採樣?對機率圖模型來講,就是如何高效地基於圖模型所描述的機率分佈來獲取樣本。機率圖模型中最經常使用的採樣技術是馬爾可夫鏈臉蒙特卡羅(Markov chain Monte Carlo, MCMC). 給定連續變量$x \in X$的機率密度函數p(x), x在區間A中的機率可計算爲
$$ \begin{align} P(A) & = \int_A p(x)dx \end{align} $$
如有函數$f: X \mapsto R$, 則可計算f(x)的指望
$$ \begin{align} P(f) & = E_p[f(X)] = \int_x f(x)p(x)dx \end{align} $$
若x不是單變量而是一個高維多元變量x, 且服從一個很是複雜的分佈,則對上式求積分一般很困難。爲此,MCMC先構造出服從p分佈的獨立同分布隨機變量$x_1, x_2, \cdots, x_N$, 再獲得上式的無偏估計
$$ \begin{align} \tilde p(f) & = \frac{1}{N}\sum_{i=1}^Nf(xi) \end{align} $$
然而,若機率密度函數p(x)很複雜,則構造服從p分佈的獨立同分布樣本也很困難。MCMC方法的關鍵在於經過構造「平穩分佈爲p的馬爾可夫鏈」來產生樣本:若馬爾科夫鏈運行時間足夠長,即收斂到平穩狀態,則此時產出的樣本X近似服從分佈p.如何判斷馬爾科夫鏈到達平穩狀態呢?假定平穩馬爾科夫鏈T的狀態轉移機率(即從狀態X轉移到狀態$x^{'}$的機率)爲$T(x^{'} \mid x)$, t時刻狀態的分佈爲p(x^t), 則若在某個時刻馬爾科夫鏈知足平穩條件
$$ \begin{align} p(x^t)T(x^{t-1} \mid x^t) = p(x^{t-1})T(x^t \mid x^{t-1}) \end{align} $$
則p(x)是馬爾科夫鏈的平穩分佈,且馬爾科夫鏈在知足該條件時已收斂到平穩條件。也就是說,MCMC方法先設法構造一條馬爾科夫鏈,使其收斂至平穩分佈恰爲待估計參數的後驗分佈,而後經過這條馬爾科夫鏈來產生符合後驗分佈的樣本,並基於這些樣原本進行估計。這裏馬爾科夫鏈轉移機率的構造相當重要,不一樣的構造方法將產生不一樣的MCMC算法。
Metropolis-Hastings(簡稱MH)算法是MCMC的重要表明。它基於「拒絕採樣」(reject sampling)來逼近平穩分佈p。算法以下:
$$ \begin{align} A(x^{\ast} \mid x^{t-1}) = min \biggl( 1, \frac{p(x^{\ast}Q(x^{t-1} \mid x^{\ast}))}{p(x^{t-1})Q(x^{\ast} \mid x^{t-1})}\biggr) \end{align} $$
吉布斯採樣(Gibbs sampling)有時被視爲MH算法的特例,它也使用馬爾科夫鏈讀取樣本,而該馬爾科夫鏈的平穩分佈也是採用採樣的目標分佈p(x).具體來講,假定$x = {x_1, x_2, \cdots, x_N}$, 目標分佈爲p(x), 在初始化x的取值後,經過循環執行如下步驟來完成採樣:
一篇文檔,能夠當作是一組有序的詞的序列$d = (\omega_1, \omega_2, \cdots, \omega_n)$. 從統計學角度來看,文檔的生成能夠當作是上帝拋擲骰子生成的結果,每一次拋擲骰子都生成一個詞彙,拋擲N詞生成一篇文檔。在統計文本建模中,咱們但願猜想出上帝是如何玩這個遊戲的,這會涉及到兩個最核心的問題:
第一個問題就是表示模型中都有哪些參數,骰子的每個面的機率都對應於模型中的參數;第二個問題就表示遊戲規則是什麼,上帝可能有各類不一樣類型的骰子,上帝能夠按照必定的規則拋擲這些骰子從而產生詞序列。
在Unigram Model中,咱們採用詞袋模型,假設了文檔之間相互獨立,文檔中的詞彙之間相互獨立。假設咱們的詞典中一共有 V 個詞 $\nu_1, \nu_2, \cdots, \nu_V$,那麼最簡單的 Unigram Model 就是認爲上帝是按照以下的遊戲規則產生文本的。
對於一個骰子,記各個面的機率爲$\vec p = (p_1, p_2, \cdots, p_V)$, 每生成一個詞彙均可以看作一次多項式分佈,記爲$\omega \sim Mult(\omega \mid \vec p)$。一篇文檔$d = \vec \omega = (\omega_1, \omega_2, \cdots, \omega_n)$, 其生成機率是
$$ p(\vec \omega) = p (\omega_1, \omega_2, \cdots, \omega_n) = p(\omega_1)p(\omega_2) \cdots p(\omega_n) $$
文檔之間,咱們認爲是獨立的,對於一個語料庫,其機率爲:$W = (\vec \omega_1, \vec \omega_2, \cdots, \vec \omega_m)$。
假設語料中總的詞頻是N,記每一個詞$\omega_i$的頻率爲$n_i$, 那麼$\vec n = (n_1, n_2, \cdots, n_V)$, $\vec n$服從多項式分佈
$$ p(\vec n) = Mult(\vec n \mid \vec p, N) = \begin{pmatrix} N \\ \vec n \end{pmatrix} \prod_{k = 1}^V p_k^{n_k} $$
整個語料庫的機率爲
$$ p(W) = p(\vec \omega_1) p(\vec \omega_2) \cdots p(\vec \omega_m) = \prod_{k = 1}^V p_k^{n_k} $$
此時,咱們須要估計模型中的參數$\vec p$,也就是詞彙骰子中每一個面的機率是多大,按照頻率派的觀點,使用極大似然估計最大化p(W), 因而參數$p_i$的估計值爲
$$ \hat p_i = \frac{n_i}{N} $$
對於以上模型,貝葉斯統計學派的統計學家會有不一樣意見,他們會很挑剔的批評只假設上帝擁有惟一一個固定的骰子是不合理的。在貝葉斯學派看來,一切參數都是隨機變量,以上模型中的骰子 $\vec p$不是惟一固定的,它也是一個隨機變量。因此按照貝葉斯學派的觀點,上帝是按照如下的過程在玩遊戲的:
罈子中的骰子無限多,有些類型的骰子數量多,有些少。從機率分佈角度看,罈子裏面的骰子$\vec p$服從一個機率分佈$p(\vec p)$, 這個分佈稱爲參數$\vec p$的先驗分佈。在此視角下,咱們並不知道到底用了哪一個骰子$\vec p$,每一個骰子均可能被使用,其機率由先驗分佈$p(\vec p)$來決定。對每一個具體的骰子,由該骰子產生語料庫的機率爲$p(W \mid \vec p)$, 故產生語料庫的機率就是對每個骰子$\vec p$上產生語料庫進行積分求和
$$ p(W) = \int p(W \mid \vec p) p(\vec p) d \vec p $$
先驗機率有不少選擇,但咱們注意到$p(\vec n) = Mult(\vec n \mid \vec p, N)$. 咱們知道多項式分佈和狄利克雷分佈是共軛分佈,所以一個比較好的選擇是採用狄利克雷分佈
$$ Dir(\vec p \mid \vec \alpha) = \frac{1}{\Delta (\vec \alpha)} \prod_{k=1}^Vp_k^{\alpha_k -1}, \vec \alpha = (\alpha_1, \cdots, \alpha_V) $$
此處,$\Delta(\vec \alpha)就是歸一化因子Dir(\vec \alpha)$, 即
$$ \Delta(\vec \alpha) = \int \prod_{k=1}^Vp_k^{\alpha_k - 1}d\vec p $$
由多項式分佈和狄利克雷分佈是共軛分佈,可得:
$$ \begin{align} p(\vec p | W, \vec \alpha) = Dir(\vec p \mid \vec n + \vec \alpha) = \frac{1}{\Delta(\vec n + \vec \alpha)} \prod_{k = 1}^V p_k^{n_k + \alpha_k - 1}d\vec p \end{align} $$
此時,咱們如何估計參數$\vec p$呢?根據上式,咱們已經知道了其後驗分佈,因此合理的方式是使用後驗分佈的極大值點,或者是參數在後驗分佈下的平均值。這裏,咱們取平均值做爲參數的估計值。根據第二小節Dirichlet分佈中的內容,能夠獲得:
$$ \begin{align} E(\vec p) = \biggl( \frac{n_1 + \alpha_1}{\sum_{i=1}^V (n_i + \alpha_i)}, \frac{n_2 + \alpha_2}{\sum_{i=1}^V (n_i + \alpha_i)}, \cdots, \frac{n_V + \alpha_V}{\sum_{i=1}^V (n_i + \alpha_i)} \biggr) \end{align} $$
對於每個$p_i$, 咱們使用下面的式子進行估計
$$ \begin{align} \hat p_i = \frac{n_i + \alpha_i}{\sum_{i=1}^V(n_i + \alpha_i)} \end{align} $$
$\alpha_i$在 Dirichlet 分佈中的物理意義是事件的先驗的僞計數,上式表達的是:每一個參數的估計值是其對應事件的先驗的僞計數和數據中的計數的和在總體計數中的比例。由此,咱們能夠計算出產生語料庫的機率爲:
$$ \begin{align} p(W \mid \alpha) & = \int p(W \mid \alpha) p(\vec p \mid \alpha)d\vec p \\ & = \int \prod_{k=1}^V p_k^{n_k}Dir(\vec p \mid \vec \alpha)d\vec p \\ & = \int \prod_{k=1}^V p_k^{n_k} \frac{1}{\Delta(\vec \alpha)} \prod_{k = 1}^V p_k^{\alpha_k - 1}d\vec p \\ & = \frac{1}{\Delta(\vec \alpha)} \int \prod_{k=1}^V p_k^{n_k} \prod_{k = 1}^V p_k^{n_k + \alpha_k - 1}d\vec p \\ & = \frac{\Delta(\vec n + \vec \alpha)}{\Delta(\vec \alpha)} \end{align} $$
Unigram Model模型中,沒有考慮主題詞這個概念。咱們人寫文章時,寫的文章都是關於某一個主題的,不是滿天胡亂的寫,好比一個財經記者寫一篇報道,那麼這篇文章大部分都是關於財經主題的,固然,也有不多一部分詞彙會涉及到其餘主題。因此,PLSA認爲生成一篇文檔的生成過程以下:
PLSA中,也是採用詞袋模型,文檔和文檔之間是獨立可交換的,同一個文檔內的詞也是獨立可交換的。K 個topic-word 骰子,記爲$\vec \phi_1, \cdots, \vec \phi_K$; 對於包含M篇文檔的語料 $C = (d_1,d_2, \cdots,d_M) $中的每篇文檔$d_m$,都會有一個特定的doc-topic骰子$\vec \theta_m$,全部對應的骰子記爲 $\vec \theta_1, \cdots, \vec \theta_M$。爲了方便,咱們假設每一個詞$\omega$都有一個編號,對應到topic-word 骰子的面。因而在 PLSA 這個模型中,第m篇文檔 $d_m$ 中的每一個詞的生成機率爲
$$ \begin{align} p(\omega \mid d_m) & = \sum_{z=1}^K p(\omega \mid z) p(z \mid d_m) \\ & = \sum_{z = 1}^K \phi_{z \omega} \theta_{\omega z} \end{align} $$
一篇文檔的生成機率爲:
$$ \begin{align} p(\vec \omega \mid d_m) & = \prod_{i = 1}^n \sum_{z=1}^K p(\omega \mid z) p(z \mid d_m) \\ & = \prod_{i = 1}^n \sum_{z = 1}^K \phi_{z \omega} \theta_{\omega z} \end{align} $$
因爲文檔之間相互獨立,很容易寫出整個語料的生成機率。求解PLSA 可使用著名的 EM 算法進行求得局部最優解,有興趣的同窗參考 Hoffman 的原始論文,或者李航的《統計學習方法》,此處略去不講。
首先,咱們來看看PLSA和LDA生成文檔的方式。在PLSA中,生成文檔的方式以下:
LDA 中,生成文檔的過程以下:
能夠看出,LDA 在 PLSA 的基礎上,爲主題分佈和詞分佈分別加了兩個 Dirichlet 先驗。
咱們來看一個例子,如圖所示:
上圖中有三個主題,在PLSA中,咱們會以固定的機率來抽取一個主題詞,好比0.5的機率抽取教育這個主題詞,而後根據抽取出來的主題詞,找其對應的詞分佈,再根據詞分佈,抽取一個詞彙。由此,能夠看出PLSA中,主題分佈和詞分佈都是惟一肯定的。可是,在LDA中,主題分佈和詞分佈是不肯定的,LDA的做者們採用的是貝葉斯派的思想,認爲它們應該服從一個分佈,主題分佈和詞分佈都是多項式分佈,由於多項式分佈和狄利克雷分佈是共軛結構,在LDA中主題分佈和詞分佈使用了Dirichlet分佈做爲它們的共軛先驗分佈。因此,也就有了一句廣爲流傳的話 -- LDA 就是 PLSA 的貝葉斯化版本。下面兩張圖片很好的體現了二者的區別:
在PLSA和LDA的兩篇論文中,使用了下面的圖片來解釋模型,它們也很好的對比了PLSA和LDA的不一樣之處。
如今咱們來詳細講解論文中的LDA模型,即上圖。
$\vec \alpha \to \vec \theta_m \to \zeta_{m, n}$, 這個過程表示在生成第m篇文檔的時候,先從抽取了一個doc-topic骰子$\vec \theta_m$, 而後投擲這個骰子生成了文檔中第n個詞的topic編號$\zeta_{m, n}$;
$\vec \beta \to \vec \phi_k \to \omega_{m, n}\mid = \zeta_{m ,n}$, 這個過程表示,從K個topic-word骰子$\vec \phi_k$中,挑選編號爲$k = \zeta_{m, n}$的骰子進行投擲,而後生成詞彙$\omega_{m , n}$;
在LDA中,也是採用詞袋模型,M篇文檔會對應M個獨立Dirichlet-Multinomial共軛結構;K個topic會對應K個獨立的Dirichlet-Multinomial共軛結構。
上面的LDA的處理過程是一篇文檔一篇文檔的過程來處理,並非實際的處理過程。文檔中每一個詞的生成都要拋兩次骰子,第一次拋一個doc-topic骰子獲得 topic, 第二次拋一個topic-word骰子獲得 word,每次生成每篇文檔中的一個詞的時候這兩次拋骰子的動做是緊鄰輪換進行的。若是語料中一共有 N 個詞,則上帝一共要拋 2N次骰子,輪換的拋doc-topic骰子和 topic-word骰子。但實際上有一些拋骰子的順序是能夠交換的,咱們能夠等價的調整2N次拋骰子的次序:前N次只拋doc-topic骰子獲得語料中全部詞的 topics,而後基於獲得的每一個詞的 topic 編號,後N次只拋topic-word骰子生成 N 個word。此時,能夠獲得:
$$ \begin{align} p(\vec w , \vec z \mid \vec \alpha, \vec \beta) & = p(\vec w \mid \vec z, \vec \beta) p(\vec z \mid \vec \alpha) \\ & = \prod_{k=1}^K\frac{\Delta(\vec \phi_K + \vec \beta)}{\Delta (\vec \beta)} \prod_{m=1}^M \frac{\Delta(\vec \theta_m + \vec \alpha)}{\vec \alpha} \end{align} $$
根據上一小節中的聯合機率分佈$p(\vec \omega, \vec z)$, 咱們可使用Gibbs Sampling對其進行採樣。
語料庫$\vec z$中的第i個詞咱們記爲$z_i$, 其中i=(m,n)是一個二維下標,對應於第m篇文檔的第n個詞,用$\lnot i$ 表示去除下標爲i的詞。根據第二小節中的Gibbs Sampling 算法,咱們須要求任一個座標軸 i 對應的條件分佈 $p(z_i=k|\vec z_{\lnot i}, \vec \omega)$ 。假設已經觀測到的詞 $\omega_i=t$, 則由貝葉斯法則,咱們容易獲得:
$$ \begin{align} p(z_i = k \mid \vec z_{\lnot i}, \vec \omega) & ∝ p(z_i = k, \omega_i = t \mid \vec z_{\lnot i}, \vec \omega_{\lnot i}) \end{align} $$
因爲$z_i=k,w_i=t$ 只涉及到第 m 篇文檔和第k個 topic,因此上式的條件機率計算中, 實際上也只會涉及到與之相關的兩個Dirichlet-Multinomial 共軛結構,其它的 M+K−2 個 Dirichlet-Multinomial 共軛結構和$z_i=k,w_i=t$是獨立的。去掉一個詞彙,並不會改變M + K 個Dirichlet-Multinomial共軛結構,只是某些地方的計數減小而已。因而有:
$$ \begin{align} p(\vec \theta_m \mid \vec z_{\lnot i}, \vec \omega_{\lnot i}) & = Dir(\vec \theta_m \mid \vec n_{m, \lnot i} + \vec \alpha) \\ p(\vec \varphi_k \mid \vec z_{\lnot i}, \vec \omega_{\lnot i}) & = Dir(\vec \varphi_k \mid \vec n_{k, \lnot i} + \vec \beta) \end{align} $$
下面進行本篇文章最終的核心數學公式推導:
$$ \begin{align} p(z_i = k \mid \vec z_{\lnot i}, \vec \omega) & \propto p(z_i = k, \omega_i = t \mid \vec z_{\lnot i}, \vec \omega_{\lnot i}) \\ & = \int p(z_i = k, \omega_i = t, \vec \theta_m, \vec \varphi_k \mid \vec z_{\lnot i}, \vec \omega_{\lnot i})d\vec \theta_m d \vec \varphi_k \\ & = \int p(z_i = k, \vec \theta_m, \mid \vec z_{\lnot i}, \vec \omega_{\lnot i}) \cdot p(\omega_i = t, \vec \varphi_k, \mid \vec z_{\lnot i}, \vec \omega_{\lnot i}) d\vec \theta_m d \vec \varphi_k \\ & = \int p(z_i = k \mid \vec \theta_m) p(\vec \theta_m \mid \vec z_{\lnot i}, \vec \omega_{\lnot i}) \cdot p(\omega_i = t \mid \vec \varphi_k)p(\vec \varphi_k \mid \vec z_{\lnot i}, \vec \omega_{\lnot i}) d\vec \theta_m d \vec \varphi_k \\ & = \int p(z_i = k \mid \vec \theta_m) Dir(\vec \theta_m \mid \vec n_{m, \lnot i} + \vec \alpha) d \vec \theta_m \cdot p(\omega_i = t \mid \vec \varphi_k) Dir(\vec \varphi_k \mid \vec n_{k, \lnot i} + \vec \beta) d \vec \varphi_k \\ & = \int \theta_{mk} Dir(\vec \theta_m \mid \vec n_{m, \lnot i} + \vec \alpha) d \vec \theta_m \cdot \int \varphi_{kt} Dir(\vec \varphi_k \mid \vec n_{k, \lnot i} + \vec \beta) d \vec \varphi_k \\ & = E(\theta_{mk}) \cdot E(\varphi_{kt}) \\ & = \hat \theta_{mk} \cdot \hat \varphi_{kt} \end{align} $$
最終獲得的 $\hat \theta_{mk} \cdot \hat \varphi_{kt}$ 就是對應的兩個 Dirichlet 後驗分佈在貝葉斯框架下的參數估計。藉助於前面介紹的Dirichlet 參數估計的公式 ,有:
$$ \begin{align} \hat{\theta}_{mk} &= \frac{n_{m,\neg i}^{(k)} + \alpha_k}{\sum_{k=1}^K (n_{m,\neg i}^{(k)} + \alpha_k)} \\ \hat{\varphi}_{kt} &= \frac{n_{k,\neg i}^{(t)} + \beta_t}{\sum_{t=1}^V (n_{k,\neg i}^{(t)} + \beta_t)} \end{align} $$
最終,咱們獲得LDA 模型的 Gibbs Sampling 公式爲:
$$ \begin{align} p(z_i = k|\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}) \propto \frac{n_{m,\neg i}^{(k)} + \alpha_k}{\sum_{k=1}^K (n_{m,\neg i}^{(k)} + \alpha_k)} \cdot \frac{n_{k,\neg i}^{(t)} + \beta_t}{\sum_{t=1}^V (n_{k,\neg i}^{(t)} + \beta_t)} \end{align} $$
根據上一小節中的公式,咱們的目標有兩個:
訓練的過程:
根據這個topic-word頻率矩陣,咱們能夠計算每個p(word|topic)機率,從而算出模型參數$\vec \varphi_1, \cdots, \vec \varphi_K$, 這就是那 K 個 topic-word 骰子。而語料庫中的文檔對應的骰子參數 $\theta_1, \cdots, \theta_M$ 在以上訓練過程當中也是能夠計算出來的,只要在 Gibbs Sampling 收斂以後,統計每篇文檔中的 topic 的頻率分佈,咱們就能夠計算每個 p(topic|doc) 機率,因而就能夠計算出每個$\theta_m$。因爲參數$\theta_m$ 是和訓練語料中的每篇文檔相關的,對於咱們理解新的文檔並沒有用處,因此工程上最終存儲 LDA 模型時候通常沒有必要保留。一般,在 LDA 模型訓練的過程當中,咱們是取 Gibbs Sampling 收斂以後的 n 個迭代的結果進行平均來作參數估計,這樣模型質量更高。
有了 LDA 的模型,對於新來的文檔 doc, 咱們只要認爲 Gibbs Sampling 公式中的 $\vec \varphi_{kt}$ 部分是穩定不變的,是由訓練語料獲得的模型提供的,因此採樣過程當中咱們只要估計該文檔的 topic 分佈$\theta$就行了. 具體算法以下:
懂 LDA 的面試官一般會詢問求職者,LDA 中主題數目如何肯定?
在 LDA 中,主題的數目沒有一個固定的最優解。模型訓練時,須要事先設置主題數,訓練人員須要根據訓練出來的結果,手動調參,有優化主題數目,進而優化文本分類結果。
LDA 有很是普遍的應用,深層次的懂 LDA 對模型的調優,乃至提出新的模型 以及AI技能的進階有巨大幫助。只是瞭解 LDA 能用來幹什麼,只能忽悠小白。
百度開源了其 LDA 模型,有興趣的讀者能夠閱讀:https://github.com/baidu/Fami...