先定義一些字母的含義:
lda以文件集合d作為輸入(會有切詞,去停用詞,取詞幹等常見的預處理,略去不表),希望訓練出的兩個結果向量(設聚成k個topic,voc中共包含m個詞):
lda的核心公式如下:
p(w|d) = p(w|t)*p(t|d)
直觀的看這個公式,就是以topic作為中間層,可以通過當前的θd和φt給出了文件d中出現單詞w的概率。其中p(t|d)利用θd計算得到,p(w|t)利用φt計算得到。
實際上,利用當前的θd和φ
t,我們可以為乙個文件中的乙個單詞計算它對應任意乙個topic時的p(w|d),然後根據這些結果來更新這個詞應該對應的topic。然後,如果這個更新改變了這個單詞所對應的topic,就會反過來影響θd和φ
t。lda學習過程
lda演算法開始時,先隨機地給θd和φt賦值(對所有的d和t)。然後上述過程不斷重複,最終收斂到的結果就是lda的輸出。再詳細說一下這個迭代的學習過程:
1)針對乙個特定的文件d
s中的第i單詞w
i,如果令該單詞對應的topic為t
j,可以把上述公式改寫為:
pj(wi|ds) = p(wi|tj)*p(tj|ds)
先不管這個值怎麼計算(可以先理解成直接從θ
ds和φ
tj中取對應的項。實際沒這麼簡單,但對理解整個lda流程沒什麼影響,後文再說)。
2)現在我們可以列舉t中的topic,得到所有的pj(w
i|ds),其中j取值1~k。然後可以根據這些概率值結果為d
s中的第i個單詞w
i選擇乙個topic。最簡單的想法是取令pj(w
i|ds)最大的t
j(注意,這個式子裡只有j是變數),即
argmax[j]pj(wi|ds)
當然這只是一種方法(好像還不怎麼常用),實際上這裡怎麼選擇t在學術界有很多方法,我還沒有好好去研究。
3)然後,如果d
s中的第i個單詞w
i在這裡選擇了乙個與原先不同的topic,就會對θd和φ
t有影響了(根據前面提到過的這兩個向量的計算公式可以很容易知道)。它們的影響又會反過來影響對上面提到的p(w|d)的計算。對d中所有的d中的所有w進行一次p(w|d)的計算並重新選擇topic看作一次迭代。這樣進行n次迴圈迭代之後,就會收斂到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的單詞概率分布生成乙個單詞。其圖模型如下圖所示:
圖1為大家經常看到的lda圖模型,其描述公式可表示為
對於乙個文件,lda產生過程為:
(1) 由dirichlet先驗分布求topic的多項式分布引數,即theta ~ dir(alpha)
alpha是dirichlet分布引數,theta=(theta1,theta2,…, theta_k)是產生topic的多項式分布引數,theta_k表示第k個主題被選擇的概率。
(2) 根據theta生成乙個topic z,即z~multinormial(theta)
(3) 根據已有的topic,從分布p(w_n|z_n,beta)中選擇乙個word。
重複步驟(2)和(3),即可生成一篇文件doc。
beta表示乙個k個主題、v個單詞的k×v矩陣,beta_ij表示有主題z_i生成單詞w_j的概率。根據上面描述,圖1中的每一過程可進一步如圖2細化所示。
圖2 lda graphic model
圖2中,三種顏色對應的表示層的簡單說明:
(1) corpus-level(紅色):alpha和beta是語料級別引數,對於所有文件都是一樣的,在generate過程中只需sample一次;
(2) document-level(橙色):theta為文件級別引數,每個文件對應的theta不盡相同,對於每乙個文件,都要sample一次theta;
(3) word-level(綠色):z和w是文件級別變數,z有theta產生,然後再與beta生產w,對於每個word,z和w都要sample一次。
lda的學習總結(精簡):
通過上面對lda生成模型的討論,可以知道lda模型主要是從給定的輸入語料中學習訓練兩個控制引數α和β,學習出了這兩個控制引數就確定了模型,便可以用來生成文件。其中α和β分別對應以下各個資訊:
α:分布p(θ)需要乙個向量引數,即dirichlet分布的引數,用於生成乙個主題θ向量;
β:各個主題對應的單詞概率分布矩陣p(w|z)。
把w當做觀察變數,θ和z當做隱藏變數,就可以通過em演算法學習出α和β,求解過程中遇到後驗概率p(θ,z|w)無法直接求解,需要找乙個似然函式下界來近似求解,原文使用基於分解(factorization)假設的變分法(varialtional inference)進行計算,用到了em演算法。每次e-step輸入α和β,計算似然函式,m-step最大化這個似然函式,算出α和β,不斷迭代直到收斂
概率模型:
d 表示文件集合,最後就是保證p(d|α,β)最大。
phi的迭代公式,表示文件中單詞n在topic i上的分布:
gamma的迭代公式,文件在topic上的分布
beta的迭代公式,model中topic-word分布:
alpha的迭代公式,model中文件-topic分布的先驗引數,利用梯度下降法即可求解:
lda最核心的迭代公式,針對每一篇文件,計算每個詞的topic分布,從而計算文件的topic分布:
變分後,計算出來的似然函式,其似然值使用者判斷迭代的收斂程度:
基本邏輯:
1.初始模型引數,開始迭代,執行2,3,4,直至收斂
2.針對每一篇文件,初始gamma以及phi引數,迭代該引數,直至收斂(迭代公式:gamma即程式中theta:p
ti=n
ti+alpha
/n+t*alpha,phi:p
wi=n
wi+beta
/n+w*beta,再相乘累加,判斷決策。)
2.1.計算文件中每個單詞在topic上的分布,利用model中beta以及文件-topic分布(2.2)
2.2.計算文件-topic分布,利用模型引數alpha以及word-topic分布(2.1結果)
3.update模型引數beta,利用word-topic分布。
4.update模型引數alpha,利用2.2的結果gamma
lda的演算法迭代解讀與程式實現:
主題模型LDA
某隨機實驗如果有k個可能結局a1 a2 ak,分別將他們的出現次數記為隨機變數x1 x2 xk,它們的概率分布分別是p1,p2,pk,那麼在n次取樣的總結果中,a1出現n1次 a2出現n2次 ak出現nk次的這種事件的出現概率p有下面公式 p x1 n 1,xk nk n n1 nk pn1 1.p...
LDA主題模型
最近看了一下lda的文章,寫個小結,理解正確與否有待驗證.latent dirichlet allocation lda 是三層的層次概率貝葉斯模型 生成模型 用於處理離散資料,比如文字資料.假設一共有 v 個單詞,則第 j 個單詞表示為 w 0,cdots,0,1,0,cdots,0 text 假...
LDA與主題模型
1 最近看的東西。於是,這樣就可以對文件進行分類。一篇文件可以由主題的分布來構成,就是說,包含百分之多少的這個主題,百分之多少的那個主題。不同的文章,包含的主題成分不同,這個分布是不同的的,有些文章這個分布可能是相同 相似的。把所有文章都統計一遍,有多少是屬於這個分布的,多少是屬於那個分布的,統計出...