主題模型

主題模型(topic modeling)是一種常見的機器學習應用,主要用於對文本進行分類。傳統的文本分類器,例如貝葉斯、KNN和SVM分類器,只能將測試對象分到某一個類別中,假設我給出三個分類:「算法」、「網絡」和「編譯」讓其判斷,這些分類器每每將對象歸到某一類中。html

可是若是一個外行徹底給不出備選類別,有沒有分類器可以自動給出類別判斷呢?java

 

有,這樣的分類器就是主題模型。git

 

潛在狄立克雷分配(Latent Dirichlet Allocation,LDA)主題模型是最簡單的主題模型,它描述的是一篇文章是如何產生的。其原理以下圖所示:github

從左往右看,一個主題是由一些詞語的分佈定義的,好比藍色主題是由2%概率的data,2%的number……構成的。一篇文章則是由一些主題構成的,好比右邊的直方圖。具體產生過程是,從主題集合中按機率分佈選取一些主題,從該主題中按機率分佈選取一些詞語,這些詞語構成了最終的文檔(LDA模型中,詞語的無序集合構成文檔,也就是說詞語的順序沒有關係)。算法

 

若是咱們能將上述兩個機率分佈計算清楚,那麼咱們就獲得了一個模型,該模型能夠根據某篇文檔推斷出它的主題分佈,即分類。由文檔推斷主題是文檔生成過程的逆過程。網絡

 

在《LDA數學八卦》一文中,對文檔的生成過程有個很形象的描述:機器學習

LDA是一種使用聯合分佈來計算在給定觀測變量下隱藏變量的條件分佈(後驗分佈)的機率模型,觀測變量爲詞的集合,隱藏變量爲主題。學習

 

LDA的生成過程對應的觀測變量和隱藏變量的聯合分佈以下:測試

式子的基本符號約定——β表示主題,θ表示主題的機率,z表示特定文檔或詞語的主題,w爲詞語。spa

 

β1:K爲全體主題集合,其中βk是第k個主題的詞的分佈(如圖1左部所示)。第d個文檔中該主題所佔的比例爲θd,其中θd,k表示第k個主題在第d個文檔中的比例(圖1右部的直方圖)。第d個文檔的主題全體爲zd,其中zd,n是第d個文檔中第n個詞的主題(如圖1中有顏色的圓圈)。第d個文檔中全部詞記爲wd,其中wd,n是第d個文檔中第n個詞,每一個詞都是固定的詞彙表中的元素。

 

p(β)表示從主題集合中選取了一個特定主題,p(θd)表示該主題在特定文檔中的機率,大括號的前半部分是該主題肯定時該文檔第n個詞的主題,後半部分是該文檔第n個詞的主題與該詞的聯合分佈。連乘符號描述了隨機變量的依賴性,用機率圖模型表述以下:

好比,先選取了主題,才能從主題裏選詞。具體說來,一個詞受兩個隨機變量的影響(直接或間接),一個是肯定了主題後文檔中該主題的分佈θd,另外一種是第k個主題的詞的分佈βk(也就是圖2中的第二個罈子)。

 

沿用相同的符號,LDA後驗分佈計算公式以下:

分子是一個聯合分佈,給定語料庫就能夠輕鬆統計出來。但分母沒法暴力計算,由於文檔集合詞庫達到百萬(假設有w個詞語),每一個詞要計算每一種可能的觀測的組合(假設有n種組合)的機率而後累加獲得先驗機率,因此須要一種近似算法。

 

基於採樣的算法經過收集後驗分佈的樣本,以樣本的分佈求得後驗分佈的近似。

 

θd的機率服從Dirichlet分佈,zd,n的分佈服從multinomial分佈,兩個分佈共軛,所謂共軛,指的就是先驗分佈和後驗分佈的形式相同:

兩個分佈實際上是向量的分佈,向量經過這兩個分佈取樣獲得。採樣方法經過收集這兩個分佈的樣本,以樣本的分佈近似。

 

 

開源項目:

A Java implemention of LDA

LDA4j:https://github.com/hankcs/LDA4j 

 

原地址:http://www.hankcs.com/nlp/lda-java-introduction-and-implementation.html

相關文章
相關標籤/搜索