LDA概率主題模型

  • 2020 年 4 月 28 日
  • 筆記

LDA

這裡簡單的介紹一下LDA的另一種身份,概率主題模型

隱含狄利克雷分佈(Latent Dirichlet Allocation,簡稱LDA)隱含狄利克雷分佈(英語:Latent Dirichlet allocation,簡稱LDA),是一種主題模型,它可以將文檔集中每篇文檔的主題按照概率分佈的形式給出。同時它是一種無監督學習算法,在訓練時不需要手工標註的訓練集,需要的僅僅是文檔集以及指定主題的數量k即可。此外LDA的另一個優點則是,對於每一個主題均可找出一些詞語來描述它。
LDA首先由 David M. Blei、吳恩達和邁克爾·I·喬丹於2003年提出[1],目前在文本挖掘領域包括文本主題識別、文本分類以及文本相似度計算方面都有應用。
維基百科

e~,比較抽象啊。。
舉個栗子:
一般寫一篇文章,常規的思路就是:

  • 給幾個主題,然後以一定的概率選擇某個或者某幾個,俗稱先定題
  • 對於每個主題,再去以一定的概率去選擇詞去詳細說明某個主題,俗稱描述主題
  • ok一篇文章生成了~

那LDA正好就是上述過程反過來,已知一篇文章了,但是需要確定這篇文章的主題。

步驟
從狄利克雷分佈\(\alpha\) 中取樣生成文檔i的主題分佈\(\theta _{i}\)
從主題的多項式分佈\(\theta _{i}\)中取樣生成文檔i第j個詞的主題\(z_{{i,j}}\)
從狄利克雷分佈\(\beta\) 中取樣生成主題\(z_{{i,j}}\)的詞語分佈\(\phi _{{z_{{i,j}}}}\)
從詞語的多項式分佈\(\phi _{{z_{{i,j}}}}\)中採樣最終生成詞語\(w_{{i,j}}\)

其中,類似Beta分佈是二項式分佈的共軛先驗概率分佈,而狄利克雷分佈(Dirichlet分佈)是多項式分佈的共軛先驗概率分佈。此外,LDA的圖模型結構如下圖所示(類似貝葉斯網絡結構):

主題模型

主題模型(Topic Model)在機器學習和自然語言處理等領域是用來在一系列文檔中發現抽象主題的一種統計模型。直觀來講,如果一篇文章有一個中心思想,那麼一些特定詞語會更頻繁的出現。比方說,如果一篇文章是在講狗的,那「狗」和「骨頭」等詞出現的頻率會高些。如果一篇文章是在講貓的,那「貓」和「魚」等詞出現的頻率會高些。而有些詞例如「這個」、「和」大概在兩篇文章中出現的頻率會大致相等。但真實的情況是,一篇文章通常包含多種主題,而且每個主題所佔比例各不相同。因此,如果一篇文章10%和貓有關,90%和狗有關,那麼和狗相關的關鍵字出現的次數大概會是和貓相關的關鍵字出現次數的9倍。一個主題模型試圖用數學框架來體現文檔的這種特點。主題模型自動分析每個文檔,統計文檔內的詞語,根據統計的信息來斷定當前文檔含有哪些主題,以及每個主題所佔的比例各為多少。
主題模型最初是運用於自然語言處理相關方向,但目前以及延伸至例如生物信息學的其它領域。維基百科

幾個重要分佈

二項分佈
重複n次的伯努利實驗,就是0~1分佈,\(X \sim b(n, p)\)

多項分佈
是二項分佈擴展到多維的情況。多項分佈是指單次試驗中的隨機變量的取值不再是0-1的,而是有多種離散值可能(1,2,3…,k)。比如投擲5個面的骰子實驗,N次實驗結果服從K=5的多項分佈\(\sum_{i=1}^{k} p_{i}=1, p_{i}>0\)

共軛先驗分佈
貝葉斯裏面的先驗分佈和後驗分佈
參考這個的先驗概率和後驗概率難逃貝葉斯的寵幸

Beta分佈

二項分佈的共軛先驗分佈。給定參數 α>0 和 β>0,取值範圍為[0,1]的隨機變量 x 的概率密度函數:
\(f(x ; \alpha, \beta)=\frac{1}{B(\alpha, \beta)} x^{\alpha-1}(1-x)^{\beta-1}\)
\(\frac{1}{B(\alpha, \beta)}=\frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha) \Gamma(\beta)}\)
\(\Gamma(z)=\int_{0}^{\infty} t^{z-1} e^{-t} d t\)

這便是所謂的gamma函數cnblogs

狄利克雷分佈

\(f\left(x_{1}, x_{2}, \ldots, x_{k} ; \alpha_{1}, \alpha_{2}, \ldots, \alpha_{k}\right)=\frac{1}{B(\alpha)} \prod_{i=1}^{k} x_{i}^{\alpha^{i}-1}\)

\(B(\alpha)=\frac{\prod_{i=1}^{k} \Gamma\left(\alpha^{i}\right)}{\Gamma\left(\sum_{i=1}^{k} \alpha^{i}\right)}, \sum x_{i}=1\)

\(\operatorname{Dir}(\vec{p} | \vec{\alpha})+\operatorname{Mult} \operatorname{Count}(\vec{m})=\operatorname{Dir}(p | \vec{\alpha}+\vec{m})\)

直接上公式不太好理解

模型

定義變量cnblogs
\(w\) 表示詞,\(V\) 表示所有單詞的個數(固定值)。
\(z\) 表示主題,\(k\) 是主題的個數(預先給定,固定值)。
\(D=(W_1,…,W_M)\) 表示語料庫,其中的\(M\)是語料庫中的文檔數(固定值)。
\(W=(w1,w2,…,w_N)\) 表示文檔,其中的\(N\)表示一個文檔中的詞數(隨機變量)。

Unigram model

對於文檔\(W=(w_1,w_2,…,w_N)\),用 \(p(w_n)\) 表示詞 \(w_n\)先驗概率,生成文檔\(w\)的概率為:\(p(W)=\prod_{n=1}^{N} p\left(w_{n}\right)\)
這個好理解,就是每個詞概率的乘積,先驗概率,是一個詞袋模型,cnblogs

Mixture of unigrams model

該模型的生成過程是:給某個文檔先選擇一個主題z,再根據該主題生成文檔,該文檔中的所有詞都來自一個主題。假設主題有 z1,…,zn,生成文檔w的概率為:
後驗概率
\(p(W)=p\left(z_{1}\right) \prod_{n=1}^{N} p\left(w_{n} | z_{1}\right)+\ldots+p\left(z_{k}\right) \prod_{n=1}^{N} p\left(w_{n} | z_{k}\right)=\sum_{z} p(z) \prod_{n=1}^{N} p\left(w_{n} | z\right)\)

PLSA模型

詳細推導見:cnblogs

既然文檔已經產生,那麼如何根據已經產生好的文檔反推其主題呢?這個利用看到的文檔推斷其隱藏的主題(分佈)的過程(其實也就是產生文檔的逆過程),便是主題建模的目的:自動地發現文檔集中的主題(分佈)。

文檔d和詞w是我們得到的樣本,可觀測得到,所以對於任意一篇文檔,其 \(P(w_j|d_i)\) 是已知的。從而可以根據大量已知的文檔-詞項信息 \(P(w_j|d_i)\),訓練出文檔-主題 \(P(z_k|d_i)\) 和主題-詞項 \(P(w_j|z_k)\),如下公式所示:\(P\left(w_{j} | d_{i}\right)=\sum_{k=1}^{K} P\left(w_{j} | z_{k}\right) P\left(z_{k} | d_{i}\right)\)

故得到文檔中每個詞的生成概率為:\(P\left(d_{i}, w_{j}\right)=P\left(d_{i}\right) P\left(w_{j} | d_{i}\right)=P\left(d_{i}\right) \sum_{k=1}^{K} P\left(w_{j} | z_{k}\right) P\left(z_{k} | d_{i}\right)\)

由於 \(P(d_i)\) 可事先計算求出,而 \(P(w_j|z_k)\)\(P(z_k|d_i)\) 未知,所以 \(θ=(P(w_j|z_k),P(z_k|d_i))\) 就是我們要估計的參數(值),通俗點說,就是要最大化這個θ。

用什麼方法進行估計呢,常用的參數估計方法有極大似然估計MLE、最大後驗證估計MAP、貝葉斯估計等等。因為該待估計的參數中含有隱變量z,所以我們可以考慮EM算法。

LDA

再PLSA的基礎上加了貝葉斯優化
因此有了先驗概率和後驗概率
在LDA中,主題分佈和詞分佈不再唯一確定不變,即無法確切給出。例如主題分佈可能是{教育:0.5,經濟:0.3,交通:0.2},也可能是{教育:0.6,經濟:0.2,交通:0.2},到底是哪個我們不再確定(即不知道),因為它是隨機的可變化的。但再怎麼變化,也依然服從一定的分佈,即主題分佈跟詞分佈由Dirichlet先驗隨機確定。正因為LDA是PLSA的貝葉斯版本,所以主題分佈跟詞分佈本身由先驗知識隨機給定。cnblogs

怎麼確定LDA的topic個數?

基於經驗 主觀判斷、不斷調試、操作性強、最為常用。
基於困惑度(主要是比較兩個模型之間的好壞)。
使用Log-邊際似然函數的方法,這種方法也挺常用的。
非參數方法:Teh提出的基於狄利克雷過程的HDP法。
基於主題之間的相似度:計算主題向量之間的餘弦距離,KL距離等。cnblogs

如何用主題模型解決推薦系統中的冷啟動問題?

推薦系統中的冷啟動問題是指在沒有大量用戶數據的情況下如何給用戶進行個性化推薦,目的是最優化點擊率、轉化率或用戶 體驗(用戶停留時間、留存率等)。冷啟動問題一般分為用戶冷啟動、物品冷啟動和系統冷啟動三大類。

用戶冷啟動是指對一個之前沒有行為或行為極少的新用戶進行推薦;
物品冷啟動是指為一個新上市的商品或電影(這時沒有與之相關的 評分或用戶行為數據)尋找到具有潛在興趣的用戶;
系統冷啟動是指如何為一個 新開發的網站設計個性化推薦系統。
解決冷啟動問題的方法一般是基於內容的推薦。以Hulu的場景為例,對於用 戶冷啟動來說,我們希望根據用戶的註冊信息(如:年齡、性別、愛好等)、搜 索關鍵詞或者合法站外得到的其他信息(例如用戶使用Facebook賬號登錄,並得 到授權,可以得到Facebook中的朋友關係和評論內容)來推測用戶的興趣主題。 得到用戶的興趣主題之後,我們就可以找到與該用戶興趣主題相同的其他用戶, 通過他們的歷史行為來預測用戶感興趣的電影是什麼。cnblogs

同樣地,對於物品冷啟動問題,我們也可以根據電影的導演、演員、類別、關鍵詞等信息推測該電影所屬於的主題,然後基於主題向量找到相似的電影,並將新電影推薦給以往喜歡看這 些相似電影的用戶。可以使用主題模型(pLSA、LDA等)得到用戶和電影的主題。

以用戶為例,我們將每個用戶看作主題模型中的一篇文檔,用戶對應的特徵 作為文檔中的單詞,這樣每個用戶可以表示成一袋子特徵的形式。通過主題模型 學習之後,經常共同出現的特徵將會對應同一個主題,同時每個用戶也會相應地 得到一個主題分佈。每個電影的主題分佈也可以用類似的方法得到。

那麼如何解決系統冷啟動問題呢?首先可以得到每個用戶和電影對應的主題向量,除此之外,還需要知道用戶主題和電影主題之間的偏好程度,也就是哪些主題的用戶可能喜歡哪些主題的電影。當系統中沒有任何數據時,我們需要一些先驗知識來指定,並且由於主題的數目通常比較小,隨着系統的上線,收集到少量的數據之後我們就可以對主題之間的偏好程度得到一個比較準確的估計。cnblogs