文檔主題生成模型(LDA)


一.問題描述

1.1文本建模相關

統計文本建模的目的其實很簡單:就是估算一組參數,這組參數使得整個語料庫出現的概率最大。這是很簡單的極大似然的思想了,就是認為觀測到的樣本的概率是最大的。
建模的目標也是這樣,下面就用數學來表示吧。
一開始來說,先要注意假設了一些隱變量z,也就是topic。每個文檔都符合一個topic的分布,另外是每個topic里面的詞也是符合一個分布的,這個似然是以文檔為單位的。極大似然式子全部寫出來是下面的樣子的

其中的M表示文檔個數。其中的α,就是每個文檔符合的那個topic分布的參數,注意這個家伙是一個向量,后面會再描述;其中的β,就是每個topic里面的詞符合的那個分布的參數,注意這個也是一個向量。
本來到這里看起來挺簡單的,就是一個普通的極大似然估計,估計好參數α和β,就大功告成了。
如果是傳統的極大似然估計,好辦了,求個梯度,梯度為0的地方就是解了,這里這個東西偏偏多了個隱變量,就是每個詞屬於哪個topic的?還有每個文檔屬於哪個topic的?比如,每個文檔的topic是怎么分布的(意思就是,每個文檔是按概率屬於各個topic的,當然,各個topic的詞的分布情況是不一樣的,比如有金融,電商兩種topic,文檔有可能是0.3的概率屬於金融,0.7的概率屬於電商),還有文檔里面每個詞有來自哪種類型的詞的分布的(意思就是,每個詞來自哪個topic的,每個topic里面的詞分布不一致的,如金融topic里面“人民幣”這個詞的概率是0.7,“商品”這個詞的概率是0.3;電商topic里面“人民幣”這個詞的概率是0.4,“商品”這個詞的概率是0.6)。
這個玩笑就開大了,直接求解就玩不動了,只好用其他算法了。
候選的比較大眾的求解有隱變量的算法有EM。
下面先把似然函數用全概率表示出來再做討論吧。
假設一個文檔w_m的topic分布(doc-topic分布)已知,用向量θ_m表示(這個向量的每一項的和為1,總體可以表示一個概率分布),每個詞來自哪個topic已知,用z_(m,n)表示,每個topic的詞分布用矩陣中的一行(topic-word分布)表示(這是一個K*V的矩陣,其中V表示語料庫中的詞的數量,第一行表示第一個topic里面的詞分布)。
在已知上面的這些條件的情況下,計算一個文檔的整個聯合complete-data的聯合分布(意思就是所以變量都已知的情況下)的式子如下
    (3)
中括號里面的是生成詞的過程,大括號里面是生成文檔的過程,最右邊的那個概率就是∅的后驗概率。注意z_m是一個向量,維度為Nm。
這么一堆東西,還是很復雜的,中間有這么多的奇怪的變量,計算起來的復雜讀可想而知了,為了跟似然函數聯系起來,通過對θ_m(doc-topic分布)和Φ(topic-word分布)積分,以及對z_(m,n)求和,得到只有w_m的邊緣分布

(4)
那個累加號被去掉的原因是:在參數θ_m和φ_(z_(m,n) )都已知的情況下,一個詞t被產生的概率是

(5)
這下好了,每個文檔的似然概率有了,可惜沒啥用,實際上這個邊緣分布是求不出來的,因為z_(m,n)是隱藏變量,每個詞都跟θ_m和Φ都跟z_(m,n)有關,那個連乘又是非常難用積分得到的,這個就是耦合現象。要注意聯合分布和邊緣分布對z乘積與加和的區別。另外,有些文獻上是沒有Φ相關的項的,這個看起來各種費勁,以后想清楚后回來解釋。

 

 

1.1.1 概率公式相關討論

對於公式(3),要多討論點,這個是LDA模型的重要的東西,這里說為啥公式是長這個樣子的。
先直接抄《LDA數學八卦》的例子,就是文檔怎么生成的,直接截圖如下

再不懂裝懂,搞個概率圖模型來看看。

最上面的那個公式代表的就是步驟2——先弄K個topic-word骰子,為了符合貝葉斯學派的口味,這個K個骰子是有先驗分布的,先驗分布就是一個Dirichlet分布,參數是β,具體在公式(3)中的表現為p(Φ|β)。
步驟3中,“抽取一個doc-topic骰子”,就是圖下面的那個第一個水平的箭頭,具體在公式(3)中表現為p(θ_m |α)。“投擲這個doc-topic骰子,得到一個topic編號z”這句話說的就是圖下方第二個水平的箭頭,具體在公式(3)中表現為p(z_(m,n) |θ_m)。步驟3中的第二步“選擇K個topic-word骰子中編號為z的那個,投擲這個骰子,得到一個詞”這句話說的是圖右上角那個垂直的箭頭,在公式(3)中具體表現為p(w_(m,n) |φ_(z_(m,n) ))。
就是這個過程,導致了公式(3)長成了現在這個樣子,夠復雜,而且夠棘手,直接去搞公式(4)來計算似然基本沒戲的。

 

 

1.1.2 似然函數求解

上面小節說過了,計算似然函數是沒戲的。
大眾候選算法還有EM,其實也不能解這樣的問題,因為EM算法依賴條件概率

其中的矩陣Θ,就是doc-topic分布矩陣,是一個M*K的矩陣,只是這也是一個隱變量對應的參數,就是文檔的topic的先驗分布。
如果非要用EM算法,這里就需要利用另一個分布去擬合這個條件概率,這個就是變分法。變分法的基本思想就是:因為條件概率不好求,但是聯合概率是已知的,就可以使用一種類似EM的方法,使用另外的一個概率函數去擬合要求的這個條件概率。具體資料以后再整理。
還好的是LDA沒有把參數α和β作為求解的最終目標,目標另有其人。
這個什么極大似然,什么語言模型是個幌子。就像word2vec里面,其實目標是那些詞向量,也就是那些參數值。用LDA來解,就更離譜了,連參數α和β這兩個參數值都不是目標,而是那些隱變量對應的參數比較重要。
不管用什么方法求解,這個LDA的目的是要做推理。
其實需要求的東西其實是下面的式子
       (6)
第一個等號后面的分母p(w_m│α,β)就是上面公式(4)的那個值,參數θ_m(doc-topic分布)和Φ(topic-word分布)不見了是因為這兩個量已經用觀察到的w_(m,n)和對應的z_(m,n)求積分得到了跟這兩個量無關的值,(論文上這個方法叫collapsed Gibbs Sampling,即通過求積分去掉一些未知變量,使Gibbs Sampling的式子更加簡單),其實意思就是,參數θ_m和Φ已經使用MCMC的方法估算到了相應的值,估算的時候使用的樣本就是訓練樣本,這里是一個奇怪的地方,有精力回來解釋得容易理解點。
就算是這樣,哪怕都搞走了這么多參數,分母也不見得好求,一篇文章光求和的項就有K^(N_m )個。
到了這一步,其實大家應該明白了,為啥(6)要表示成那樣給大家看看,因為真的只是看看而已,還可以寫成其他表現形式,但都不重要了,最后都會給出一個結論的,這個分母沒法求,只好用其他辦法了。
公式(6)這個條件概率就是要擬合出來的分布。當然,在擬合這個分布過程中,產生了副產品——所有文檔的在各個topic上的分布。一旦α和β確定了,每個文檔在各個topic上的分布可以直接得到,這個副產品才是求解的目的。
現在問題明確了,貝葉斯推理需要公式(6)的分布,擬合這個分布中產生的副產品是LDA產出的結果,有這結果就能用來做推理。

 

 

二.問題求解

2.1 LDA模型求解目標

上面說清楚了,求解LDA就是擬合公式(6)的那個分布,中間要把doc-topic分布矩陣和topic-word分布矩陣求出來。
論文總提到的方法是Gibbs Sample方法,下面就開始介紹。

2.1.1 LDA Gibbs Sample方法簡介

這里介紹論文中的Gibbs Sample方法怎么擬合的。
這個Gibbs Sample方法也不多介紹,因為具體沒弄得特別理解。只知道這個方法的具體步驟:假設觀測到的變量是x,隱變量是z(這兩個都是向量),通常需要整出來的都是條件概率p(z|x),只是這個條件概率比較難求,只知道了聯合概率p(z,x)(必須知道),Gibbs Sample方法的處理方式就是構造下面的條件概率

使用上面的條件抽取z的R個樣本z_r,r∈[1,R],當樣本數量足夠多的時候,條件概率可以用下面的式子近似了

其中的δ函數形式是

也就是,如果u是個0向量,就是1,否則是0.
解決的方案有了,還有個條件需要具備,就是聯合概率。

 

 

2.1.2求聯合概率

聯合概率表示如下

這個聯合分布是公式(3)利用積分去掉了參數θ_m(doc-topic分布)和Φ(topic-word分布)得到的,可以看到右邊的式子,第一個概率跟α,第二個概率跟β無關。這樣這兩個概率就可以單獨處理了。
先看第一個分布p(w|z,β),如果給定了一組topic-word分布Φ,這個概率可以從觀測到的詞中生成:

其中zi表示語料庫中的第i個詞的topic,wi表示語料庫中的第i個詞,W表示語料庫中的詞數。
意思是,語料庫中的W個詞是根據主題zi觀察到的獨立多項分布(我們把每個詞看做獨立的多項分布產生的結果,忽略順序因素,所以沒有多項分布的系數),就是一個多項式分布。注意φ_(z_i,w_i )是矩陣Φ中的第zi行第i列的元素,順便提醒一下這個矩陣Φ其實就是LDA要學習的一個東西,是K*V的矩陣,K是topic數,V是詞匯數;另一個LDA要學習的東西就是矩陣Θ,也就是doc-topic分布矩陣,是一個M*K的矩陣,矩陣的第一行表示第一個文檔的topic分布。
把這個概率拆分到矩陣Φ的每一行和每一列去,得到下面的式子

其中n_(z,t)表示詞t在topic z中出現的次數。
那么要求的第一個分布p(w|z,β),就可以通過對Φ的積分來求得

其中是一個V維向量,表示在topic z中,各個詞出現的次數。
從這里看來,整個語料庫就可以認為文檔是K個獨立的多項式分布生成的。
同樣的,第二個分布p(z|α)也可以這么計算,給定了如果給定了一組doc-topic分布Θ,這個概率可以從語料庫中的每個詞的topic來得到

其中di表示第i個詞來自哪個文檔,n_(m,z)表示文檔m中topic z出現的次數。
把這個概率根據矩陣Θ進行積分,就得到第二個分布表示了

其中是一個K維向量,表示在第m個文檔中,各個topic出現的次數。
聯合分布就變成了
     (7)

 

 

2.1.3求完全條件分布

根據上面的公式(7)就能得到Gibbs Sample方法所需要的條件分布
     (8)

其中第一個“=”號的分母,是因為根據(1.2.1)中,一個聯合概率對zi做了積分得到的結果就是沒有這個zi的邊緣分布。表示這個向量沒有第i列,t表示第t個詞。
1、最后一步那個正比符號出現是因為右下角那一項對所有的zi都一樣,無論有一個詞分配到了那個topic, 都是一樣的,而在Gibbs Sample方法中,同等放大是可以的,所以很多的程序實現都只計算這三項。
2、對於第m篇文檔中的第n個詞假設剛好就是語料庫中的第t類詞,它的topic是z,有兩個性質可以使用。另外
利用這個式子,抽樣就可以進行了。
要注意的是,i是要遍歷整個topic空間的,即i從1到K,需要計算K個概率的。
這里的步驟就是不斷迭代的,每次迭代都為每個詞抽樣一個新的topic,然后再根據每個詞對應的topic情況估算doc-topic分布Θ和topic-word分布Φ。

 

 

2.1.4抽樣后更新參數

抽樣后怎么更新兩個分布矩陣中的元素呢?
來點推導,對於語料庫中的第i個詞w_i=t,其topic為z_i=k,同時令i=(m,n),意義為該詞為第m個文檔的第n個詞。
回到(1.1.1)中的概率圖,

這個概率圖分成兩個物理過程來看:
,這個過程表示在生成第m 篇文檔的時候,先從第一個壇子中抽了一個doc-topic骰子θ_m,然后投擲這個骰子生成了文檔中第n個詞的topic編號z_(m,n)=k。
,這個過程表示用如下動作生成語料中第m篇文檔的第n個詞:在上帝手頭的K個topic-word 骰子Φ中,挑選編號為z_(m,n)=k的那個骰子φ_k進行投擲,然后生成詞w_(m,n)=t。
對於第一個過程來說,α→θ_m→z_m這個過程會生成第m篇文檔的所有tipic。《LDA數學八卦》說過,取先驗分布為Dirichlet分布,所以前半部分對應於Dirichlet分布,θ_m→z_m就對應於Multinomial 分布。這樣就構成了一個Dirichlet-Multinomial 共軛結構,如下圖

利用這個共軛結構,可以得到參數θ_m的后驗概率是,M個文檔就有M個這樣的共軛結構,其中n_m是一個K維向量,表示第m個文檔中各個topic產生的詞數。
由於LDA是一個bag-of-words結構,各個詞之間都是可以自由交換的。比如說,在第一步中,可以先把所有文檔的所有詞的topic先全部生成,再把詞一個個生成。這樣的話,第二步也可以所有相同的topic放在一起,把相應的詞生成。這樣的話,對於topic k中的所有詞來說,這一步就變成了,這樣再看,前半部分對應於Dirichlet分布,后半部分對應於Multinomial 分布,整體構成一個Dirichlet-Multinomial 共軛結構,如下圖

利用這個共軛結構,可以得到參數φ_k的后驗概率是,K個topic就有K個這樣的共軛結構,其中n_k是一個V維向量,表示第k個topic中的產生的各個詞的數量。
具體為啥共軛機構會有這樣的效果,具體參看《LDA數學八卦》,里面說得很清楚了。
根據論文《Parameter estimation for text analysis》中θ_(m,k) 和φ_(k,t) 的定義,計算參數矩陣這兩個值的更新方式如下
    (9)
    (10)
這就得到了更新的式子,但是在實際代碼中,往往需要在語料庫去掉第i個詞對應的(z_i,w_i),當然這不會改變分布的共軛結構,在去掉第i個詞后,更新的式子變成如下的情況了。
    (11)
    (12)
公式(11),(12)還可以用來在Gibbs Sample方法中計算完全條件分布(如下
    (13)
這種方式就是《LDA數學八卦》選用的方式。
抽樣的過程也要注意的,就是要把一個詞屬於每個topic的概率都計算完了,利用拋綉球的方式抽到了這個詞的一個topic(拋綉球的方式就是:假如topic1的概率是0.2,topic2的概率是0.3,topic3的概率是0.5,那么就弄10個桶,1號和2號是topic1的,3到5號是topic2的,6到10號是topic3的,產生一個1到10的隨機數(拋的過程),看落到哪個桶就是那個topic)。

 

 

2.2 LDA模型整體流程總結

經過上面的討論,各個環節也算是整理了一遍,當然是選用了其他通用的方法,其實在擬合條件概率p(z│w,α,β)的方法也是有其他的,這里不打算多介紹了。
下面總結一下LDA模型的訓練和推理過程,其實上面那么多的東西,要做的工作其實是能完成對一篇文檔的topic分布的估算,無論是用判別模型來做,還是生成模型的方法來做,LDA其實就是解決了這么一個問題。而LDA是一個生成模型,要追溯樣本當初來源的那個分布,這就導致了各種分布的擬合與假設,這個方面水比較深,有精力后回來再多解釋。
對於目前文本建模的目標來說,是分兩步的:
就是要根據當前語料庫所有的文檔,建立模型,模型建立和選最優往往是伴隨着參數的獲取得到的,就有了各種估計參數的方法;這一步可以稱為訓練過程。
有了最優的參數,模型也建立了,就需要對新來的文檔,根據目前的參數,計算這個文檔的topic分布,這一步可以成為預測過程,也就是推理過程。
借用《LDA數學八卦》的東西,這兩步可以用下面的話描述:
估計模型中的兩個參數:doc-topic分布矩陣Θ={θ_m }_(m=1)^M和topic-word分布矩陣Φ={φ_k }_(k=1)^K。
對於新來的一篇文檔Dnew,能夠計算這篇文檔的topic分布θ_new。

2.2.1 LDA 訓練過程

這個自己就不多寫了,直接從《LDA數學八卦》截個圖吧。


2.2.12LDA 推理過程

訓練過程結束后,得到了參數doc-topic分布矩陣Θ={θ_m }_(m=1)^M和topic-word分布矩陣Φ={φ_k }_(k=1)^K。
第一個doc-topic分布矩陣對於推理來說並沒有用處,在工程上一般不保存,但是,如果訓練過程就是為了對已有文檔進行處理,也可以保存下來就進行使用的。
第二個topic-word分布矩陣Φ={φ_k }_(k=1)^K在推理的時候需要用到。來了一個新文檔后,根據Gibbs Sampling公式(13)(公式(8)也可以的)為每個詞的topic進行抽樣,最終穩定后就得到了這篇文檔的topic分布θ_new,注意在利用公式(13)計算條件概率的時候,公式中的φ ̂_(k,t)保持不變。
直接從《LDA數學八卦》截個圖吧。

到這,LDA模型基本的東西就完了。

 

 

 

三.未整理的符號說明

以上的符號很多,這里提供一個未整理的,只能大致應的,來自騰訊廣告的博客“火光搖曳”。有精力后整理一個本文的吧。

原文:http://blog.csdn.net/mytestmy/article/details/39269105


免責聲明!

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



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