LDA導讀

[論文導讀][教程][介紹]文本處理、圖像標註中的一篇重要論文Latent Dirichlet Allocation



原文信息


Latent Dirichlet Allocation
David.M.Blei
Andrew.Y.Ng
Michael.I.Jordan
JMLR2003
(可google到)


原文的主要內容

有兩種方法設計分類器:
1. discriminative model,就是由樣本直接設計判別函數,例如SVM;
2. generative model,就是先從樣本恢復概率模型——例如我們熟悉的參數方法:混合高斯模型GMM;非參數方法Parzen 窗。然後再充分挖掘模型,用以分類。例如Bayes最大後驗概率準則;或者將模型中的參數當作提取的特徵(參數一般都比較少,所以這麼做實際上是在降維),在這些新特徵上設計分類器(例如又用SVM)。
恢復的模型可生成新的樣本,所以得名generative。

原文就是講了一種建立generative model的方法,用於文本處理。
對文本(document)中各單詞(word)的出現頻率(簡稱詞頻)建立概率模型通常是文本處理的第一步。

開始討論前,先做如下約定:
- 僅考慮文本的詞頻,而不考慮單詞在文本中出現的先後順序及其約束關係
- 文本中的單詞來自大小爲|V|的詞彙表。例如: V = {FILM, MUSIC, TAX, MILLION, STUDENT, TEACHER, SCHOOL}. |V| = 7
- 每篇文本有N個單詞
- 文本來自k個主題(topic)。例如: T = {Arts, Budgets, Education}. k = 3

一種簡單直觀的詞頻概率模型——unigram model(原文Figure 3(a))這樣描述某一文本中單詞的“發生方式”:
For each of the N words w_n:
Choose a word w_n ~ p(w);
其中,w是離散隨機變量,在詞彙表V中取|V|個離散的值。p(w)是w的分佈,可由訓練樣本通過機器學習或其它方法獲得。這個模型就是每個單詞的詞頻,沒有考慮文本的主題,過於簡單。於是我們引出考慮了文本主題的模型——

Mixture of unigram(原文中Figure 3(b)). 它這樣描述某一文本中單詞的“發生方式”:
Choose a topic z ~ p(z);
For each of the N words w_n:
Choose a word w_n ~ p(w|z);
其中,z是離散隨機變量,在主題T中取k個離散值,p(z)是z的分佈;w_n是離散隨機變量,在詞彙表V中取|V|個離散值,p(w|z)是給定z時w的條件分佈。z可取k個值,w可取|V|個值,p(w|z)可看作一個k×|V|的矩陣,可由訓練樣本通過機器學習或其它方法獲得。
對照我們在前面的約定中給出的V和T的具體示例,p(w|z)是3×7矩陣。若p(w|z)的第1行表示主題{Education}——可以想象這個主題的文本中{STUDENT, TEACHER, SCHOOL}的詞頻會高些,其它單詞的詞頻會低些——因此該行的行向量所表示的分佈 p(w|z)會在{STUDENT, TEACHER, SCHOOL}附近出現峯值;若第2行表示主題{Budgets},p(w|z)就會在 {TAX,MILLION}附近出現峯值...
在“發生”一篇文本前先隨機選出p(w|z)的第z行(根據分佈p(z));再依次隨機選出第z行的w_1,w_2,...,w_N列(每次選取都根據分佈p(w|z)),這就“發生”出了文本中的所有單詞。
但是這個模型只允許一篇文本有一個主題,這是不夠妥當的。一篇關於北郵科研經費的文本,可能 {STUDENT, TEACHER, SCHOOL, TAX, MILLION}的詞頻都很高——這個文本同時具有兩個主題 {Education,Budgets}。如何模擬一篇文本多個主題的情形呢?在此,我們跳過pLSI模型,直接引入原文探討的——

Latent Dirichlet Allocation (LDA, 原文中Figure 1). 它這樣描述某一文本中單詞的“發生方式”:
Choose parameter θ ~ p(θ);
For each of the N words w_n:
Choose a topic z_n ~ p(z|θ);
Choose a word w_n ~ p(w|z);
其中θ是一個1×k的隨機行向量,p(θ)是θ的分佈,它的具體函數形式就是Dirichlet分佈,這一分佈保證θ的k個分量 θ_1,θ_2,...,θ_k都取連續的非負值,且θ_1 + θ_2 + ... + θ_k = 1;z_n是離散隨機變量,在主題T中取k個離散值,p(z|θ)是給定θ時z的條件分佈,它的具體函數形式很簡單,就是把θ直接拿來作爲概率值:p(z = i|θ) = θ_i,也就是說z取第 1,2,...k個主題的概率分別是θ_1,θ_2,...,θ_k;w_n是離散隨機變量,在詞彙表V中取|V|個離散值,p(w|z)是給定z_n時 w的條件分佈。和前面一樣,可以把它看作k×|V|的矩陣。
LDA在“發生”一篇文本前,先隨機生成一個1×k的向量θ(根據Dirichlet分佈p(θ)),生成的這個θ非負且歸一化,可以看作某個隨機變量的分佈(也就是說,Dirichlet可以看作是分佈的分佈...);然後隨機選取p(w|z)的第z_1行(根據分佈p(z|θ)),接着隨機選取z_1行的w_1列(根據分佈p(w|z = z_1)),同樣的方法依次選出z_2,w_2,...z_N,w_N,這就“發生”出了文本中的所有單詞。

剩下的任務就是如何根據訓練樣本學習出LDA模型的具體形式。模型無非是含有控制參數的表達式,學習出了參數就確定了模型。我們看看LDA有哪些控制參數呢?
- 分佈p(θ)的表達式需要一個1×k行向量的參數,記爲α
- p(w|z)可看作k×|V|的矩陣,記該矩陣爲β
把w看作觀察變量,θ和z看作隱藏變量,就可以通過著名的EM算法學習出α和β,但這一過程中後驗概率p(θ,z|w)無法計算出解析表達式,因此需要近似解,原文中使用了基於分解(factorization)假設的變分法(Variational Methods),其實也就是先假設θ和z在給定w時條件獨立:p(θ,z|w) ≈ p(θ|w)*p(z|w),然後進行後續推導(參考本導讀“預備知識 ” - Variational Inference)。這一套方法原文叫做variational EM,推導過程確實有些複雜,但最後總結出的不過是幾個可以通過迭代求解的表達式(參見原文5.3節的1.2.兩步)。

最後理一下原文的結構
1 Introduction 綜述其它方法
2 Notation and terminology 符號約定
3 Latent Dirichlet allocation 詳細介紹
4 Relationship with other latent variable models LDA與 unigram, mixture of unigram, pLSI的區別。前兩個本導讀已經提到了,建議讀者再仔細比較pLSI和LDA的區別,理解爲什麼作者說pLSI不是well-defined graphic model
5 Inference and Parameter Estimation Inference部分介紹了 variational inference,就是本導讀前面提到的如何近似計算隱藏變量的後驗概率。Parameter Estimation就是用 EM法估計α和β
6 Examples和7 Applications and Empirical Results 給出的具體例子、應用和實驗結果


預備知識


如果牢固掌握這些預備知識,理解原文會更容易些。

- p(X|Y)的記法。注意|右邊的Y既可以表示隨機變量(已經取定了某具體值),也可以表示普通的非隨機變量。這樣我們可以在最大似然估計和 Bayes方法間方便的“切換”,而不會讓符號記法影響我們的表述。例如,考慮具有確定但未知參數μ,Σ的高斯分佈p(x),可以記爲p(x|μ,Σ); 若按照Bayes學派觀點,可以將μ和Σ也看作隨機變量,x的分佈就能記爲隨機變量μ,Σ取定某值後的條件分佈p(x|μ,Σ)——統一的記法。

- k取1分佈/多項式分佈(Multinomial)。考慮取3個離散值的隨機變量x ~ p(x)。這個看似很平庸的分佈...就是所謂的k 取1分佈或稱多項式分佈。一般我們習慣的把它記爲p(x_i) = u_i, i = 1,2,3,且u_1 + u_2 + u_3 = 1. 但在有些數學推導中,將它記爲指數形式會更方便些.將x看作3維的隨機向量,各分量是“互斥”的,即它只能取(1,0,0),(0,1,0),(0,0,1)三組值。於是可將分佈重新記爲 p(x) = (u_1^x_1)*(u_2^x_2)*(u_3^x_3).注意論文原文中Multinomial就是這兒說的k取1分佈,與一些概率教科書中的定義不同。一般的k維情況依次類推。具體參[Bishop]的2.2節.

- 共軛先驗分佈(Conjugate Prior)。考慮某概率密度函數,要估計其中的參數t。按照Bayes學派的觀點,參數 t ~ p(t).我們有p(t|X) ∝ p(X|t)p(t),這個式子說:在沒有做任何觀測時,我們對t的知識用先驗分佈p(t)表示。當觀察到X 後,就通過該式將先驗概率p(t)更新(計算)爲後驗概率p(t|X),使我們對t的知識增加。仔細觀察,若p(t)與p(X|t)有相同的函數形式,那麼後驗概率p(t|X)就與先驗概率p(t)有相同的函數形式——這使得t的後驗概率與先驗概率具有相同的表達式,只是參數被更新了! 更妙的是,本次後驗概率可以作爲下次觀測時的先驗概率,於是當繼續進行觀測X_2,X_3...時,只是不斷的在更新先驗概率p(t)的參數,p(t)的函數形式不變。具體參見[Bishop]的2.2節。
這也是Bayes學派飽受批評的地方:先驗概率的選取有時只是方便數學推導,而非準確的反映我們的先驗知識。

- Dirichlet分佈。現在我們可以說,Dirichlet分佈就是k取1分佈的Conjugate Prior。若k維隨機向量 θ ~ Drichlet分佈,則θ的k個分量θ_1,θ_2,...,θ_k都取連續的非負值,且 θ_1 + θ_2 + ... + θ_k = 1。Dirichlet分佈的具體表達式參見[Bishop]的2.2節。

- Simplex。考慮2維的例子:以(0,1)與(1,0)爲端點的線段就是simplex。考慮3維的例子,以(0,0,1), (0,1,0),(0,0,1)爲端點的三角形內部就是simplex。更高維的情況可依次類推。考慮θ ~ Drichlet分佈。注意到θ的k個分量 θ_1,θ_2,...,θ_k都取連續的非負值,且θ_1 + θ_2 + ... + θ_k = 1,可知Dirichlet分佈的定義域是一個 simplex.這也就是原文中Figure 2那個三角形的含義(k = 3的示意圖,讓這個simplex三角形平躺在水平面上)。參見 [Bishop]的2.2節

- Graphical Models. 就是用圖來表示隨機變量中的依賴關係。這個tutorial一google一大把。建議參考 [Bishop]的8.1節,瞭解幾個符號(空心圓圈——隱藏(latent)變量,實心圓圈——觀察(observed)變量,方框——重複次數)就足夠看懂原文中的Figure 1和Figure 3了。最多再看看[Bishop]的8.2節

- EM.關於這個的tutorial很多,但我覺得[Bishop]的9.2節是數學處理最爲簡潔,最容易看懂的(有個tutorial在關鍵的幾步中用了大量∑和∏,讓人抓狂) 。另外[Bishop]的9.4節也值得看,爲理解其它內容如variational inference有好處。

- Variational Inference. 就是計算後驗概率的近似方法。考慮隨機變量{X,Z},其中X是觀察變量,Z = {Z_1,Z_2}是隱藏變量。用EM法或做Bayes推理的關鍵一步,就是要求後驗概率p(Z|X).不巧的是,在一些複雜問題中 p(Z|X)沒有解析表達式,需要近似求解.相關的方法很多,一種經常使用的是基於可分解(factorization)假設的方法:p(Z|X) ≈ p(Z_1|X)p(Z_2|X)——就是說強行假設Z_1和Z_2條件獨立——然後進行後續推導。
這一假設當然會產生誤差,考慮二維高斯分佈p(Z|X) = p(Z_1,Z_2|X),Z_1與Z_2不獨立,所以p(Z_1,Z_2|X)的等高圖是同心橢圓,橢圓可任意傾斜(例如,若Z_1與Z_2的線性相關係數是1,則橢圓傾斜45°)。現簡記 p(Z_1|X) = q_1(Z_1), p(Z_2|X) = q_2(Z_2),我們想改變q_1與q_2,用q_1*q_2去擬合 p(Z_1,Z_2|X).但無論如何改變q_1與q_2的形式,q_1*q_2的橢圓等高線都是長軸、短軸分別與Z_1軸、Z_2軸平行!不過,合適的 q_1與q_2保證q_1*q_2與p(Z|X)的峯值點重合,一般這就足以解決實際問題了。詳細講解可以參見[Bishop]的第10章。也可參考 [Winn]的1.8節。
另外,[Winn]提出了通用的計算框架,你不必每次都先用Variational Inference推導出公式,再手工編寫代碼;你只用在一個GUI裏編輯好Graphical Model,再點start...(作爲類比,考慮離散的線性系統轉移函數H(z),你可以由此推導出差分方程的表達式,然後用Matlab編程求解;也可以在Simulink中編輯好框圖,再點start...)


參考文獻


[Bishop] Pattern Recognition And Machine Learning. C.M.Bishop. Springer, 2006(cryppie在本版曾發過電子版)
[Winn] Variational Message Passing and its Applications. John M. Winn. Ph.D. dissertation, 2004(可google到)



網上資源


可google到LDA的Matlab和C實現
http://vibes.sourceforge.net/index.shtml john winn的通用框架,Java實現(裏面有文檔指導怎樣在Matlab中調Java)。
X

 

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