1. 程式人生 > >LDA概率主題模型

LDA概率主題模型

[TOC] # LDA 這裡簡單的介紹一下LDA的另一種身份,概率主題模型 >隱含狄利克雷分佈(Latent Dirichlet Allocation,簡稱LDA)隱含狄利克雷分佈(英語:Latent Dirichlet allocation,簡稱LDA),是一種主題模型,它可以**將文件集中每篇文件的主題按照概率分佈的形式給出**。同時它是一種無監督學習演算法,在訓練時不需要手工標註的訓練集,需要的僅僅是文件集以及指定主題的數量k即可。此外LDA的另一個優點則是,對於每一個主題均可找出一些詞語來描述它。 LDA首先由 David M. Blei、吳恩達和邁克爾·I·喬丹於2003年提出[1],目前在文字挖掘領域包括文字主題識別、文字分類以及文字相似度計算方面都有應用。 [維基百科](https://zh.wikipedia.org/wiki/%E9%9A%90%E5%90%AB%E7%8B%84%E5%88%A9%E5%85%8B%E9%9B%B7%E5%88%86%E5%B8%83#%E4%BD%BF%E7%94%A8%E5%90%89%E5%B8%83%E6%96%AF%E9%87%87%E6%A0%B7%E4%BC%B0%E8%AE%A1LDA%E5%8F%82%E6%95%B0) 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倍。一個主題模型試圖用數學框架來體現文件的這種特點。主題模型自動分析每個文件,統計文件內的詞語,根據統計的資訊來斷定當前文件含有哪些主題,以及每個主題所佔的比例各為多少。 主題模型最初是運用於自然語言處理相關方向,但目前以及延伸至例如生物資訊學的其它領域。[維基百科](https://zh.wikipedia.org/wiki/%E4%B8%BB%E9%A2%98%E6%A8%A1%E5%9E%8B) ## 幾個重要分佈 **二項分佈** 重複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$ **共軛先驗分佈** 貝葉斯里面的先驗分佈和後驗分佈 參考這個的先驗概率和後驗概率[難逃貝葉斯的寵幸](https://www.cnblogs.com/gaowenxingxing/p/12489871.html) **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](https://www.cnblogs.com/mantch/p/11259347.html) **狄利克雷分佈** $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](https://www.cnblogs.com/mantch/p/11259347.html) $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](https://www.cnblogs.com/mantch/p/11259347.html) ### 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](https://www.cnblogs.com/mantch/p/11259347.html) 既然文件已經產生,那麼如何根據已經產生好的文件反推其主題呢?這個利用看到的文件推斷其隱藏的主題(分佈)的過程(其實也就是產生文件的逆過程),便是主題建模的目的:自動地發現文件集中的主題(分佈)。 文件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](https://www.cnblogs.com/mantch/p/11259347.html) ## 怎麼確定LDA的topic個數? 基於經驗 主觀判斷、不斷除錯、操作性強、最為常用。 基於困惑度(主要是比較兩個模型之間的好壞)。 使用Log-邊際似然函式的方法,這種方法也挺常用的。 非引數方法:Teh提出的基於狄利克雷過程的HDP法。 基於主題之間的相似度:計算主題向量之間的餘弦距離,KL距離等。[cnblogs](https://www.cnblogs.com/mantch/p/11259347.html) ## 如何用主題模型解決推薦系統中的冷啟動問題? 推薦系統中的冷啟動問題是指在沒有大量使用者資料的情況下如何給使用者進行個性化推薦,目的是最優化點選率、轉化率或使用者 體驗(使用者停留時間、留存率等)。冷啟動問題一般分為使用者冷啟動、物品冷啟動和系統冷啟動三大類。 使用者冷啟動是指對一個之前沒有行為或行為極少的新使用者進行推薦; 物品冷啟動是指為一個新上市的商品或電影(這時沒有與之相關的 評分或使用者行為資料)尋找到具有潛在興趣的使用者; 系統冷啟動是指如何為一個 新開發的網站設計個性化推薦系統。 解決冷啟動問題的方法一般是基於內容的推薦。以Hulu的場景為例,對於用 戶冷啟動來說,我們希望根據使用者的註冊資訊(如:年齡、性別、愛好等)、搜 索關鍵詞或者合法站外得到的其他資訊(例如使用者使用Facebook賬號登入,並得 到授權,可以得到Facebook中的朋友關係和評論內容)來推測使用者的興趣主題。 得到使用者的興趣主題之後,我們就可以找到與該使用者興趣主題相同的其他使用者, 通過他們的歷史行為來預測使用者感興趣的電影是什麼。[cnblogs](https://www.cnblogs.com/mantch/p/11259347.html) 同樣地,對於物品冷啟動問題,我們也可以根據電影的導演、演員、類別、關鍵詞等資訊推測該電影所屬於的主題,然後基於主題向量找到相似的電影,並將新電影推薦給以往喜歡看這 些相似電影的使用者。可以使用主題模型(pLSA、LDA等)得到使用者和電影的主題。 以使用者為例,我們將每個使用者看作主題模型中的一篇文件,使用者對應的特徵 作為文件中的單詞,這樣每個使用者可以表示成一袋子特徵的形式。通過主題模型 學習之後,經常共同出現的特徵將會對應同一個主題,同時每個使用者也會相應地 得到一個主題分佈。每個電影的主題分佈也可以用類似的方法得到。 那麼如何解決系統冷啟動問題呢?首先可以得到每個使用者和電影對應的主題向量,除此之外,還需要知道使用者主題和電影主題之間的偏好程度,也就是哪些主題的使用者可能喜歡哪些主題的電影。當系統中沒有任何資料時,我們需要一些先驗知識來指定,並且由於主題的數目通常比較小,隨著系統的上線,收集到少量的資料之後我們就可以對主題之間的偏好程度得到一個比較準確的估計。[cnblogs](https://www.cnblogs.com/mantch/p/1125934