印象中,最開始據說「LDA」這個名詞,是緣於rickjin在2013年3月寫的一個LDA科普系列,叫LDA數學八卦,我當時一直想看來着,記得還打印過一次,但不知是由於這篇文檔的前序鋪墊太長(如今才意識到這些「鋪墊」都是深入理解LDA 的基礎,但若是沒有人幫助初學者提綱挈領、把握主次、理清思路,則很容易陷入LDA的細枝末節之中),仍是由於其中的數學推導細節太多,致使一直沒有完整看完過。html
2013年12月,在我組織的Machine Learning讀書會第8期上,@夏粉_百度 講機器學習中排序學習的理論和算法研究,@沈醉2011 則講主題模型的理解。又一次碰到了主題模型,當時貌似只記得沈博講了一個汪峯寫歌詞的例子,依然沒有理解LDA究竟是怎樣一個東西(但理解了LDA以後,再看沈博主題模型的PPT會很贊)。web
直到昨日下午,機器學習班 第12次課上,鄒講完LDA以後,才真正明白LDA原來是那麼一個東東!上完課後,趁熱打鐵,再次看LDA數學八卦,發現之前看不下去的文檔再看時居然一路都比較順暢,一口氣看完大部。看完大部後,思路清晰了,知道理解LDA,能夠分爲下述5個步驟:算法
本文便按照上述5個步驟來闡述,但願讀者看完本文後,能對LDA有個儘可能清晰完整的瞭解。同時,本文基於鄒講LDA的PPT、rickjin的LDA數學八卦及其它參考資料寫就,能夠定義爲一篇學習筆記或課程筆記,固然,後續不斷加入了不少本身的理解。如有任何問題,歡迎隨時於本文評論下指出,thanks。markdown
關於LDA有兩種含義,一種是線性判別分析(Linear Discriminant Analysis),一種是機率主題模型:隱含狄利克雷分佈(Latent Dirichlet Allocation,簡稱LDA),本文講後者。網絡
另外,我先簡單說下LDA的總體思想,否則我怕你看了半天,鋪了太長的前奏,卻依然因沒見到LDA的影子而顯得「心浮氣躁」,致使不想再繼續看下去。因此,先給你吃一顆定心丸,明白總體框架後,我們再一步步抽絲剝繭,展開來論述。框架
按照wiki上的介紹,LDA由Blei, David M.、Ng, Andrew Y.、Jordan於2003年提出,是一種主題模型,它能夠將文檔集 中每篇文檔的主題以機率分佈的形式給出,從而經過分析一些文檔抽取出它們的主題(分佈)出來後,即可以根據主題(分佈)進行主題聚類或文本分類。同時,它是一種典型的詞袋模型,即一篇文檔是由一組詞構成,詞與詞之間沒有前後順序的關係。機器學習
此外,一篇文檔能夠包含多個主題,文檔中每個詞都由其中的一個主題生成。函數
人類是怎麼生成文檔的呢?LDA的這三位做者在原始論文中給了一個簡單的例子。好比假設事先給定了這幾個主題:Arts、Budgets、Children、Education,而後經過學習訓練,獲取每一個主題Topic對應的詞語。以下圖所示:工具
而後以必定的機率選取上述某個主題,再以必定的機率選取那個主題下的某個單詞,不斷的重複這兩步,最終生成以下圖所示的一篇文章(其中不一樣顏色的詞語分別對應上圖中不一樣主題下的詞):oop
而當咱們看到一篇文章後,每每喜歡推測這篇文章是如何生成的,咱們可能會認爲做者先肯定這篇文章的幾個主題,而後圍繞這幾個主題遣詞造句,表達成文。
LDA就是要幹這事:根據給定的一篇文檔,反推其主題分佈。
通俗來講,能夠假定認爲人類是根據上述文檔生成過程寫成了各類各樣的文章,如今某小撮人想讓計算機利用LDA幹一件事:你計算機給我推測分析網絡上各篇文章分別都寫了些啥主題,且各篇文章中各個主題出現的機率大小(主題分佈)是啥。
然,就是這麼一個看似普通的LDA,一度嚇退了很多想深刻探究其內部原理的初學者。難在哪呢,難就難在LDA內部涉及到的數學知識點太多了。
在LDA模型中,一篇文檔生成的方式以下:
其中,相似Beta分佈是二項式分佈的共軛先驗機率分佈,而狄利克雷分佈(Dirichlet分佈)是多項式分佈的共軛先驗機率分佈。
此外,LDA的圖模型結構以下圖所示(相似貝葉斯網絡結構):
恩,不錯,短短6句話總體歸納了整個LDA的主體思想!但也就是上面短短6句話,卻接連不斷或重複出現了二項分佈、多項式分佈、beta分佈、狄利克雷分佈(Dirichlet分佈)、共軛先驗機率分佈、取樣,那麼請問,這些都是啥呢?
這裏先簡單解釋下二項分佈、多項分佈、beta分佈、Dirichlet 分佈這4個分佈。
二項分佈是從伯努利分佈推動的。伯努利分佈,又稱兩點分佈或0-1分佈,是一個離散型的隨機分佈,其中的隨機變量只有兩類取值,非正即負{+,-}。而二項分佈即重複n次的伯努利試驗,記爲 。簡言之,只作一次實驗,是伯努利分佈,重複作了n次,是二項分佈。二項分佈的機率密度函數爲:
對於k = 0, 1, 2, ..., n,其中的是二項式係數(這就是二項分佈的名稱的由來),又記爲
。回想起高中所學的那丁點機率知識了麼:想必你當年必定死記過這個二項式係數
就是
。
多項分佈是指單次試驗中的隨機變量的取值再也不是0-1的,而是有多種離散值可能(1,2,3...,k)。好比投擲6個面的骰子實驗,N次實驗結果服從K=6的多項分佈。其中
多項分佈的機率密度函數爲:
給定參數和
,取值範圍爲[0,1]的隨機變量 x 的機率密度函數:
其中:
,
。
注:即是所謂的gamma函數,下文會具體闡述。
Dirichlet分佈的的密度函數形式跟beta分佈的密度函數一模一樣:
其中
至此,咱們能夠看到二項分佈和多項分佈很類似,Beta分佈和Dirichlet 分佈很類似,而至於 「 Beta分佈是二項式分佈的共軛先驗機率分佈,而狄利克雷分佈(Dirichlet分佈)是多項式分佈的共軛先驗機率分佈 」 這點在下文中說明。
OK,接下來,我們就按照本文開頭所說的思路:「一個函數:gamma函數,四個分佈:二項分佈、多項分佈、beta分佈、Dirichlet分佈,外加一個概念和一個理念:共軛先驗和貝葉斯框架,兩個模型:pLSA、LDA(文檔-主題,主題-詞語),一個採樣:Gibbs採樣」一步步詳細闡述,爭取給讀者一個儘可能清晰完整的LDA。
(固然,若是你不想深究背後的細節原理,只想總體把握LDA的主體思想,可直接跳到本文第4 部分,看完第4部分後,若仍是想深究背後的細節原理,可再回到此處開始看)
我們先來考慮一個問題(此問題1包括下文的問題2-問題4皆取材自LDA數學八卦):
爲解決這個問題,能夠嘗試計算落在區間[x,x+Δx]的機率。即求下述式子的值:
首先,把 [0,1] 區間分紅三段 [0,x),[x,x+Δx],(x+Δx,1],而後考慮下簡單的情形:即假設n 個數中只有1個落在了區間 [x,x+Δx]內,因爲這個區間內的數X(k)是第k大的,因此[0,x)中應該有 k−1 個數,(x+Δx,1] 這個區間中應該有n−k 個數。以下圖所示:
從而問題轉換爲下述事件E:
對於上述事件E,有:
其中,o(Δx)表示Δx的高階無窮小。顯然,因爲不一樣的排列組合,即n個數中有一個落在 [x,x+Δx]區間的有n種取法,餘下n−1個數中有k−1個落在[0,x)的有種組合,因此和事件E等價的事件一共有
個。
若是有2個數落在區間[x,x+Δx]呢?以下圖所示:
相似於事件E,對於2個數落在區間[x,x+Δx]的事件E’:
有:
從上述的事件E、事件E‘中,能夠看出,只要落在[x,x+Δx]內的數字超過一個,則對應的事件的機率就是 o(Δx)。因而乎有:
從而獲得的機率密度函數
爲:
至此,本節開頭提出的問題獲得解決。然仔細觀察的機率密度函數,發現式子的最終結果有階乘,聯想到階乘在實數上的推廣
函數:
二者結合是否會產生奇妙的效果呢?考慮到具備以下性質:
故將代入到的機率密度函數
中,可得:
而後取,
,轉換
獲得:
若是熟悉beta分佈的朋友,可能會驚呼:哇,居然推出了beta分佈!
在機率論中,beta是指一組定義在區間的連續機率分佈,有兩個參數
和
,且
。
beta分佈的機率密度函數是:
其中的即是
函數:
隨機變量X服從參數爲的beta分佈一般寫做:。
回顧下1.1節開頭所提出的問題:「問題1 隨機變量,把這n 個隨機變量排序後獲得順序統計量
,而後請問
的分佈是什麼。」 若是,我們要在這個問題的基礎上增長一些觀測數據,變成問題2:
根據「Yi中有個比
小,
個比
大」,換言之,Yi中有
個比
小,
個比
大,因此
是
中第
大的數。
根據1.1節最終獲得的結論「只要落在[x,x+Δx]內的數字超過一個,則對應的事件的機率就是 o(Δx)」,繼而推出事件服從beta分佈,從而可知的機率密度函數爲:
熟悉貝葉斯方法(不熟悉的沒事,參見此文第一部分)的朋友內心估計又犯「嘀咕」了,這不就是貝葉斯式的思考過程麼?
回顧下貝葉斯派思考問題的固定模式:
上述思考模式意味着,新觀察到的樣本信息將修正人們之前對事物的認知。換言之,在獲得新的樣本信息以前,人們對的認知是先驗分佈
,在獲得新的樣本信息
後,人們對
的認知爲
。
類比到如今這個問題上,咱們也能夠試着寫下:
其中對應的是二項分佈
的計數。
更通常的,對於非負實數和
,咱們有以下關係
針對於這種觀測到的數據符合二項分佈,參數的先驗分佈和後驗分佈都是Beta分佈的狀況 ,就是Beta-Binomial共軛。換言之,Beta分佈是二項式分佈的共軛先驗機率分佈。
二項分佈和Beta分佈是共軛分佈意味着,若是咱們爲二項分佈的參數p選取的先驗分佈是Beta分佈,那麼以p爲參數的二項分佈用貝葉斯估計獲得的後驗分佈仍然服從Beta分佈。
此外,如何理解參數和
所表達的意義呢?
、
能夠認爲形狀參數,通俗但不嚴格的理解是,
和
共同控制Beta分佈的函數「長的樣子」:形狀千奇百怪,高低胖瘦,以下圖所示:
什麼又是共軛呢?軛的意思是束縛、控制,共軛從字面上理解,則是共同約束,或互相約束。
在貝葉斯機率理論中,若是後驗機率P(θ|x)和先驗機率p(θ)知足一樣的分佈律,那麼,先驗分佈和後驗分佈被叫作共軛分佈,同時,先驗分佈叫作似然函數的共軛先驗分佈。
好比,某觀測數據服從機率分佈P(θ) 時,當觀測到新的X數據時,咱們通常會遇到以下問題:
事實上,根據根據貝葉斯公式可知:
其中,P(x|θ)表示以預估θ爲參數的x機率分佈,能夠直接求得,P(θ)是已有原始的θ機率分佈。
因此,若是咱們選取P(x|θ)的共軛先驗做爲P(θ)的分佈,那麼P(x|θ)乘以P(θ),而後歸一化的結果P(θ|x)跟和P(θ)的形式同樣。換句話說,先驗分佈是P(θ),後驗分佈是P(θ|x),先驗分佈跟後驗分佈同屬於一個分佈族,故稱該分佈族是θ的共軛先驗分佈(族) 。
舉個例子。投擲一個非均勻硬幣,可使用參數爲θ的伯努利模型,θ爲硬幣爲正面的機率,那麼結果x的分佈形式爲:
其共軛先驗爲beta分佈,具備兩個參數和
,稱爲超參數(hyperparameters)。且這兩個參數決定了θ參數,其Beta分佈形式爲
而後計算後驗機率
歸一化這個等式後會獲得另外一個Beta分佈,從而證實了Beta分佈確實是伯努利分佈的共軛先驗分佈。
接下來,我們來考察beta分佈的一個性質。
若是,則有:
注意到上式最後結果的右邊積分
其相似於機率分佈,而對於這個分佈有
從而求得
的結果爲
最後將此結果帶入的計算式,獲得:
最後的這個結果意味着對於Beta 分佈的隨機變量,其均值(指望)能夠用來估計。此外,狄利克雷Dirichlet 分佈也有相似的結論,即若是
,一樣能夠證實有下述結論成立:
那什麼是Dirichlet 分佈呢?簡單的理解Dirichlet 分佈就是一組連續多變量機率分佈,是多變量廣泛化的beta分佈。爲了記念德國數學家約翰·彼得·古斯塔夫·勒熱納·狄利克雷(Peter Gustav Lejeune Dirichlet)而命名。狄利克雷分佈常做爲貝葉斯統計的先驗機率。
根據wikipedia上的介紹,維度K ≥ 2(x1,x2…xK-1維,共K個)的狄利克雷分佈在參數α1, ..., αK > 0上、基於歐幾里得空間RK-1裏的勒貝格測度有個機率密度函數,定義爲:
其中,至關因而多項beta函數
且
此外,x1+x2+…+xK-1+xK=1,x1,x2…xK-1>0,且在(K-1)維的單純形上,其餘區域的機率密度爲0。
固然,也能夠以下定義Dirichlet 分佈
其中的稱爲Dirichlet 分佈的歸一化係數:
且根據Dirichlet分佈的積分爲1(機率的基本性質),能夠獲得:
下面,在2.2節問題2的基礎上繼續深刻,引出問題3。
爲了簡化計算,取x3知足x1+x2+x3=1,但只有x1,x2是變量,以下圖所示:
從而有:
繼而獲得因而咱們獲得的聯合分佈爲:
觀察上述式子的最終結果,能夠看出上面這個分佈其實就是3維形式的 Dirichlet 分佈
令,因而分佈密度能夠寫爲
這個就是通常形式的3維 Dirichlet 分佈,即使延拓到非負實數集合,以上機率分佈也是良定義的。
將Dirichlet分佈的機率密度函數取對數,繪製對稱Dirichlet分佈的圖像以下圖所示(截取自wikipedia上):
上圖中,取K=3,也就是有兩個獨立參數x1,x2,分別對應圖中的兩個座標軸,第三個參數始終知足x3=1-x1-x2且α1=α2=α3=α,圖中反映的是參數α從α=(0.3, 0.3, 0.3)變化到(2.0, 2.0, 2.0)時的機率對數值的變化狀況。
爲了論證Dirichlet分佈是多項式分佈的共軛先驗機率分佈,下面我們繼續在上述問題3的基礎上再進一步,提出問題4。
爲了方便討論,記,及
,根據已知條件「
,Yi中落到
,
,
三個區間的個數分別爲 m1,m2」,可得
、
分別是這m+n個數中第
大、第
大的數。因而,後驗分佈
應該爲
,即通常化的形式表示爲:
。
一樣的,按照貝葉斯推理的邏輯,可將上述過程整理以下:
上述貝葉斯分析過程的直觀表述爲:
令,可把
從整數集合延拓到實數集合,從而獲得更通常的表達式以下:
針對於這種觀測到的數據符合多項分佈,參數的先驗分佈和後驗分佈都是Dirichlet 分佈的狀況,就是Dirichlet-Multinomial 共軛。換言之,至此已經證實了Dirichlet分佈的確就是多項式分佈的共軛先驗機率分佈。
意味着,若是咱們爲多項分佈的參數p選取的先驗分佈是Dirichlet分佈,那麼以p爲參數的多項分佈用貝葉斯估計獲得的後驗分佈仍然服從Dirichlet分佈。
進一步,通常形式的Dirichlet 分佈定義以下:
而對於給定的和
,其多項分佈爲:
結論是:Dirichlet分佈和多項分佈
是共軛關係。
在開始下面的旅程以前,先來總結下咱們目前所獲得的最主要的幾個收穫:
經過上文的第2.2節,咱們知道beta分佈是二項式分佈的共軛先驗機率分佈:
其中對應的是二項分佈
的計數。針對於這種觀測到的數據符合二項分佈,參數的先驗分佈和後驗分佈都是Beta分佈的狀況,就是Beta-Binomial 共軛。 」
經過上文的3.2節,咱們知道狄利克雷分佈(Dirichlet分佈)是多項式分佈的共軛先驗機率分佈:
針對於這種觀測到的數據符合多項分佈,參數的先驗分佈和後驗分佈都是Dirichlet 分佈的狀況,就是 Dirichlet-Multinomial 共軛。 」
以及貝葉斯派思考問題的固定模式:
上述思考模式意味着,新觀察到的樣本信息將修正人們之前對事物的認知。換言之,在獲得新的樣本信息以前,人們對的認知是先驗分佈
,在獲得新的樣本信息
後,人們對
的認知爲
。
順便提下頻率派與貝葉斯派各自不一樣的思考方式:
OK,在殺到終極boss——LDA模型以前,再按部就班理解基礎模型:Unigram model、mixture of unigrams model,以及跟LDA最爲接近的pLSA模型。
爲了方便描述,首先定義一些變量:
4.1.1 Unigram model
對於文檔,用
表示詞
的先驗機率,生成文檔
的機率爲:
其圖模型爲(圖中被塗色的w表示可觀測變量,N表示一篇文檔中總共N個單詞,M表示M篇文檔):
或爲:
unigram model假設文本中的詞服從Multinomial分佈,而咱們已經知道Multinomial分佈的先驗分佈爲Dirichlet分佈。
上圖中的表示在文本中觀察到的第n個詞,n∈[1,N]表示該文本中一共有N個單詞。加上方框表示重複,即一共有N個這樣的隨機變量
。其中,p和α是隱含未知變量:
通常α由經驗事先給定,p由觀察到的文本中出現的詞學習獲得,表示文本中出現每一個詞的機率。
4.1.2 Mixture of unigrams model
該模型的生成過程是:給某個文檔先選擇一個主題,再根據該主題生成文檔,該文檔中的全部詞都來自一個主題。假設主題有
,生成文檔
的機率爲:
其圖模型爲(圖中被塗色的w表示可觀測變量,未被塗色的z表示未知的隱變量,N表示一篇文檔中總共N個單詞,M表示M篇文檔):
啊哈,長征兩萬五,通過前面這麼長的鋪墊,終於快要接近LDA模型了!由於跟LDA模型最爲接近的即是下面要闡述的這個pLSA模型,理解了pLSA模型後,到LDA模型也就一步之遙——給pLSA加上貝葉斯框架,即是LDA。
4.2.1 pLSA模型下生成文檔
OK,在上面的Mixture of unigrams model中,咱們假定一篇文檔只有一個主題生成,可實際中,一篇文章每每有多個主題,只是這多個主題各自在文檔中出現的機率大小不同。好比介紹一個國家的文檔中,每每會分別從教育、經濟、交通等多個主題進行介紹。那麼在pLSA中,文檔是怎樣被生成的呢?
假設你要寫M篇文檔,因爲一篇文檔由各個不一樣的詞組成,因此你須要肯定每篇文檔裏每一個位置上的詞。
再假定你一共有K個可選的主題,有V個可選的詞,我們來玩一個扔骰子的遊戲。
1. 假設你每寫一篇文檔會製做一顆K面的「文檔-主題」骰子(扔此骰子能獲得K個主題中的任意一個),和K個V面的「主題-詞項」 骰子(每一個骰子對應一個主題,K個骰子對應以前的K個主題,且骰子的每一面對應要選擇的詞項,V個面對應着V個可選的詞)。
2. 每寫一個詞,先扔該「文檔-主題」骰子選擇主題,獲得主題的結果後,使用和主題結果對應的那顆「主題-詞項」骰子,扔該骰子選擇要寫的詞。
先扔「文檔-主題」的骰子,假設(以必定的機率)獲得的主題是教育,因此下一步即是扔教育主題篩子,(以必定的機率)獲得教育主題篩子對應的某個詞:大學。
3. 最後,你不停的重複扔「文檔-主題」骰子和」主題-詞項「骰子,重複N次(產生N個詞),完成一篇文檔,重複這產生一篇文檔的方法M次,則完成M篇文檔。
上述過程抽象出來便是PLSA的文檔生成模型。在這個過程當中,咱們並未關注詞和詞之間的出現順序,因此pLSA是一種詞袋方法。具體說來,該模型假設一組共現(co-occurrence)詞項關聯着一個隱含的主題類別。同時定義:
表示海量文檔中某篇文檔被選中的機率。
表示詞
在給定文檔
中出現的機率。
表示具體某個主題
在給定文檔
下出現的機率。
表示具體某個詞
在給定主題
下出現的機率,與主題關係越密切的詞,其條件機率
越大。
利用上述的第一、三、4個機率,咱們即可以按照以下的步驟獲得「文檔-詞項」的生成模型:
因此pLSA中生成文檔的整個過程即是選定文檔生成主題,肯定主題生成詞。
4.2.1 根據文檔反推其主題分佈
反過來,既然文檔已經產生,那麼如何根據已經產生好的文檔反推其主題呢?這個利用看到的文檔推斷其隱藏的主題(分佈)的過程(其實也就是產生文檔的逆過程),即是主題建模的目的:自動地發現文檔集中的主題(分佈)。
換言之,人類根據文檔生成模型寫成了各種文章,而後丟給了計算機,至關於計算機看到的是一篇篇已經寫好的文章。如今計算機須要根據一篇篇文章中看到的一系列詞概括出當篇文章的主題,進而得出各個主題各自不一樣的出現機率:主題分佈。即文檔d和單詞w是可被觀察到的,但主題z倒是隱藏的。
以下圖所示(圖中被塗色的d、w表示可觀測變量,未被塗色的z表示未知的隱變量,N表示一篇文檔中總共N個單詞,M表示M篇文檔):
上圖中,文檔d和詞w是咱們獲得的樣本(樣本隨機,參數雖未知但固定,因此pLSA屬於頻率派思想。區別於下文要介紹的LDA中:樣本固定,參數未知但不固定,是個隨機變量,服從必定的分佈,因此LDA屬於貝葉斯派思想),可觀測獲得,因此對於任意一篇文檔,其是已知的。
從而能夠根據大量已知的文檔-詞項信息,訓練出文檔-主題
和主題-詞項
,以下公式所示:
故獲得文檔中每一個詞的生成機率爲:
因爲可事先計算求出,而
和
未知,因此
就是咱們要估計的參數(值) ,通俗點說,就是要最大化這個θ。
用什麼方法進行估計呢,經常使用的參數估計方法有極大似然估計MLE、最大後驗證估計MAP、貝葉斯估計等等。由於該待估計的參數中含有隱變量z,因此咱們能夠考慮EM算法。
4.2.1.1 EM算法的簡單介紹
EM算法,全稱爲Expectation-maximization algorithm,爲指望最大算法,其基本思想是:首先隨機選取一個值去初始化待估計的值,而後不斷迭代尋找更優的
使得其似然函數likelihood
比原來的
要大。換言之,假定如今獲得了
,想求
,使得
EM的關鍵即是要找到的一個下界
(注:
,其中,X表示已經觀察到的隨機變量),而後不斷最大化這個下界,經過不斷求解下界
的極大化,從而逼近要求解的似然函數
。
因此EM算法的通常步驟爲:
1. 隨機選取或者根據先驗知識初始化;
2. 不斷迭代下述兩步
3. 上述第二步後,若是收斂(即
收斂)則退出算法,不然繼續回到第二步。
上述過程比如在二維平面上,有兩條不相交的曲線,一條曲線在上(簡稱上曲線),一條曲線在下(簡稱下曲線
),下曲線爲上曲線的下界。如今對上曲線未知,只已知下曲線,爲了求解上曲線的最高點,咱們試着不斷增大下曲線,使得下曲線不斷逼近上曲線,下曲線在某一個點達到局部最大值並與上曲線在這點的值相等,記錄下這個值,而後繼續增大下曲線,尋找下曲線上與上曲線上相等的值,迭代到
收斂(即
收斂)中止,從而利用當前下曲線上的局部最大值看成上曲線的全局最大值(換言之,EM算法不保證必定能找到全局最優值)。以下圖所示:
如下是詳細介紹。
假定有訓練集,包含m個獨立樣本,但願從中找到該組數據的模型p(x,z)的參數。
而後經過極大似然估計創建目標函數--對數似然函數:
這裏,z是隱隨機變量,直接找到參數的估計是很困難的。咱們的策略是創建的下界,而且求該下界的最大值;重複這個過程,直到收斂到局部最大值。
令Qi是z的某一個分佈,Qi≥0,且結合Jensen不等式,有:
爲了尋找儘可能緊的下界,咱們可讓使上述等號成立,而若要讓等號成立的條件則是:
換言之,有如下式子成立:,且因爲有:
因此可得:
最終獲得EM算法的總體框架以下:
OK,EM算法還會在本博客後面的博文中具體闡述。接下來,回到pLSA參數的估計問題上。
4.2.1.2 EM算法估計pLSA的兩未知參數
首先嚐試從矩陣的角度來描述待估計的兩個未知變量****和
。
這樣,巧妙的把和
轉換成了兩個矩陣。換言之,最終咱們要求解的參數是這兩個矩陣:
因爲詞和詞之間是相互獨立的,因此整篇文檔N個詞的分佈爲:
再因爲文檔和文檔之間也是相互獨立的,因此整個語料庫中詞的分佈爲(整個語料庫M篇文檔,每篇文檔N個詞):
其中,表示詞項
在文檔
中的詞頻,
表示文檔di中詞的總數,顯然有
。
從而獲得整個語料庫的詞分佈的對數似然函數(下述公式中有個小錯誤,正確的應該是:N爲M,M爲N):
如今,咱們須要最大化上述這個對數似然函數來求解參數和
。對於這種含有隱變量的最大似然估計,可使用EM算法。EM算法,分爲兩個步驟:先E-step,後M-step。
利用貝葉斯法則,能夠獲得:
觀察以前獲得的對數似然函數的結果,因爲文檔長度
能夠單獨計算,因此去掉它不影響最大化似然函數。此外,根據E-step的計算結果,把
代入
,因而咱們只要最大化下面這個函數
便可(下述公式中有個小錯誤,正確的應該是:N爲M,M爲N):
這是一個多元函數求極值問題,而且已知有以下約束條件(下述公式中有個小錯誤,正確的應該是:M爲N):
熟悉凸優化的朋友應該知道,通常處理這種帶有約束條件的極值問題,經常使用的方法即是拉格朗日乘數法,即經過引入拉格朗日乘子將約束條件和多元(目標)函數融合到一塊兒,轉化爲無約束條件的極值問題。
這裏咱們引入兩個拉格朗日乘子和
,從而寫出拉格朗日函數(下述公式中有個小錯誤,正確的應該是:N爲M,M爲N):
由於咱們要求解的參數是和
,因此分別對
和
求偏導,而後令偏導結果等於0,獲得(下述公式中有個小錯誤,正確的應該是:N爲M,M爲N):
消去拉格朗日乘子,最終可估計出參數和
(下述公式中有個小錯誤,正確的應該是:N爲M,M爲N):
綜上,在pLSA中:
事實上,理解了pLSA模型,也就差很少快理解了LDA模型,由於LDA就是在pLSA的基礎上加層貝葉斯框架,即LDA就是pLSA的貝葉斯版本(正由於LDA被貝葉斯化了,因此才須要考慮歷史先驗知識,才加的兩個先驗參數)。
4.3.1 pLSA跟LDA的對比:生成文檔與參數估計
在pLSA模型中,咱們按照以下的步驟獲得「文檔-詞項」的生成模型:
下面,我們對比下本文開頭所述的LDA模型中一篇文檔生成的方式是怎樣的:
****從上面兩個過程能夠看出,LDA在PLSA的基礎上,爲主題分佈和詞分佈分別加了兩個Dirichlet先驗。
繼續拿以前講解PLSA的例子進行具體說明。如前所述,在PLSA中,選主題和選詞都是兩個隨機的過程,先從主題分佈{教育:0.5,經濟:0.3,交通:0.2}中抽取出主題:教育,而後從該主題對應的詞分佈{大學:0.5,老師:0.3,課程:0.2}中抽取出詞:大學。
而在LDA中,選主題和選詞依然都是兩個隨機的過程,依然多是先從主題分佈{教育:0.5,經濟:0.3,交通:0.2}中抽取出主題:教育,而後再從該主題對應的詞分佈{大學:0.5,老師:0.3,課程:0.2}中抽取出詞:大學。
那PLSA跟LDA的區別在於什麼地方呢?區別就在於:
看到這,你可能凌亂了,你說面對多個主題或詞,各個主題或詞被抽中的機率不同,因此抽取主題或詞是隨機抽取,還好理解。但如今你說主題分佈和詞分佈自己也都是不肯定的,這是怎麼回事?沒辦法,誰叫Blei等人「強行」給PLSA安了個貝葉斯框架呢,正由於LDA是PLSA的貝葉斯版本,因此主題分佈跟詞分佈自己由先驗知識隨機給定。
進一步,你會發現:
pLSA中,主題分佈和詞分佈肯定後,以必定的機率(、
)分別選取具體的主題和詞項,生成好文檔。然後根據生成好的文檔反推其主題分佈、詞分佈時,最終用EM算法(極大似然估計思想)求解出了兩個未知但固定的參數的值:
(由
轉換而來)和
(由
轉換而來)。
文檔d產生主題z的機率,主題z產生單詞w的機率都是兩個固定的值。
但在貝葉斯框架下的LDA中,咱們再也不認爲主題分佈(各個主題在文檔中出現的機率分佈)和詞分佈(各個詞語在某個主題下出現的機率分佈)是惟一肯定的(而是隨機變量),而是有不少種可能。但一篇文檔總得對應一個主題分佈和一個詞分佈吧,怎麼辦呢?LDA爲它們弄了兩個Dirichlet先驗參數,這個Dirichlet先驗爲某篇文檔隨機抽取出某個主題分佈和詞分佈。
文檔d產生主題z(準確的說,實際上是Dirichlet先驗爲文檔d生成主題分佈Θ,而後根據主題分佈Θ產生主題z)的機率,主題z產生單詞w的機率都再也不是某兩個肯定的值,而是隨機變量。
換言之,LDA在pLSA的基礎上給這兩參數(、
)加了兩個先驗分佈的參數(貝葉斯化):一個主題分佈的先驗分佈Dirichlet分佈
,和一個詞語分佈的先驗分佈Dirichlet分佈
。
綜上,LDA真的只是pLSA的貝葉斯版本,文檔生成後,二者都要根據文檔去推斷其主題分佈和詞語分佈(即二者本質都是爲了估計給定文檔生成主題,給定主題生成詞語的機率),只是用的參數推斷方法不一樣,在pLSA中用極大似然估計的思想去推斷兩未知的固定參數,而LDA則把這兩參數弄成隨機變量,且加入dirichlet先驗。
因此,pLSA跟LDA的本質區別就在於它們去估計未知參數所採用的思想不一樣,前者用的是頻率派思想,後者用的是貝葉斯派思想。
比如,我去一朋友家:
OK,相信已經解釋清楚了。若是是在機器學習班上face-to-face,更好解釋和溝通。
4.3.2 LDA生成文檔過程的進一步理解
上面說,LDA中,主題分佈 —— 好比{ P(zi), i =1,2,3 }等於{0.4,0.5,0.1}或{0.2,0.2,0.6} —— 是由dirichlet先驗給定的,不是根據文檔產生的。因此,LDA生成文檔的過程當中,先從dirichlet先驗中「隨機」抽取出主題分佈,而後從主題分佈中「隨機」抽取出主題,最後從肯定後的主題對應的詞分佈中「隨機」抽取出詞。
那麼,dirichlet先驗究竟是如何「隨機」抽取主題分佈的呢?
事實上,從dirichlet分佈中隨機抽取主題分佈,這個過程不是徹底隨機的。爲了說清楚這個問題,我們得回顧下dirichlet分佈。事實上,若是咱們取3個事件的話,能夠創建一個三維座標系,相似xyz三維座標系,這裏,咱們把3個座標軸弄爲p一、p二、p3,以下圖所示:
在這個三維座標軸所劃分的空間裏,每個座標點(p1,p2,p3)就對應着一個主題分佈,且某一個點(p1,p2,p3)的大小表示3個主題z一、z二、z3出現的機率大小(由於各個主題出現的機率和爲1,因此p1+p2+p3 = 1,且p一、p二、p3這3個點最大取值爲1)。好比(p1,p2,p3) = (0.4,0.5,0.1)便對應着主題分佈{ P(zi), i =1,2,3 } = {0.4,0.5,0.1}。
能夠想象到,空間裏有不少這樣的點(p1,p2,p3),意味着有不少的主題分佈可供選擇,那dirichlet分佈如何選擇主題分佈呢?把上面的斜三角形放倒,映射到底面的平面上,便獲得以下所示的一些彩圖(3個彩圖中,每個點對應一個主題分佈,高度表明某個主題分佈被dirichlet分佈選中的機率,且選不一樣的,dirichlet 分佈會偏向不一樣的主題分佈):
咱們來看上圖中左邊這個圖,高度就是表明dirichlet分佈選取某個座標點(p1,p2,p3)(這個點就是一個主題分佈)的機率大小。以下圖所示,平面投影三角形上的三個頂點上的點:A=(0.9,0.05,0.05)、B=(0.05,0.9,0.05)、C=(0.05,0.05,0.9)各自對應的主題分佈被dirichlet分佈選中的機率值很大,而平面三角形內部的兩個點:D、E對應的主題分佈被dirichlet分佈選中的機率值很小。
因此雖說dirichlet分佈是隨機選取任意一個主題分佈的,但依然存在着P(A) = P(B) = P(C) >> P(D) = P(E),即dirichlet分佈仍是「偏心」某些主題分佈的。至於dirichlet分佈的參數是如何決定dirichlet分佈的形狀的,能夠從dirichlet分佈的定義和公式思考。
此外,就算說「隨機」選主題也是根據主題分佈來「隨機」選取,這裏的隨機不是徹底隨機的意思,而是根據各個主題出現的機率值大小來抽取。好比當dirichlet先驗爲文檔d生成的主題分佈{ P(zi), i =1,2,3 }是{0.4,0.5,0.1}時,那麼主題z2在文檔d中出現的機率即是0.5。因此,從主題分佈中抽取主題,這個過程也不是徹底隨機的,而是按照各個主題出現的機率值大小進行抽取。
4.3.3 pLSA跟LDA的機率圖對比
接下來,對比下LDA跟pLSA的機率模型圖模型,左圖是pLSA,右圖是LDA(右圖不太規範,z跟w都得是小寫, 其中,陰影圓圈表示可觀測的變量,非陰影圓圈表示隱變量,箭頭表示兩變量間的條件依賴性conditional dependency,方框表示重複抽樣,方框右下角的數字表明重複抽樣的次數):
對應到上面右圖的LDA,只有W / w是觀察到的變量,其餘都是隱變量或者參數,其中,Φ表示詞分佈,Θ表示主題分佈, 是主題分佈Θ的先驗分佈(即Dirichlet 分佈)的參數,
是詞分佈Φ的先驗分佈(即Dirichlet 分佈)的參數,N表示文檔的單詞總數,M表示文檔的總數。
因此,對於一篇文檔d中的每個單詞,LDA根據先驗知識肯定某篇文檔的主題分佈θ,而後從該文檔所對應的多項分佈(主題分佈)θ中抽取一個主題z,接着根據先驗知識
肯定當前主題的詞語分佈ϕ,而後從主題z所對應的多項分佈(詞分佈)ϕ中抽取一個單詞w。而後將這個過程重複N次,就產生了文檔d。
換言之:
綜上,M 篇文檔會對應於 M 個獨立的 Dirichlet-Multinomial 共軛結構,K 個 topic 會對應於 K 個獨立的 Dirichlet-Multinomial 共軛結構。
4.3.4 pLSA跟LDA參數估計方法的對比
上面對比了pLSA跟LDA生成文檔的不一樣過程,下面,我們反過來,假定文檔已經產生,反推其主題分佈。那麼,它們估計未知參數所採用的方法又有什麼不一樣呢?
在pLSA中,咱們使用EM算法去估計「主題-詞項」矩陣Φ(由轉換獲得)和「文檔-主題」矩陣Θ(由
轉換獲得)這兩個參數,並且這兩參數都是個固定的值,只是未知,使用的思想其實就是極大似然估計MLE。
而在LDA中,估計Φ、Θ這兩未知參數能夠用變分(Variational inference)-EM算法,也能夠用gibbs採樣,前者的思想是最大後驗估計MAP(MAP與MLE相似,都把未知參數看成固定的值) ,後者的思想是****貝葉斯估計。 貝葉斯估計是對MAP的擴展,但它與MAP有着本質的不一樣,即貝葉斯估計把待估計的參數看做是服從某種先驗分佈的隨機變量。
因爲LDA把要估計的主題分佈和詞分佈看做是其先驗分佈是Dirichlet分佈的隨機變量,因此,在LDA這個估計主題分佈、詞分佈的過程當中,它們的先驗分佈(即Dirichlet分佈)事先由人爲給定,那麼LDA就是要去求它們的後驗分佈(LDA中可用gibbs採樣去求解它們的後驗分佈,獲得指望、
)!
此外,不厭其煩的再插一句,在LDA中,主題分佈和詞分佈自己都是多項分佈,而由上文3.2節可知「Dirichlet分佈是多項式分佈的共軛先驗機率分佈」,所以選擇Dirichlet 分佈做爲它們的共軛先驗分佈。意味着爲多項分佈的參數p選取的先驗分佈是Dirichlet分佈,那麼以p爲參數的多項分佈用貝葉斯估計獲得的後驗分佈仍然是Dirichlet分佈。
4.3.5 LDA參數估計:Gibbs採樣
理清了LDA中的物理過程,下面我們來看下如何學習估計。
相似於pLSA,LDA的原始論文中是用的變分-EM算法估計未知參數,後來發現另外一種估計LDA未知參數的方法更好,這種方法就是:Gibbs Sampling,有時叫Gibbs採樣或Gibbs抽樣,都一個意思。Gibbs抽樣是馬爾可夫鏈蒙特卡爾理論(MCMC)中用來獲取一系列近似等於指定多維機率分佈(好比2個或者多個隨機變量的聯合機率分佈)觀察樣本的算法。
OK,給定一個文檔集合,w是能夠觀察到的已知變量,和
是根據經驗給定的先驗參數,其餘的變量z,θ和φ都是未知的隱含變量,須要根據觀察到的變量來學習估計的。根據LDA的圖模型,能夠寫出全部變量的聯合分佈:
注:上述公式中及下文中,等價上文中定義的
,
等價於上文中定義的
,
等價於上文中定義的
,等價於上文中定義的
。
由於產生主題分佈θ,主題分佈θ肯定具體主題,且
產生詞分佈φ、詞分佈φ肯定具體詞,因此上述式子等價於下述式子所表達的聯合機率分佈
:
其中,第一項因子表示的是根據肯定的主題
和詞分佈的先驗分佈參數
採樣詞的過程,第二項因子
是根據主題分佈的先驗分佈參數
採樣主題的過程,這兩項因子是****須要計算的兩個未知參數。
因爲這兩個過程是獨立的,因此下面能夠分別處理,各個擊破。
第一個因子,能夠根據肯定的主題
和從先驗分佈
取樣獲得的詞分佈Φ產生:
因爲樣本中的詞服從參數爲主題的獨立多項分佈,這意味着能夠把上面對詞的乘積分解成分別對主題和對詞的兩層乘積:
其中,是詞 t 在主題 k 中出現的次數。
回到第一個因子上來。目標分佈須要對詞分佈Φ積分,且結合咱們以前在3.1節定義的Dirichlet 分佈的歸一化係數
的公式
可得:
這個結果能夠看做K個Dirichlet-Multinomial模型的乘積。
如今開始求第二個因子。相似於
的步驟,先寫出條件分佈,而後分解成兩部分的乘積:
其中, 表示的單詞 i 所屬的文檔,
是主題 k 在文章 m 中出現的次數。
對主題分佈Θ積分可得:
綜合第一個因子和第二個因子的結果,獲得的聯合分佈結果爲:
接下來,有了聯合分佈,我們即可以經過聯合分佈來計算在給定可觀測變量 w 下的隱變量 z 的條件分佈(後驗分佈)
來進行貝葉斯分析。
換言之,有了這個聯合分佈後,要求解第m篇文檔中的第n個詞(下標爲的詞)的所有條件機率就好求了。
先定義幾個變量。表示除去
的詞,
,
。
而後,排除當前詞的主題分配,即根據其餘詞的主題分配和觀察到的單詞來計算當前詞主題的機率公式爲:
勘誤:考慮到,因此上述公式的第二行的分子,非p(w,z) *p(z),而是p(w|z)*p(z)。
且有:
最後一步,即是根據Markov鏈的狀態獲取主題分佈的參數Θ和詞分佈的參數Φ。
換言之根據貝葉斯法則和Dirichlet先驗,以及上文中獲得的和
各自被分解成兩部分乘積的結果,能夠計算獲得每一個文檔上Topic的後驗分佈和每一個Topic下的詞的後驗分佈分別以下( 據上文可知:其後驗分佈跟它們的先驗分佈同樣,也都是Dirichlet 分佈 ) :
其中,是構成文檔m的主題數向量,
是構成主題k的詞項數向量。
此外,別忘了上文中2.4節所述的Dirichlet的一個性質,以下:
「 若是,一樣能夠證實有下述結論成立:
即:若是,則
中的任一元素
的指望是:
能夠看出,超參數的直觀意義就是事件先驗的僞計數(prior pseudo-count)。 」
因此,最終求解的Dirichlet 分佈指望爲:
而後將和
的結果代入以前獲得的
的結果中,可得:
仔細觀察上述結果,能夠發現,式子的右半部分即是,這個機率的值對應着
的路徑機率。如此,K 個topic 對應着K條路徑,Gibbs Sampling 便在這K 條路徑中進行採樣,以下圖所示:
何等奇妙,就這樣,Gibbs Sampling經過求解出主題分佈和詞分佈的後驗分佈,從而成功解決主題分佈和詞分佈這兩參數未知的問題。
本文發表後,部分熱心的讀者在微博上分享了他們本身理解LDA的心得,也歡迎更多朋友分享你的理解心得(好比評論在本文下,或評論在微博上),從而在分享、討論的過程當中讓更多人能夠更好的理解:
這個LDA的筆記從11月17日下午開始動筆,到21日基本寫完,25日基本改完,前先後後,基本寫完 + 基本改完,總共花了近10 天的時間,後面還得不斷完善。前5天就像在樹林裏中行走,要走的大方向很是明確,但在選取哪條小道上則頗費了一番周折,但當最後走出了樹林,登上山頂,俯瞰整個森林時,奧,原來它就長這樣,會有一種徹爽的感受!然後5 天,則慢慢開始接近LDA的本質:pLSA的貝葉斯版本。
寫做過程艱難但結果透徹,也但願讀者能享受到其中。
最後,再次感謝本文最主要的參考:LDA原始論文、pLSA原始論文、LDA數學八卦、機器學習班第12次課主題模型PPT,和Parameter estimation for text analysis等等的做者們(本文中大部分的圖片、公式截取自這些參考資料上),由於有他們的創造或分享,我纔有機會理解和再加工LDA,最終讓本文得以成文。
後續幾天會不斷修改完善本文,如有任何問題,可在本文下評論,thanks。
July、二零一四年十一月二十一日。