主題模型-LDA淺析

破棉襖發表於2015-01-30

(一)LDA作用

        傳統判斷兩個文件相似性的方法是透過檢視兩個文件共同出現的單詞的多少,如TF-IDF等,這種方法沒有考慮到文字背後的語義關聯,可能在兩個文件共同出現的單詞很少甚至沒有,但兩個文件是相似的。

        舉個例子,有兩個句子分別如下:

                “賈伯斯離我們而去了。”

                “蘋果價格會不會降?”

        可以看到上面這兩個句子沒有共同出現的單詞,但這兩個句子是相似的,如果按傳統的方法判斷這兩個句子肯定不相似,所以在判斷文件相關性的時候需要考慮到文件的語義,而語義挖掘的利器是主題模型,LDA就是其中一種比較有效的模型。

        在主題模型中,主題表示一個概念、一個方面,表現為一系列相關的單詞,是這些單詞的條件機率。形象來說,主題就是一個桶,裡面裝了出現機率較高的單詞,這些單詞與這個主題有很強的相關性。

        怎樣才能生成主題?對文章的主題應該怎麼分析?這是主題模型要解決的問題。

        首先,可以用生成模型來看文件和主題這兩件事。所謂生成模型,就是說,我們認為一篇文章的每個詞都是透過“以一定機率選擇了某個主題,並從這個主題中以一定機率選擇某個詞語”這樣一個過程得到的。那麼,如果我們要生成一篇文件,它裡面的每個詞語出現的機率為:


        這個機率公式可以用矩陣表示:


        其中”文件-詞語”矩陣表示每個文件中每個單詞的詞頻,即出現的機率;”主題-詞語”矩陣表示每個主題中每個單詞的出現機率;”文件-主題”矩陣表示每個文件中每個主題出現的機率。

        給定一系列文件,透過對文件進行分詞,計算各個文件中每個單詞的詞頻就可以得到左邊這邊”文件-詞語”矩陣。主題模型就是透過左邊這個矩陣進行訓練,學習出右邊兩個矩陣。

        主題模型有兩種:pLSA(ProbabilisticLatent Semantic Analysis)和LDA(Latent Dirichlet Allocation),下面主要介紹LDA。

(二)LDA介紹

        如何生成M份包含N個單詞的文件,LatentDirichlet Allocation這篇文章介紹了3方法:

        方法一:unigram model

        該模型使用下面方法生成1個文件:

        For each ofthe N words w_n: 
                Choose a word w_n ~ p(w); 

        其中N表示要生成的文件的單詞的個數,w_n表示生成的第n個單詞w,p(w)表示單詞w的分佈,可以透過語料進行統計學習得到,比如給一本書,統計各個單詞在書中出現的機率。

        這種方法透過訓練語料獲得一個單詞的機率分佈函式,然後根據這個機率分佈函式每次生成一個單詞,使用這個方法M次生成M個文件。其圖模型如下圖所示:


        方法二:Mixture of unigram

        unigram模型的方法的缺點就是生成的文字沒有主題,過於簡單,mixture of unigram方法對其進行了改進,該模型使用下面方法生成1個文件:

        Choose a topicz ~ p(z); 

        For each ofthe N words w_n: 

                Choose a word w_n ~ p(w|z); 

        其中z表示一個主題,p(z)表示主題的機率分佈,z透過p(z)按機率產生;N和w_n同上;p(w|z)表示給定z時w的分佈,可以看成一個k×V的矩陣,k為主題的個數,V為單詞的個數,每行表示這個主題對應的單詞的機率分佈,即主題z所包含的各個單詞的機率,透過這個機率分佈按一定機率生成每個單詞。

        這種方法首先選選定一個主題z,主題z對應一個單詞的機率分佈p(w|z),每次按這個分佈生成一個單詞,使用M次這個方法生成M份不同的文件。其圖模型如下圖所示:


        從上圖可以看出,z在w所在的長方形外面,表示z生成一份N個單詞的文件時主題z只生成一次,即只允許一個文件只有一個主題,這不太符合常規情況,通常一個文件可能包含多個主題。

        方法三:LDA(Latent Dirichlet Allocation)

        LDA方法使生成的文件可以包含多個主題,該模型使用下面方法生成1個文件:

        Chooseparameter θ ~ p(θ); 

        For each ofthe N words w_n: 

                Choose a topic z_n ~ p(z|θ); 

                Choose a word w_n ~ p(w|z); 

        其中θ是一個主題向量,向量的每一列表示每個主題在文件出現的機率,該向量為非負歸一化向量;p(θ)是θ的分佈,具體為Dirichlet分佈,即分佈的分佈;N和w_n同上;z_n表示選擇的主題,p(z|θ)表示給定θ時主題z的機率分佈,具體為θ的值,即p(z=i|θ)= θ_i;p(w|z)同上。

        這種方法首先選定一個主題向量θ,確定每個主題被選擇的機率。然後在生成每個單詞的時候,從主題分佈向量θ中選擇一個主題z,按主題z的單詞機率分佈生成一個單詞。其圖模型如下圖所示:


        從上圖可知LDA的聯合機率為:


        把上面的式子對應到圖上,可以大致按下圖理解:


        從上圖可以看出,LDA的三個表示層被三種顏色表示出來:

        1. corpus-level(紅色):α和β表示語料級別的引數,也就是每個文件都一樣,因此生成過程只取樣一次。

        2.document-level(橙色):θ是文件級別的變數,每個文件對應一個θ,也就是每個文件產生各個主題z的機率是不同的,所有生成每個文件取樣一次θ。

        3. word-level(綠色):z和w都是單詞級別變數,z由θ生成,w由z和β共同生成,一個 單詞w對應一個主題z。

        透過上面對LDA生成模型的討論,可以知道LDA模型主要是從給定的輸入語料中學習訓練兩個控制引數α和β,學習出了這兩個控制引數就確定了模型,便可以用來生成文件。其中α和β分別對應以下各個資訊:

        α:分佈p(θ)需要一個向量引數,即Dirichlet分佈的引數,用於生成一個主題θ向量;

        β:各個主題對應的單詞機率分佈矩陣p(w|z)。

        把w當做觀察變數,θ和z當做隱藏變數,就可以透過EM演算法學習出α和β,求解過程中遇到後驗機率p(θ,z|w)無法直接求解,需要找一個似然函式下界來近似求解,原文使用基於分解(factorization)假設的變分法(varialtional inference)進行計算,用到了EM演算法。每次E-step輸入α和β,計算似然函式,M-step最大化這個似然函式,算出α和β,不斷迭代直到收斂。

 

        參考文獻:

David M. Blei, AndrewY. Ng, Michael I. Jordan, LatentDirichlet Allocation, Journal of Machine Learning Research 3, p993-1022,2003

【JMLR’03】Latent Dirichlet Allocation (LDA)- David M.Blei

搜尋背後的奧秘——淺談語義主題計算


        原文地址:http://blog.csdn.net/huagong_adu/article/details/7937616

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1420992/,如需轉載,請註明出處,否則將追究法律責任。

相關文章