隨着互聯網的發展,文本分析越來越受到重視。由於文本格式的復雜性,人們往往很難直接利用文本進行分析。因此一些將文本數值化的方法就出現了。LDA就是其中一種很NB的方法。 LDA有着很完美的理論支撐,而且有着維度小等一系列優點。本文對LDA算法進行介紹,歡迎批評指正。
本文目錄:
1、Gamma函數
2、Dirichlet分布
3、LDA文本建模
4、吉普斯抽樣概率公式推導
5、使用LDA
1、Gamma函數
T(x)= ∫ tx-1 e-tdt T(x+1) = xT(x)
若x為整數,則有 T(n) = (n-1)!
2、Dirichlet分布
這里拋出兩個問題:
問題1: (1) X1, X2......Xn 服從Uniform(0,1)
(2) 排序后的順序統計量為X(1), X(2), X(3)......X(n)
(3) 問X(k1)和X(k1+k2)的聯合分布式什么
把整個概率區間分成[0,X1) , [X1, X1+Δ), [X1+Δ, X1+X2), [X1+X2, X1+X2+Δ), [X1+X2+Δ,1]
X(k1) 在區間[X1, X1+Δ), X(k1+k2) 在區間[X1+X2, X1+X2+Δ)。 我們另X3 = 1-X1-X2.
則,
即Dir(x1, x2, x3| k1, k2, n-k1-k2+1)
問題2: (1) X1, X2......Xn 服從Uniform(0,1), 排序后的順序統計量為X(1), X(2), X(3)......X(n)
(2) 令p1 = [0, X(k1)], p2 = [X(k1), X(k1+k2)], p3 = 1-p1-p2
(3) 另外給出新的信息, Y1, Y2.....Ym服從Uniform(0, 1), Yi落到[0,X(k1)], [X(k1), X(k1+k2)], [X(k1+k2), 1]的數目分別是m1, m2, m3
(4) 問后驗概率 p(p1,p2,p3|Y1,Y2,....Ym)的分布。
其實這個問題和問題1很像,只是在同樣的范圍內多了一些點而已。 因此這個概率分布為 Dir(x1,x2,x3| k1+m1, k2+m2, n-k1-k2+1+m3)。
我們發現這么一個規律 Dir(p|k) + multCount(m) = Dir(p|k+m)。 即狄利克雷分布是多項分布的共軛分布。
狄利克雷分布有這么一個性質:如果則,
3、 LDA文本建模
首先我們想一篇文章是如何形成的:作者在寫一篇文章的時候首先會想這個文章需要包含什么主題呢。比如在寫武俠小說的時候,首先會想小說里邊需要包含武俠、愛情、親情、搞笑四個主題。並且給這四個主題分配一定的比例(如武俠0.4,愛情0.3,親情0.2,搞笑0.1)。每個主題會包含一些word,不同word的概率也是不一樣的。 因此我們上帝在生成一篇文章的時候流程是這個樣子的:
(1)上帝有兩個壇子的骰子,第一個壇子裝的是doc-topic骰子,第二個壇子裝的是topic-wod骰子。
(2)上帝隨機的從二個壇子中獨立抽取了k個topic-doc骰子,編號1-K。
(3)每次生成一篇新的文檔前,上帝先從第一個壇子中隨機抽取一個doc-topic骰子,然后重復如下過程生成文檔中的詞。
<1>、投擲這個doc-topic骰子,得到一個topic的編號z。
<2>、選擇K個topic-word骰子中編號為z的的那個,投擲這個骰子, 於是就得到了這個詞。
假設語料庫中有M篇文章, 所有的word和對應的topic如下表示:
我們可以用下圖來解釋這個過程:
一共兩個物理過程:
第一個過程: ,這個過程分兩個階段。第一個階段是上帝在生成一篇文檔之前,先抽出一個主題分布的骰子
,這個分布選擇了狄利克雷分布(狄利克雷分布是多項分布的共軛分布)。 第二個階段根據
來抽樣得到每個單詞的topic。這是一個多項分布。 整個過程是符合狄利克雷分布的。
第二個過程:,這個過程也分兩個階段。第一個階段是對每個主題,生成word對應的概率,即選取的骰子
,這個分布也是選擇了狄利克雷分布。 第二個階段是根據
,對於確定的主題選擇對應的word,這是一個多項分布。因此,整個過程是狄利克雷分布。
4、吉普斯抽樣概率公式推導
LDA的全概率公式為: 。 由於
是觀測到的已知數據,只有
是隱含的變量,所以我們需要關注的分布為:
。 我們利用Gibbs Sampling進行抽樣。 我們要求的某個位置i(m,n)對應的條件分布為
。
是一個定值,因此原公式成立。
下邊是公式的推導:
又由於根據狄利克雷分布的特性:
抽樣的時候,首先隨機給每個單詞一個主題,然后用和
進行Gibbs抽樣,抽樣后更新這兩個值,一直迭代到收斂(EM過程)。
至此抽樣就結束了。
5、使用LDA
抽樣結束后,我們可以統計和
來得到
和
。
對於LDA我們的目標有兩個:
(1)得到文章庫中每篇文章的主題分布
(2)對於一篇新來的文章,能得到它的主題分布。
第一個目標很容易就能達到。下面主要介紹如果計算 一篇新文章的主題分布。這里我們假設是不會變化的。因此對於一篇新文章到來之后,我們直接用Gibbs Sampling得到新文章的
就好了。 具體抽樣過程同上。
由於工程上對於計算新的文章沒有作用,因此往往只會保存
。