我們日常生活中總是產生大量的文本,如果每一個文本存儲為一篇文檔, 那么每篇文丹從人的觀察來說就是有序的詞的序列d=(w1,w2,...wn).
統計文本建模的目的就是追問這些觀察到的語料庫中的詞序列是如何生成的,統計學被人們描述為猜測上帝的游戲,人類產生的所有語料文本我們都可以看成是一個偉大的上帝在天堂上拋擲骰子生成的,我們觀察到的只是上帝玩這個游戲的結果-詞序列構成的語料,而上帝玩這個游戲的過程對我們來說是個黑盒子。所以在統計文本建模中,我們希望猜測出上帝是怎么玩這個游戲的,具體一點,最核心的兩個問題是:
(1)上帝都有什么樣的骰子
(2)上帝是如何拋擲這些骰子的
第一個問題表示模型中都有哪些參數,即骰子中的每一面被擲出的概率,第二個問題表示游戲規則是什么,上帝可能有各種不同類型的骰子,上帝可以按照一定的規則拋擲這些骰子從而產生詞序列。
1、Unigram Model
假設我們的一個詞典中共有V個詞,那么最簡單的Unigram模型認為上帝按照如下的游戲規則產生文本:
這個拋擲骰子的實驗類似于一個多項分布,記為
那么對于一篇文檔d=(w1,w2,...wn),該文檔被生成的概率就是:
而文檔與文檔之間我們認為是獨立的,所以如果語料中有多篇文檔,那么該語料生成的概率是:
在Unigram Model中,我們假設了文檔之間是獨立可交換的,而文檔中的詞也是獨立可交換的,所以一篇文檔相當于一個袋子,里面裝了一些詞,而詞的順序信息就無關緊要了,這樣的模型也稱為詞袋模型(Bag-of-words)。
此時語料的概率是:
所以,我們現在的任務就是估計模型中的參數p了,即問上帝擁有的骰子各個面出現的概率有多大,統計學家種頻率派的觀點,可能這樣得到概率的估計值:
而對于這樣的估計方法,貝葉斯統計學派的統計學家是不會同意的,他們不認為上帝只有這么一個骰子,也就是說,以上模型參數p不是唯一固定的,他們認為上帝按照以下的規則進行游戲:
上帝的這個壇子里面,骰子可以是無窮多個,有些類型的骰子數量多,有些類型的骰子數量少,所以從概率分布的角度看,壇子里面的骰子p服從一個先驗概率分布:
所以,在貝葉斯學派看來,語料的概率是這樣計算的:由于我們并不知道上帝到底用了哪個骰子,所以每個骰子都是可能被使用的,只是使用的概率由先驗分布來決定,對每一個具體的骰子,都有一個產生語料所對應的概率,所以最終數據產生的概率就是對每一個骰子上產生的數據概率進行積分累加求和:
由于每個詞是我們可以看到的,詞的選擇服從一個多項分布,所以對先驗分布一個比較好的選擇就是其對應的共軛先驗分布,即Dirichlet分布:
回顧之前在共軛先驗分布一節中介紹的知識:
所以在給定了先驗分布,各個詞出現頻次的數據服從多項分布,無需計算我們就可以推導出后驗分布:
所以,參數的期望為:
也就是說對于每一個參數pi,我們用下式做參數估計:
進一步,我們可以計算出文本語料產生的概率:
2、LDA Topic Model
LDA的圖模型如下:
這個圖模型表示法有時也稱作“盤子表示法”,圖中的陰影圓圈可以表示觀測變量(observed variable),非陰影圓圈表示潛在變量(latent variable),箭頭表示兩變量間的條件依賴性(conditional dependency),方框表示重復抽樣,重復次數在方框的右下角。
在上面的圖中:
M代表訓練語料中的文章數;
K代表設置的主題個數;
V代表訓練語料庫中出現的所有詞的詞表;
θ是一個M*K的矩陣,θm代表第m篇文章的主題分布;
Φ是一個K*V的矩陣,Φk代表編號為k的主題之上的詞分布;
α是每篇文檔的主題分布的先驗分布Dirichlet分布的參數(也被稱為超參數),θi~Dir(α);
β是每個主題的詞分布的先驗分布Dirichlet分布的參數(也被稱為超參數),Φk~Dir(β);
w是可被觀測的詞.
我們仍然用上帝擲骰子的過程來解釋一下上面的圖模型。在LDA模型中,上帝是按照如下的規則玩文檔生成的游戲的:
假設語料庫中有M篇文檔,所有的word和對應的topic如下所示:
使用概率圖模型表示,LDA模型的游戲過程如圖所示:
這個概率圖可以分解為兩個主要的物理過程:
理解LDA最重要的就是理解這兩個物理過程,LDA模型在基于K個topic生成語料中的M篇文檔的過程中,由于是bag-of-words,有一些物理過程是相互獨立可交換的,由此,LDA生成模型中,M篇文檔會對英語M個獨立的Dirichlet-Multionmial共軛結構,K個topic會對應于K個獨立的Dirichlet-Multionmial共軛結構。所以理解LDA所需要的就是理解Dirichlet-Multionmial共軛。所以,現在我們進入細節,來看看LDA模型是如何被分解為M+K個Dirichlet-Multionmial共軛結構的。
所以我們可以得到:
由于語料中M篇文檔的topics生成過程相互獨立,所以我們得到M個相互獨立的Dirichlet-Multionmial共軛結構,從而我們可以得到整個語料中的topics生成概率:
到目前為止,我們已經得到了M個Dirichlet-Multionmial共軛結構,剩下的K個在哪呢?在上帝按照之前的規則玩LDA游戲的時候,上帝是先完全處理完成一篇文檔,再處理下一篇文檔。文檔中每個詞的生成都要拋兩次骰子,第一次拋doc-topic骰子得到topic,第二次拋一個topic-word骰子得到word,每次生成每篇文檔中的一個詞的時候這兩次拋骰子的動作是緊鄰輪換進行的。如果語料中一共有N個詞,則上帝共需要拋擲2N次骰子。但實際上有一些拋骰子的順序是可以交換的,我們可以等價的調整2N次拋骰子的次序,前N次用于得到topic,后N次用于得到N個word,所以上帝在玩LDA游戲的時候,可以等價的如下進行:
以上游戲是先生成了所有詞的topic,然后對每個詞在給定的topic條件下生成word,在語料中所有詞的topic已經生成的條件下,任何兩個word的生成動作都是可交換的,于是我們把語料中的詞進行交換,把具有相同topic的詞放在一起:
同樣,我們可以得到:
而語料中K個topics生成words的過程相互獨立,所以我們得到K個相互獨立的Dirichlet-Multionmial共軛結構,從而我們可以得到整個語料中詞生成概率:
所以結合兩個物理過程,我們得到:
3、LDA Gibbs采樣公式
4、LDA Gibbs采樣模型訓練
有了LDA模型,我們的目標有兩個:
有了Gibbs Sampling公式,我們就可以給予語料訓練LDA模型,并應用訓練得到的模型對新的文檔進行topic語義分析,訓練的過程就是通過Gibbs采樣獲取語料中的(z,w)的樣本,而模型的所有參數都可以基于最終采樣得到的樣本進行估計,訓練的流程如下:
有了LDA模型,對于新來的文檔,我們通過如下的流程來進行文檔的主題分布:
以下是在另一個博客上得到的類似的訓練流程,可能更加易于大家理解: