LDA主題模型

2021-07-04 10:44:45 字數 4235 閱讀 7463

先定義一些字母的含義:

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 最近看的東西。於是,這樣就可以對文件進行分類。一篇文件可以由主題的分布來構成,就是說,包含百分之多少的這個主題,百分之多少的那個主題。不同的文章,包含的主題成分不同,這個分布是不同的的,有些文章這個分布可能是相同 相似的。把所有文章都統計一遍,有多少是屬於這個分布的,多少是屬於那個分布的,統計出...