LDA主題模型講解及代碼Python實現


1. LDA主題模型詳解

1.1 Beta/Dirichlet 分布的一個性質

如果 圖片, 則

圖片

上式右邊的積分對應到概率分布 圖片,對於這個分布,我們有

圖片

把上式帶入圖片的計算式,得到

(5) 圖片

這說明,對於Beta 分布的隨機變量,其均值可以用圖片來估計。Dirichlet 分布也有類似的結論,如果圖片,同樣可以證明

(6) 圖片

以上兩個結論很重要,因為我們在后面的 LDA 數學推導中需要使用這個結論。

1.2 LDA-math-MCMC

吉布斯采樣(Gibbs sampling)是統計學中用於馬爾科夫蒙特卡洛(MCMC)的一種算法,用於在難以直接采樣時從某一多變量概率分布中近似抽取樣本序列。該序列可用於近似聯合分布、部分變量的邊緣分布或計算積分(如某一變量的期望值)。某些變量可能為已知變量,故對這些變量並不需要采樣。
馬氏鏈定理: 如果一個非周期馬氏鏈具有轉移概率矩陣圖片,且它的任何兩個狀態是連通的,那么 圖片 存在且與圖片無關,記 圖片, 我們有

  1. 圖片
  2. 1
  3. 圖片 是方程 圖片 的唯一非負解

其中,

圖片

圖片稱為馬氏鏈的平穩分布。

這個馬氏鏈的收斂定理非常重要,所有的 MCMC(Markov Chain Monte Carlo) 方法都是以這個定理作為理論基礎的。 定理的證明相對復雜,一般的隨機過程課本中也不給證明,所以我們就不用糾結它的證明了,直接用這個定理的結論就好了。我們對這個定理的內容做一些解釋說明:

  1. 該定理中馬氏鏈的狀態不要求有限,可以是有無窮多個的;

  2. 定理中的“非周期“這個概念我們不打算解釋了,因為我們遇到的絕大多數馬氏鏈都是非周期的;

  3. 兩個狀態圖片是連通並非指圖片 可以直接一步轉移到圖片(圖片),而是指 圖片 可以通過有限的圖片步轉移到達圖片(圖片)。馬氏鏈的任何兩個狀態是連通的含義是指存在一個圖片, 使得矩陣圖片 中的任何一個元素的數值都大於零。

  4. 我們用 圖片 表示在馬氏鏈上跳轉第圖片步后所處的狀態,如果 圖片 存在,很容易證明以上定理的第二個結論。由於

    圖片

    上式兩邊取極限就得到 圖片

從初始概率分布 圖片 出發,我們在馬氏鏈上做狀態轉移,記圖片的概率分布為圖片, 則有

圖片

由馬氏鏈收斂的定理, 概率分布圖片將收斂到平穩分布 圖片。假設到第圖片步的時候馬氏鏈收斂,則有

圖片

所以 圖片 都是同分布的隨機變量,當然他們並不獨立。如果我們從一個具體的初始狀態 圖片 開始,沿着馬氏鏈按照概率轉移矩陣做跳轉,那么我們得到一個轉移序列 圖片 由於馬氏鏈的收斂行為, 圖片 都將是平穩分布 圖片 的樣本。

12312421541513414

*** Markov Chain Monte Carlo***

對於給定的概率分布圖片,我們希望能有便捷的方式生成它對應的樣本。由於馬氏鏈能收斂到平穩分布, 於是一個很的漂亮想法是:如果我們能構造一個轉移矩陣為圖片的馬氏鏈,使得該馬氏鏈的平穩分布恰好是圖片, 那么我們從任何一個初始狀態圖片出發沿着馬氏鏈轉移, 得到一個轉移序列 圖片, 如果馬氏鏈在第圖片步已經收斂了,於是我們就得到了 圖片 的樣本圖片

這個絕妙的想法在1953年被 Metropolis想到了,為了研究粒子系統的平穩性質, Metropolis 考慮了物理學中常見的波爾茲曼分布的采樣問題,首次提出了基於馬氏鏈的蒙特卡羅方法,即Metropolis算法,並在最早的計算機上編程實現。Metropolis 算法是首個普適的采樣方法,並啟發了一系列 MCMC方法,所以人們把它視為隨機模擬技術騰飛的起點。 Metropolis的這篇論文被收錄在《統計學中的重大突破》中, Metropolis算法也被遴選為二十世紀的十個最重要的算法之一。

我們接下來介紹的MCMC 算法是 Metropolis 算法的一個改進變種,即常用的 Metropolis-Hastings 算法。由上一節的例子和定理我們看到了,馬氏鏈的收斂性質主要由轉移矩陣圖片決定, 所以基於馬氏鏈做采樣的關鍵問題是如何構造轉移矩陣圖片,使得平穩分布恰好是我們要的分布圖片。如何能做到這一點呢?我們主要使用如下的定理。

定理:[細致平穩條件] 如果非周期馬氏鏈的轉移矩陣圖片和分布圖片 滿足

(1) 圖片

圖片 是馬氏鏈的平穩分布,上式被稱為細致平穩條件(detailed balance condition)。

其實這個定理是顯而易見的,因為細致平穩條件的物理含義就是對於任何兩個狀態圖片, 從 圖片轉移出去到圖片 而丟失的概率質量,恰好會被從 圖片 轉移回圖片 的概率質量補充回來,所以狀態圖片上的概率質量圖片是穩定的,從而圖片是馬氏鏈的平穩分布。數學上的證明也很簡單,由細致平穩條件可得

圖片

由於圖片 是方程 圖片的解,所以圖片是平穩分布。

假設我們已經有一個轉移矩陣為圖片馬氏鏈(圖片表示從狀態 圖片轉移到狀態圖片的概率,也可以寫為 圖片或者圖片), 顯然,通常情況下

圖片

也就是細致平穩條件不成立,所以 圖片 不太可能是這個馬氏鏈的平穩分布。我們可否對馬氏鏈做一個改造,使得細致平穩條件成立呢?譬如,我們引入一個 圖片, 我們希望

(2) 圖片

取什么樣的 圖片 以上等式能成立呢?最簡單的,按照對稱性,我們可以取

圖片

於是(*)式就成立了。所以有

(3) 圖片

於是我們把原來具有轉移矩陣圖片的一個很普通的馬氏鏈,改造為了具有轉移矩陣圖片的馬氏鏈,而 圖片恰好滿足細致平穩條件,由此馬氏鏈圖片的平穩分布就是圖片

在改造 圖片 的過程中引入的 圖片稱為接受率,物理意義可以理解為在原來的馬氏鏈上,從狀態 圖片圖片 的概率轉跳轉到狀態圖片 的時候,我們以圖片的概率接受這個轉移,於是得到新的馬氏鏈圖片的轉移概率為圖片

image-202109141saa1馬氏鏈轉移和接受概率

假設我們已經有一個轉移矩陣Q(對應元素為圖片), 把以上的過程整理一下,我們就得到了如下的用於采樣概率分布圖片的算法。

上述過程中 圖片 說的都是離散的情形,事實上即便這兩個分布是連續的,以上算法仍然是有效,於是就得到更一般的連續概率分布 圖片的采樣算法,而 圖片 就是任意一個連續二元概率分布對應的條件分布。

以上的 MCMC 采樣算法已經能很漂亮的工作了,不過它有一個小的問題:馬氏鏈圖片在轉移的過程中的接受率 圖片 可能偏小,這樣采樣過程中馬氏鏈容易原地踏步,拒絕大量的跳轉,這使得馬氏鏈遍歷所有的狀態空間要花費太長的時間,收斂到平穩分布圖片的速度太慢。有沒有辦法提升一些接受率呢?

假設 圖片, 此時滿足細致平穩條件,於是

圖片

上式兩邊擴大5倍,我們改寫為

圖片

看,我們提高了接受率,而細致平穩條件並沒有打破!這啟發我們可以把細致平穩條件(**) 式中的圖片 同比例放大,使得兩數中最大的一個放大到1,這樣我們就提高了采樣中的跳轉接受率。所以我們可以取

圖片

於是,經過對上述MCMC 采樣算法中接受率的微小改造,我們就得到了如下教科書中最常見的 Metropolis-Hastings 算法。

圖片

對於分布 圖片,我們構造轉移矩陣 圖片 使其滿足細致平穩條件

圖片

此處 圖片 並不要求是一維的,對於高維空間的 圖片,如果滿足細致平穩條件

圖片

那么以上的 Metropolis-Hastings 算法一樣有效。


1.2.1 ✨重要理解✨

馬氏鏈

MCMC的隨機變量序列是\(X\)\(X\)中有狀態(都是隨機變量):\(x_1\)\(x_2\)\(x_3\)......,有限或者無限可列個。

用時間\(t\)表示\(X\)中的第幾個狀態,寫作\(X_t\)\(X_t\)可以是\(x_1\)\(x_2\)\(x_3\)......中的任意一個,且遵循\(t\)時刻\(x\)的概率分布,每個時刻\(x\)的概率分布都是不同的。如,隨機變量序列\(X\)={\(X_1\)=\(x_2\)\(X_2\)=\(x_1\)\(X_3\)=\(x_1\)\(X_4\)=\(x_3\)\(X_5\)=\(x_3\)},\(X_1\)的概率分布是\(π(x)\)注意大小寫

狀態轉移矩陣

狀態轉移陣\(P_{x_ix_j}\)其概率是從隨機變量\(x_1\)\(x_2\)\(x_3\)......中相互轉換的概率,而不是\(X_1\)\(X_2\)\(X_3\)......之間的轉移概率。簡寫為\(P_{ij}\)


1.3 Gibbs Sampling

對於高維的情形,由於接受率 圖片的存在(通常 圖片), 以上 Metropolis-Hastings 算法的效率不夠高。能否找到一個轉移矩陣Q使得接受率 圖片 呢?我們先看看二維的情形,假設有一個概率分布 圖片, 考察圖片坐標相同的兩個點圖片,我們發現

圖片

所以得到

(4) 圖片

圖片

基於以上等式,我們發現,在 圖片 這條平行於 圖片軸的直線上,如果使用條件分布 圖片做為任何兩個點之間的轉移概率,那么任何兩個點之間的轉移滿足細致平穩條件。同樣的,如果我們在 圖片 這條直線上任意取兩個點 圖片,也有如下等式

圖片

圖片平面上馬氏鏈轉移矩陣的構造

於是我們可以如下構造平面上任意兩點之間的轉移概率矩陣Q

圖片

有了如上的轉移矩陣 Q, 我們很容易驗證對平面上任意兩點 圖片, 滿足細致平穩條件

圖片

於是這個二維空間上的馬氏鏈將收斂到平穩分布 圖片。而這個算法就稱為 Gibbs Sampling 算法,是 Stuart Geman 和Donald Geman 這兩兄弟於1984年提出來的,之所以叫做Gibbs Sampling 是因為他們研究了Gibbs random field, 這個算法在現代貝葉斯分析中占據重要位置。

圖片

圖片二維Gibbs Sampling 算法中的馬氏鏈轉移

以上采樣過程中,如圖所示,馬氏鏈的轉移只是輪換的沿着坐標軸 圖片軸和圖片軸做轉移,於是得到樣本 圖片 馬氏鏈收斂后,最終得到的樣本就是 圖片 的樣本,而收斂之前的階段稱為 burn-in period。額外說明一下,我們看到教科書上的 Gibbs Sampling 算法大都是坐標軸輪換采樣的,但是這其實是不強制要求的。最一般的情形可以是,在圖片時刻,可以在圖片軸和圖片軸之間隨機的選一個坐標軸,然后按條件概率做轉移,馬氏鏈也是一樣收斂的。輪換兩個坐標軸只是一種方便的形式。

以上的過程我們很容易推廣到高維的情形,對於(***) 式,如果圖片 變為多維情形圖片,可以看出推導過程不變,所以細致平穩條件同樣是成立的

(5) 圖片

此時轉移矩陣 Q 由條件分布 圖片 定義。上式只是說明了一根坐標軸的情形,和二維情形類似,很容易驗證對所有坐標軸都有類似的結論。所以圖片維空間中對於概率分布 圖片 可以如下定義轉移矩陣

  1. 如果當前狀態為圖片,馬氏鏈轉移的過程中,只能沿着坐標軸做轉移。沿着圖片 這根坐標軸做轉移的時候,轉移概率由條件概率 圖片定義;
  2. 其它無法沿着單根坐標軸進行的跳轉,轉移概率都設置為 0。

於是我們可以把Gibbs Smapling 算法從采樣二維的 圖片 推廣到采樣圖片 維的 圖片

圖片

以上算法收斂后,得到的就是概率分布圖片的樣本,當然這些樣本並不獨立,但是我們此處要求的是采樣得到的樣本符合給定的概率分布,並不要求獨立。同樣的,在以上算法中,坐標軸輪換采樣不是必須的,可以在坐標軸輪換中引入隨機性,這時候轉移矩陣圖片 中任何兩個點的轉移概率中就會包含坐標軸選擇的概率,而在通常的 Gibbs Sampling 算法中,坐標軸輪換是一個確定性的過程,也就是在給定時刻圖片,在一根固定的坐標軸上轉移的概率是1。

2. 所需工具庫

image-20210811154440334

3. python實現

python工具庫:

image-20210811164032252

3.1 初始化停止語料

image-20210811154801603

image-20210811154842370

3.2 讀入語料數據

image-20210811155014608


image-20210811155056399

3.3 建立詞典

image-20210811155238482

image-20210811155903993

3.4 LDA模型擬合推斷

image-20210811155808263

3.5 隨機打印某10個文檔的主題

image-20210811160123057

image-20210811160208716

image-20210811162207030

image-20210811162436717

4. 項目代碼鏈接

https://gitee.com/JupiterLi/ldapython-project


免責聲明!

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



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