1. 程式人生 > >文字主題模型之潛在語義分析(LDA:Latent Dirichlet Allocation)

文字主題模型之潛在語義分析(LDA:Latent Dirichlet Allocation)

1、LDA作用
傳統判斷兩個文件相似性的方法是通過檢視兩個文件共同出現的單詞的多少,如TF-IDF等,這種方法沒有考慮到文字背後的語義關聯,可能在兩個文件共同出現的單詞很少甚至沒有,但兩個文件是相似的。
舉個例子,有兩個句子分別如下:
“喬布斯離我們而去了。”
“蘋果價格會不會降?”
可以看到上面這兩個句子沒有共同出現的單詞,但這兩個句子是相似的,如果按傳統的方法判斷這兩個句子肯定不相似,所以在判斷文件相關性的時候需要考慮到文件的語義,而語義挖掘的利器是主題模型,LDA就是其中一種比較有效的模型。
在主題模型中,主題表示一個概念、一個方面,表現為一系列相關的單詞,是這些單詞的條件概率。形象來說,主題就是一個桶,裡面裝了出現概率較高的單詞,這些單詞與這個主題有很強的相關性。
怎樣才能生成主題?對文章的主題應該怎麼分析?這是主題模型要解決的問題。
首先,可以用生成模型來看文件和主題這兩件事。所謂生成模型,就是說,我們認為一篇文章的每個詞都是通過“以一定概率選擇了某個主題,並從這個主題中以一定概率選擇某個詞語”這樣一個過程得到的。那麼,如果我們要生成一篇文件,它裡面的每個詞語出現的概率為:
這裡寫圖片描述


這個概率公式可以用矩陣表示:
這裡寫圖片描述
其中”文件-詞語”矩陣表示每個文件中每個單詞的詞頻,即出現的概率;”主題-詞語”矩陣表示每個主題中每個單詞的出現概率;”文件-主題”矩陣表示每個文件中每個主題出現的概率。
給定一系列文件,通過對文件進行分詞,計算各個文件中每個單詞的詞頻就可以得到左邊這邊”文件-詞語”矩陣。主題模型就是通過左邊這個矩陣進行訓練,學習出右邊兩個矩陣。
2、LDA結構
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最大化這個似然函式,算出α和β,不斷迭代直到收斂。
這裡寫圖片描述

這裡寫圖片描述