上個月參加了在北京舉辦SIGKDD國際會議,在個性化推薦、社交網絡、廣告預測等各個領域的workshop上都提到LDA模型,感覺這個模型的應用挺廣泛的,會后抽時間了解了一下LDA,做一下總結:
(一)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://bbs.byr.cn/#!article/PR_AI/2530?p=1
轉載請注明出處,原文地址:http://blog.csdn.net/huagong_adu/article/details/7937616