本文內容爲Parameter estimation for text analysis閱讀筆記第五篇,如有錯誤或疏漏之處,懇請各位批評指正!
簡介:
Latent Dirichlet Allocation(LDA)是一種概率生成模型,它通過unsupervised learning的方式,去估計multinomial observations的properties。在文本建模中,LDA的方法被用於進行latent semantic analysis (LSA,用於尋找文本中的“主題”信息,而這樣的主題信息被文本中一個個單詞選擇的noise給obsure了) task。第一次提出LSA的是Deerwester et al.,他們指出,文本中詞彙共現的結構可以被用於挖掘隱含的主題結構(實際上,我們人類在只需要看到文本中出現了哪些詞語(單純就是看一個個離散的詞語),就可以判斷這篇文章的主題大概是什麼)。反過來,這些隱含的主題表示可以被用於建模一些linguistic phenomena(例如,同義詞或是一詞多義)。這在信息檢索領域有所應用:我們可以通過將用戶查詢的關鍵詞與文本在meaning level上進行匹配(而不是機械地去匹配文本中是否有與查詢關鍵詞中的詞彙一致的情況)。
LDA的方法與PLSA(probabilistic LSA)方法關係密切,可以說LDA是PLSA的extension。PLSA只能算是一種ML或MAP的estimator,而LDA定義了完整的一套generative process,並且Girolami and Kaban的研究顯示了以Dir(1)爲prior的LDA是一個fully Bayesian estimator。
1. 混合模型(Mixture model)
LDA是一個混合模型。那麼什麼是混合模型?首先我們有多個分佈,我們的data就是從這多個分佈中sample出來的,這就是混合模型。可能還需要解釋:什麼是“從多個分佈中sample出來的”?其實,混合模型sample出data的方法是這樣的:第一步:我們從多個分佈中(依某一個概率)挑選一個分佈出來;第二步:根據我們挑選出來的這個分佈公式本身所表達的概率,從這個分佈中sample一個data出來。因此我們可以把混合模型表示成多個分佈的“加權”形式,其中的“權重”就是這裏“第一步”中用於挑選某個分佈的概率。在LDA中,一個單詞可以從某一個特定的“topic”中生成,而每一個topic擁有一個特有的單詞分佈,這裏每一個topic的單詞分佈都是我們要進行加權的對象。因此LDA中生成某一個單詞的概率可以表示爲:
其中,是一個在特定topic k上,關於單詞的multinomial distribution。我們可以把其中一個拿出來,那麼這單獨一個就是一個unigram model。而則表示單詞w=t從topic k中生成的概率。
然而LDA並沒有爲corpus全局設定統一的topic的分佈,而是爲每一個document都設定了不同的topic的分佈。因此,LDA inference就需要得到兩方面的內容:
1.1. 每一個特定topic k下單詞t的分佈:
1.2. 每一個特定document m下topic的分佈:
所以需要估計的參數有 和 .。並且這兩組參數代表着words和documents的latent-semantic representation。
2. 生成模型 (Generative model):
我們將LDA看作是一個生成的過程,以便之後引出LDA inference所需要的策略。LDA的BN表示如下圖:
由上圖可以進一步認識LDA所描述的生成過程:LDA生成了一個stream of observable words。這個stream被一個個document劃分開來。
對每一個document而言,它首先sample出一個, 作爲該document的topic proportion。然後通過此topic proportion,sample出每一個單詞所對應的topic, 最後再通過topic-specific的單詞分佈sample出一個單詞。其中topic-specific的單詞分佈是global的,即它只會被sample一次,然後整個corpus將共用這一系列的topic-specific的單詞分佈。
有沒有發現什麼特別之處?這裏一共有2個mixture models!並且這兩個mixture models是套在一起的:
2.1. 對於每一個topic,它是由一個mixture model生成的:其中component是document-specific的topic proportion,是一個multinomial distribution;weight是topic proportion,服從的Dirichlet分佈。
2.2. 對於每一個word,它是由一個mixture model生成的:其中component是topic-specific的單詞分佈(就是上文提到的那個只sample一次,整個corpus共用同一個的topic-word分佈),服從multinomial distribution;weight是2.1中所提到的document-specific的topic proportion,服從multinomial distribution。
因此,這整個model不單純是一個mixture model,它實際上是一個admixture model。
LDA的整個生成過程如下:
3. 似然 (Likelihoods)
通過LDA的BN,我們可以得到在given hyperparameters下,這些observed和hidden variables的聯合概率公式:
這個公式實際上是在given hyperparameter的情況下,所有variables(hidden和observed)的likelihood。基於這個公式,我們可以導出其他的公式。因此,對於一個term t,它instantiate出來的某一個特定word 在given LDA parameters下的概率,可以通過marginalize 實現:
此式是關於word的mixture model。
由於無論是一個document或是是整個corpus ,它們的likelihood實際上都是各個i.i.d.的的joint likelihood形式:
此時我們暫停一下,先別急着往下看(雖然原文中是直接敘述下文部分的)。但,我們爲什麼要求得word的likelihood?在回答這個問題前,我們必須清楚的一件事是:我們的目的是什麼?進行文本的latent semantic analysis。那麼我們怎麼得到這些隱含的文本語義?通過我們模型中的參數: (得到每一個document包含主題的情況,即document-level的meaning)和(每一個主題的單詞分佈,即這個特定主題中,哪些單詞出現的概率高,哪些出現的概率低)。
於是我們知道了我們的目的:即估計參數。那麼我們就自然而言想通過Bayesian inference的方法,得到這些參數的後驗分佈(在given observations的時候)。那麼,在LDA模型中,observations是什麼?observations是我們的words,因此這些參數的後驗分佈實際上就是given 這些單詞時的條件概率分佈。
而在likelihood函數中,這些關係是反過來的:這些待估計的parameters是given出來的,而這些observations是likelihood中的自變量。所以,這也是爲什麼,我們需要在這裏一步步,先構建構建單個單詞的概率分佈,再構建一堆單詞的聯合概率分佈--likelihood。
4. 通過Gibbs sampling進行推斷(Inference via Gibbs sampling)
雖然LDA的模型較爲簡單,但對於它的精確推斷確是intractable的。解決這一問題的主要方法有3種:平均場變分EM、期望傳播和Gibbs sampling。其中Gibbs sampling是一種簡單的、用於高維模型(例如LDA)下的近似推斷的方法,它是馬爾科夫鏈蒙特卡洛(Markov-chain Monte Carlo, MCMC)模擬的一種特例。
MCMC方法通過Markov chain的平穩行爲來模擬高維空間下隨機變量的概率分佈。Markov chain首先會經歷一個稱爲“burn-in period”的階段(用以消除初始化參數的影響),而後進入平穩態。在平穩態上,chain的每一次transition都會生成一個樣本,這個樣本將服從概率分佈。作爲MCMC方法的一個special case,Gibbs sampling方法在隨機變量的每一個維度進行alternatively sampling(given其他所有的隨機變量)。也就是說,每次在採樣前,Gibbs sampling算法先會選出隨機變量的一個維度,我們設爲, 然後以除了之外,其餘所有的隨機變量(記爲)爲condition,從而構造相應的distribution,稱爲“full conditional”,然後依照這個distribution對進行sample。
Gibbs sampling方法的敘述如下:
4.1. 選擇隨機變量的一個維度i
4.2. 從概率分佈中sample出一個 出來
由以上算法我們可以看出,要想執行Gibbs sampling,我們首先要找到概率分佈的表達式。
首先我們引入如下公式:
上式僅僅是一個基本公式,我們在下面會用到,但其中的符號與LDA model中的符號沒有任何關係。
此時聯想到一般情況下,我們採用inference的目的是什麼?目的是,希望通過已知得到未知。已知就是evidence,這裏記作, 未知是hidden variables,這裏記作。因此,對於處理含有latent variables的model時,Gibbs sampling中full conditionals的一般表達式爲(同樣需要注意的是,下面這個公式中的符號與LDA model中的符號沒有任何對應關係,請勿混淆):
當其中的latent variables 是discrete的時候,分母中的積分號將被換爲求和號。當對latent variables 進行過充分sample之後,我們得到一系列sample後的結果:, 其中, R爲採樣的總樣本數。於是我們可以對在inference中,latent variables的posterior做如下估計:
其中 爲Kronecker delta,並有:
5. The collapsed LDA Gibbs sampler
我個人還是比較習慣用英文直接敘述某一個專有名詞,這樣比較一致(因爲中文的翻譯往往有不止一種版本,可能會有些雜亂)。
在LDA模型中,無法被observed到的部分有、 和z, 而在Gibbs sampling中,由於我們只需要得到單詞w和其相應的topic z即可, 和 則完全可以由w和z的共現對統計推算得到,因此我們等於是將和給“collapsed”掉了。這也就是本節的Gibbs sampling中添加了一個“collapsed”的原因。因此呢,我們的後驗分佈就直接只針對topic進行估計:
實際上,只要我們能計算出這個式子,該問題就解決了。但是我們實際上難以計算該式中的分母(因爲分母的加和項共有項)。此時我們就可以採用Gibbs sampling的方法來解決這個問題。爲了去估計上式, Gibbs sampling的方法要求首先計算full conditional:。而又由4.2中第2個公式可以得知,如果我們想要計算這個full conditional, 那麼就需要首先推導出該公式中分子上的joint distribution。
Joint distribution:
在LDA中,我們首先可以對這個Joint distribution進行分解:
上式中,第1行到第2行是聯合概率密度公式推導的常規操作;第2行中的部分條件之所以能在第3行中省略,是由於:1. 和在given 的前提下是相互獨立的;2. 和之間本身就是互相獨立的。
其中,分解之後的第一個因子可以看作是給定每一個單詞所屬於的topic之後,生成每一個單詞的概率。其中每一個單詞生成的概率均服從multinomial distribution:
也就是說,每一個單詞都可以看作,在given相應topic下的multinomial distribution(其中的parameters在given multinomial distribution的時候就已經確定好了)。而這種乘積的方式,其無非是先遍歷了每一個單詞,該單詞所對應的topic,然後再在topic-word matrix去尋找相應的概率值。然而,這種表達方式中的乘積因子數畢竟是不定的,不方便處理,因此我們採用另一種表達方式:首先遍歷topic-word矩陣中的每一個元素,然後統計與該元素相關的word-topic共現對的數量,作爲這個乘積項的指數值,最終的表達式如下:
但是,不要忘了我們的最終目標還是要求:。此時我們需要在上式的基礎上對進行marginalizing:
由上式的推導結果,可以看出,這個distribution可以被當作K個Dirichlet-multinomial models的乘積。這K個models就分別表示着K個topics。
類比於的計算,我們可以首先計算得出:
然後我們繼續仿照上面的步驟,對 進行integrate out的操作:
根據求得的兩個結果,我們能明顯看出共軛的好處。現在我們把這兩個因子整合在一起:
當得到這個joint distribution之後, 我們就可以計算full conditional了。
Full conditional:
由於是full conditional的distribution,所以我們首先要選出一個z(這個z是特定於某一個單詞的,也就是說,這個z是生成某一個特定單詞w的那個z)。於是我們假設我們選擇的單詞的編號是, 此時需要注意的是,之後我們的公式中將用“i”來代替這個座標(m,n)上的單詞或是其對應的topic。並且我們將從i位置上進行topic的sampling:(, )
其中,在第一行公式中,由於 和 之間是相互獨立的,所以可以把 單獨提出來。同時我們也需要注意到,當 的取值發生改變時,不會發生任何的變化。因此我們可以把 當作是constant的,從而在接下來的分析中omit掉。可能有人會問:不是由生成的嗎, 的改變怎麼可能會對 沒有任何影響?我們需要注意的是,這裏的實際上已經不包含 這個condition了,也就是說,它是在 的基礎上,對z進行過marginalize後,所推出的公式 (即),所以z的取值不會對這個式子產生影響(因爲這個式子已經考慮到了z取任何值時的情況)。
此時我們根據剩餘的4個式子,利用之前推導得出的Dirichlet-multinomial models, 就可以推出第2行公式中的正比關係。第2行到第4行的推導則完全是Dirichlet distribution中normalize項的性質和函數的性質。
第4行到第5行的推導實際上是omit掉了第二個因子中的分母,同樣的,因爲當z的取值發生改變時,這個分母的值是不變的,所以我們可以忽略掉這一項,由此導出了最終的正比關係。
Multinomial parameters:
上文中對於z的估計已經做完了,然而我們曾經提到過,對w和z(z實際上是我們在Markov chain中的state)的共現對進行估計之後,就可以對multinomial distribution的參數 和 進行估計。由於我們在之前已經得出了在給定參數 和 下w和z的likelihood,所以我們可以直接分別將這兩個公式與 和 的先驗相結合,來進行 和 的後驗的估計,然後再利用筆記(三)中所述的的推導結論, 來進行最終後驗分佈結果的求解:
大家或許注意到,這裏的兩個後驗分佈的condition並不統一,但其實它們都是一樣的,都是我們已知的三組量:word,與word相對應的topic和hyperparameters。然而對於的後驗分佈估計,我們其實是不需要知道word具體有哪些,而只用知道這些word對應的topic以及hyperparameters就行。
這裏的 表示第m篇文檔中出現各個topic的數量(也即該文檔中topic-word共現對的統計); 表示第k個topic中各個單詞出現的頻數。
此時,我們已經分別得到了2個參數的posterior distribution。然後我們可以利用Dirichlet distribution期望公式,對兩組參數進行估計:
大家可能有一個疑問:爲什麼我們這裏要採用參數後驗分佈的期望?在回答這個問題前,我們需要明確的是,根據我們得到的後驗分佈,實際上我們已經可以用MAP estimator了--即只用求使這個後驗概率分佈最大的那個參數的取值就行,這實質上是用該參數的“衆數”來作爲該參數取值的代表。但是衆數實際上是有問題的:比如我們有5個人考試,其中兩個人考了100分,其他幾個人的成績分別是60,50,40。那麼此時我們的衆數就是100,但我們可以說這個100代表了這5名考生的一般情況嗎?顯然,採用期望是一個更好的方法,因爲平均值相比於衆數更能反映數據的一般性。
Gibbs sampling algorithm:
當我們得到如上full conditional的公式和兩組參數 和 的估計公式之後,我們就可以根據這三個式子執行Gibbs sampling的整個過程:
這張圖是在《Parameter estimation for text analysis》中的,其中Eq.78, 81, 82分別代表full conditional的公式和兩組參數 和 的估計公式。
我們在開始前,首先需要給出文本, 兩組參數 和 的先驗分佈參數,以及topic數量K。
在Global data中,表示第m個document下第k個topic出現的次數,將所有的topic出現的數量合起來就是, 也就是第m個document中單詞的數量;表示第k個topic下單詞t出現的次數,將所有的單詞在topic k下出現的次數加起來即得到該topic下單詞的數量。同時也需要給計算full conditional的結果留出空間保存。
output中,我們需要得到的有,每一個單詞所對應的topic:;多項式分佈的參數 和 ;以及對於hyperparameters 的估計(在原文第6部分中有講,如有時間,我會更新第6部分的內容)。
Gibbs sampling分爲3個periods:
initialization: 對每一個word(該word的位置爲(m,n))所對應的topic(假設sample出來的topic是k)進行隨機初始化。
Gibbs sampling: 順序遍歷每一篇文章中的每一個單詞,先去掉分給該單詞的topic,然後再通過full conditional distribution重新進行topic的sampling。循環進行該步驟,直到收斂爲止。收斂後,再對參數 和 進行估計。
MCMC方法的一個缺點在於:我們很難精確判斷其收斂的時刻。原文中通過人工查看對於那些語義相近而又不在同一個corpus中的document和word的聚類效果如何來進行收斂程度的判斷。