http://hi.baidu.com/flyer_hit/blog/item/2ec12d251dd9dd6835a80f55.html
http://blog.csdn.net/feixiangcq/archive/2010/06/06/5650672.aspx
http://fan.cos.name/cn/2010/10/fan16/
http://hi.baidu.com/flyer_hit/blog/item/84d29a733c7751148701b089.html
LDA是比PLSA更“高級”的一種topic model。“高級”在哪里呢?--它是一個Bayes Hierarchy Model。
所謂Bayes Hierarchy Model說白了就是把模型的參數看作隨機變量,這樣可以引入控制參數的參數。說起來,比價繞。
Topic model的一個通式為
P(w|d) = sigma{ p(w|z)*p(z|d) }
其中雲里霧里的topic,說白了就是一個一元語言模型,沒有任何特殊的地方。對應上面的公式,就是 p(w|z)。
而topic model,一般指的是兩種分布:第一種就是topic~word的分布,就是p(w|z)。
第二種是p(z|d),這個是doc~topic分布。
有了這兩種分布后,這個文檔集合就有了一種立體化的感覺,閉上眼睛,仔細地想:
doc
|
----------------------------------------
| | ... |
topic_1 topic_2 topic_m
而
topic_i
|
----------------------------------------
| | ... |
word_1 word_2 word_n
一個三層的文檔表示空間躍然紙上。
而最上層,就是人們常說的“降維”,其實是把文檔投影到了“topic”空間。
doc~topic~word
這個Bayes Chain,就可以涵蓋LDA的一個最基本的思想。
而PLSA其實也是這個鏈,那它和LDA有什么區別呢?
最大的區別就在於,doc~topic這一級,PLSA把這一級的所有變量都看作模型的參數,即有多少文檔那么就有多少模型的參數;而LDA引入了一個超 參數,對doc~topic這一個層級進行model。這樣無論文檔有多少,那么最外層模型顯露出來的[對於doc~topic]就只有一個超參數。
那么加什么先驗呢?
最基本的PLSA和LDA在刻畫doc~topic和topic~word都利用了一個模型,就是multinomial model。為了計算的方便及先驗的有意義,共軛先驗是首選。multinomial distribution的共軛分布是Dirichlet distribution,很nice的一個分布。這也是Latent Dirichlet Allocation中Dirichlet的由來。
Dirichlet prior是一個巨牛的先驗:
Bayes prior smoothing的先驗也是Dirichlet,因為在一元語言模型中,也采用了multinomial來刻畫。
而且在PLSA中引入的先驗也是Dirichlet。那么它到底有什么好處呢?讓大家這么對它着迷。計算簡單性是大家都知道的,現在說一點它的奇妙的implict idea:
拿Bayes prior smoothing說:
P(w|d) = {c(w,d)+mu*p(w|c)} / {|d| + mu}
而最大似然的估計是
P_ml(w|d) = c(w,d) / |d|
平滑后的分母為c(w,d)+mu*p(w|c){原來為c(w,d)}
平滑后的分子為|d| + mu {原來為|d|}
所以奇妙的地方就在不同的地方:
好像文檔多了mu個詞,在這個mu新詞中,有mu*p(w|c)這么多的w
這就是pseudo count的思想。理解了這個以后,PLSA加先驗的推導,就不用再手推了。只要把這些多出來的先驗詞加上。一切就OK了。
所以大家請記住吧,這對巨牛的共軛先驗multinomial & Dirichlet
那么如何推導LDA的那些參數呢?
大體有兩種方法:一種是作者的varitional inference;另外一種是Gibbs Sampling。
我比較熟悉的是Gibbs Sampling。大家可以上網去搜GibbsLDA的源代碼。
只要學會了Gibbs Sampling,那么這個代碼很簡單。
Gibbs Sampling的一個最大的優點就是很好理解。具體理解部分略去。
回到上面的話題:
在這個層級結構中:doc~topic~word,剛才說到LDA是對(doc~topic)加了一個先驗。然后他是如何利用這個先驗的呢?利用了exchangabiltity。所謂可交換性,就是conditional independent and identically distributed;注意與i.i.d的區別,“conditional”
對應到LDA中,是那個超參數給定后,才能得出i.i.d。。。需要自己看paper理解。
在我給定了doc~topic的先驗后,對於一個文檔,我取不同的topic的過程完全是獨立的。
這也是層級模型的一個很優美的地方。
Worker
\ \ ... \
product_1 product_2 product_m
舉個直白的例子,一旦當一個工人生產能力確定后,那么那么下面它所生產出來個各種產品都是conditional independent and identically distributed
可交換性其實是當我們信息不充足的時候的一個比較優美的假設,既然我們什么都不知道。那么我們就認為給定它的上級后,下面的東西都conditional independent and identically distributed
再舉一個形象的例子,大家如果是懶人的話就會把襪子攢到一塊洗,那么晾襪子就麻煩了,這么多襪子怎么辦呢?於是商家很機警,他們發明了那種,頭上一個鈎,下面是一個大轉盤的晾襪子的東西,這樣襪子可以晾一圈。。。所以exchangabiltity指的是,如果襪子一樣,那么一旦上面的鈎子固定了,那么下面的襪子怎么轉我們認為都沒有關系的。
而條件獨立則是一個更強的假設,整個轉盤沒有頭上的鈎子,但是確可以懸浮在概率空間中的任何一點,而認為整體形態沒有改變。
好了,關於襪子話題告一段落。
還有一點需要注意的是,為了防止test階段很多新詞的出現,才引入了
topic~word的一個先驗。大家可能想到了,也是Dirichlet分布。
LDA是一個三層貝葉斯概率模型,包含詞、主題和文檔三層結構。
文檔到主題服從Dirichlet分布,主題到詞服從多項式分布。
LDA對主題的混合權重θ(注意是主題維數)進了Dirichlet先驗,用一個超參數α來產生參數θ,即參數的參數。
LDA是一種非監督機器學習技術,可以用來識別大規模文檔集(document collection)或語料庫(corpus)中潛藏的主題信息。它采用了詞袋(bag of words)的方法,這種方法將每一篇文檔視為一個詞頻向量,從而將文本信息轉化為了易於建模的數字信息。但是詞袋方法沒有考慮詞與詞之間的順序,這簡化了問題的復雜性,同時也為模型的改進提供了契機。每一篇文檔代表了一些主題所構成的一個概率分布,而每一個主題又代表了很多單詞所構成的一個概率分布。由於Dirichlet分布隨機向量各分量間的弱相關性(之所以還有點“相關”,是因為各分量之和必須為1),使得我們假想的潛在主題之間也幾乎是不相關的,這與很多實際問題並不相符,從而造成了LDA的又一個遺留問題。
對於語料庫中的每篇文檔,LDA定義了如下生成過程(generative process):
1. 對每一篇文檔,從主題分布中抽取一個主題;
2. 從上述被抽到的主題所對應的單詞分布中抽取一個單詞;
3. 重復上述過程直至遍歷文檔中的每一個單詞。
更形式化一點說,語料庫中的每一篇文檔與 (通過反復試驗等方法事先給定)個主題的一個多項分布(multinomial distribution)相對應,將該多項分布記為 。每個主題又與詞匯表(vocabulary)中的 個單詞的一個多項分布相對應,將這個多項分布記為 。上述詞匯表是由語料庫中所有文檔中的所有互異單詞組成,但實際建模的時候要剔除一些停用詞(stopword),還要進行一些詞干化(stemming)處理等。 和 分別有一個帶有超參數(hyperparameter) 和 的Dirichlet先驗分布。對於一篇文檔 中的每一個單詞,我們從該文檔所對應的多項分布 中抽取一個主題 ,然后我們再從主題 所對應的多項分布 中抽取一個單詞 。將這個過程重復 次,就產生了文檔 ,這里的 是文檔 的單詞總數。這個生成過程可以用如下的圖模型表示:
這個圖模型表示法也稱作“盤子表示法”(plate notation)。圖中的陰影圓圈表示可觀測變量(observed variable),非陰影圓圈表示潛在變量(latent variable),箭頭表示兩變量間的條件依賴性(conditional dependency),方框表示重復抽樣,重復次數在方框的右下角。
該模型有兩個參數需要推斷(infer),一個”文檔-主題“分布 ,另外是 個”主題-單詞“分布 。通過學習(learn)這兩個參數,我們可以知道文檔作者感興趣的主題,以及每篇文檔所涵蓋的主題比例。推斷方法主要有LDA模型作者提出的變分-EM算法,還有現在常用的Gibbs抽樣法。
LDA模型現在已經成為了主題建模(topic modeling)中的一個標准。LDA模型自從誕生之后有了許多擴展,特別是在社會網絡和社會媒體研究領域最為常見。
預備知識
如果牢固掌握這些預備知識,理解原文會更容易些。
- 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節。