【轉】概念主題模型簡記
來源:https://blog.csdn.net/lu597203933/article/details/45933761
概念主題模型(PTM, probabilitytopical model)在自然語言處理(NLP,natural language processing)中有著重要的應用。主要包括以下幾個模型:LSA(latentsemantic analysis)、 PLSA(probability latent semantic analysis)、LDA(latentdirichlet allocation)和HDP(hirerachical dirichlet processing),這裡用一張圖給出它們的發展歷程。此記主要記錄PLSA和LDA模型.
PLSA:
PLSA是在LSA的基礎上發展起來的,因為LSA有以下缺點:(1)svd奇異值分解對資料的變化較為敏感,同時缺乏先驗資訊的植入等而顯得過分機械。(2)缺乏穩固的數理統計基礎(奇異值分解物理意義,如何從數學上推導得出高維降到的低維語義結構空間),此外svd分解比較耗時。基於以上兩個原因,提出了PLSA(概率潛在語義結構分析),這樣我們就從概率的角度對LSA進行新的詮釋,使得LSA有了穩固的統計學基礎。
PLSA不關注詞和詞之間的出現順序,所以pLSA是一種詞袋方法(BOW: 一個文件用一個向量表示,向量中元素就是一個詞出現與否或者是出現次數或者TF-IDF,各個詞是否出現相互獨立),具體說來,該模型假設一組共現(co-occurrence)詞項關聯著一個隱含的主題類別。同時定義:
- P(di)表示海量文件中某篇文件被選中的概率。
- P(wj|di)表示詞wj在給定文件di中出現的概率。
- 怎麼計算得到呢?針對海量文件,對所有文件進行分詞後,得到一個詞彙列表,這樣每篇文件就是一個詞語的集合。對於每個詞語,用它在文件中出現的次數除以文件中詞語總的數目便是它在文件中出現的概率P(wj|di)。
- P(zk|di)表示具體某個主題zk在給定文件di下出現的概率。
- P(wj|zk)表示具體某個詞wj在給定主題下出現的概率zk,與主題關係越密切的詞,其條件概率P(wj|zk)越大。
利用上述的第1、3、4個概率,我們便可以按照如下的步驟得到“文件-詞項”的生成模型:
- 按照概率P(di)選擇一篇文件di
- 選定文件di後,從主題分佈中按照概率P(zk|di)選擇一個隱含的主題類別zk
- 選定zk後,從詞分佈中按照概率P(wj|zk)選擇一個詞wj
這樣可以根據大量已知的文件-詞項資訊P(wj|di),訓練出文件-主題P(zk|di)和主題-詞項P(wj|zk),如下公式所示:
故得到文件中每個詞的生成概率為:
由於P(di)可事先計算求出,而P(wj|zk)和P(zk|di)未知,所以就是我們要估計的引數(值).由於含有隱含的主題變數z,所有我們考慮使用EM演算法。
我們使用最大似然估計得到:
這裡:n(di,wj)表示詞項wj在文件di中詞頻,n(di)表示文件di中詞的總數。M表示文件數量,N表示單詞數量
其對數似然估計為:
下面用EM演算法進行求解:
E-step:
M-step:
由前面的對數似然函式知:
我們去除不必要的常數項得到:
約束條件為:
這裡通過largange乘數法求:
最終我們便求得引數即為每個文件中主題發生的概率及在該主題下詞發生的概率,然後就
可以用得到得引數對文件或者文件中的詞進行分類等。
LDA
LDA:隱含的狄利克雷分佈,要了解LDA,需要一些數學基礎,包括二項分佈,多項式分佈,beta分佈,dirichlet分佈.這幾個分佈可以參看這篇blog:http://blog.csdn.net/v_july_v/article/details/41209515,此外這篇blog:http://blog.csdn.net/lu597203933/article/details/45933719講解MLE(最大似然估計)、MAP(最大後驗概率估計)及貝葉斯估計的區別。
這裡我們會得出:
引數p的先驗概率為beta(或者dirichlet)分佈,那麼以p為引數的二項分佈(或者多項式分佈)通過貝葉斯估計得到的後驗概率分佈仍然是beta分佈(或者dirichlet分佈)。我們說beta分散式是二項式分佈的共軛先驗概率分佈,而dirichlet分佈為多項式分佈的共軛先驗概率分佈。如何理解這句話呢?
我們舉一個簡單的例子:比如投硬幣,我們將p記為正面發生的概率,這樣我們投了20次,出現正面12次,反面8次。這就是所謂的樣本空間X, P(X|p) = p^12*(1-p)^8是以p為引數的二項式分佈。假設p有個先驗分佈beta(a,b)(a和b為beta分佈的引數,為什麼選擇beta,後面講)。現在我們用貝葉斯估計,即最大化P(p|X),通過公式推導我們會發現P(p|X)服從的也是beta分佈,為beta(a+12,b+8)。如果看不懂可以再看看這篇blog:http://blog.csdn.net/lu597203933/article/details/45933719
那麼現在有以下幾個問題:
1:為什麼選用beta分佈或者dirichlet分佈?
<1>beta分佈+二項分佈得到的仍然是beta分佈,這樣就給計算帶來了方便,可以直接利用beta分佈的均值方差公式得到結果
<2>beta分佈可以通過變換不同引數得到不同形狀分佈的概率密度函式,通過選擇引數(稱為超引數)一定能滿足我們的需求(形狀千奇百怪,高低胖瘦)。
dirichlet分佈和多項式分佈分別是beta分佈和二項分佈在多維情況的推廣!
2:為什麼選擇貝葉斯估計?
貝葉斯估計引數的表示方式更為精確,得到的引數也更為精確,越來越能反應基於樣本的真實引數情況。沒有將引數作為固定未知值,而是將其作為隨機變數,先驗為一個概率分佈(人們已經知道或普遍接受的規律),這樣就會對後續引數估計產生一定的影響。
這裡給出頻率學派和貝葉斯學派的區別:
頻率學派:引數是未知的,但是固定,樣本空間X是隨機變數,最大似然估計(MLE,maximumlikehood estimation)
貝葉斯學派:引數具有一個先驗概率分佈(人們已經知道或者普遍接受的規律),引數可以看做是一個隨機變數,不再固定,有最大後驗估計(MAP,maximum a posterior)和貝葉斯估計兩種方法。
LDA的過程為:
lda實質上就是plsa加了一個貝葉斯框架,過程可以描述為:由先驗dirichlet分佈得到主題的概率分佈(P(p)),然後通過已有樣本得到的主題樣本空間(潛在的)服從的是以dirichlet分佈概率作為引數的多項式分佈(P(X|p)),這樣通過貝葉斯估計得到每個主題的後驗概率分佈仍為dirichlet分佈(P(p|X));;一個主題下的每個詞先驗分佈也是dirichlet分佈,詞樣本空間服從的是以dirichlet分佈概率作為引數的多項式分佈,這樣通過貝葉斯估計得到的後驗概率分佈仍然為dirichlet分佈。從MLE到MAP再到貝葉斯估計,對引數的表示越來越精確,越來越能夠反映基於樣本的真實引數情況。
舉一個簡單的例子,假設一篇文件 中有3個主題,根據單詞統計得出主題1,2和3的概率相等都是1/3,,但是如果我們之前給這三個主題概率(p1,p2,p3)加入一個dirichlet分佈(引數p1,p2,p3服從的概率分佈),那麼通過貝葉斯估計後三個主題的概率分別為1/2. 1/3,1/6將會更加符合真實情況。。
之所以選擇dirichlet分佈作為先驗概率分佈,因為主題和詞的分佈都是多項式分佈,所以dirichlet先驗概率分佈+多項式分佈得出的結果仍然是dirichlet分佈,這樣就可以使用dirichlet分佈的性質了。
總結:plsa和lda最終需要求得的引數都是每個文件中主題發生的概率及在該主題下詞發生的概率,引數即為兩個矩陣,然後就可以用得到得引數對文件或者文件中的詞進行分類等。只不過lda是plsa的貝葉斯化,先驗概率服從dirichlet分佈,貝葉斯化的好處一方面使得到的引數更加精確,另一方面貝葉斯學派的觀點可以降低過擬合等優點!
此外:對lda的引數估計方法gibbs sampling演算法,我還沒有看,後續再補充!。歡迎有任何問題的進行交流!
這裡給出一般的共軛分佈表:
參考文獻:
1:http://blog.csdn.net/v_july_v/article/details/41209515 通俗理解LDA主題模型
2:http://blog.csdn.net/yangliuy/article/details/8296481文字語言模型的引數估計-最大似然估計、MAP及貝葉斯估計
3:http://blog.csdn.net/yangliuy/article/details/8330640
4:http://maider.blog.sohu.com/306392863.html如何理解beta分佈和dirichlet分佈
5:http://vdisk.weibo.com/s/zrFL6OXKgKMAf沈博ppt
***************以下內容為最近需要用到lda學習時的筆記(2016/2/1)***************************
對於lda的dirichlet分佈是多項式的共軛先驗概率分佈、beta分佈、gamma分佈、頻率學派和貝葉斯學派思想的區別【注意頻率學派和貝葉斯學派思想沒有好壞之分,他們都是認識自然的兩種手段,只是在當前人們掌握的數學工具和需要解決的數學問題中,貝葉斯學派的理論體系能夠更好的解釋目標函式和分析相互關係等[1]】及MLE,MAP及貝葉斯估計等這些概念性的東西都可以參看文末的參考文獻[1][2]或者上面筆記給出的參看文獻,這裡不再詳解。這裡主要是講解gibbs取樣的過程及我在學習gibbs取樣過程中一些令我疑惑的問題。
當然在描述gibbs取樣之前,我還是給出幾個公式的結果,具體推到過程就不講了,不明白的可以看參考文獻或者留言。
gibbs取樣總是採用概率向量的一個維度,給定其他維度的變數值來取樣當前維度的變數值,設i=(m,n)是一個二維下標,對應第m個文件中第n個單詞,~i表示除去下標為i的詞語。p(zm,n=k|z~i,w)表示的就是在不考慮第m個文件中第n個詞的情況下,該詞屬於主題k(計算出屬於所有主題k的概率,k範圍從1到K)的概率,推導的公式如下:
此公式即被稱為gibbsupdating rule ,其中第一行到第二行將p(wi)省略掉了是由於其只與當前的單詞本身有關,可以看作是一個常量,常量對最終的結果不會產生任何影響,因為對於每一個主題k(1~K), 都將常量省略掉了,故只是放大縮小倍數而已。第二行到第三行採用了delta與gamma函式之間的關係推到得出。第三行到第四行採用公式3即可得出,最後兩行省略掉分母是因為分母即當前第m篇文件中單詞的數目-1,即為常量,常量當然可以省去。
Gibbs取樣步驟為隨機初始化、取樣、判斷收斂。其中初始化就是將每篇文件中的每個詞都隨機的初始化分配一個主題,然後針對第m篇文件第n個單詞,,採用gibbsupdating rule對其進行重新取樣,取樣疊加法(後面講解)將其歸屬於新的主題,然後不斷迭代每個文件中的每個詞,直到最終的每篇文件中的主題分佈與每個主題中的詞分佈達到收斂或者初始設定的迭代次數。給出文獻[2]中的gibbs過程
下面給出自己在學習lda過程中的一些疑惑問題及解答
1:lda不僅僅可以使用gibbs取樣進行引數學習,剛開始是使用變分EM演算法進行求解,這也是原論文的引數求解方式,但是變分EM演算法推導複雜,此外該方法得到的往往不是全域性最優解,而是區域性最優解。而gibbs取樣推導不難,但收斂速度慢點,但是已有相應的該進,sparselda就是提升gibbs取樣速度而提出。
2:為什麼說lda也是一種聚類過程。因為每篇文件最終都會得到一個主題分佈,我們可以選擇該文件最大的主題概率作為該文件的類別,那麼就將這些文件分配到K個類別中了。——當然,如果選擇最大的2個主題作為文件的標籤,理論上就最終得到了K*(K-1)/2個類別。同時解釋了LDA可以一定程度的認為是“聚類”
3:gibbssampling updating過程中等同於就可以了,不需要相等,依據gibbs sampling,主要計算該詞屬於每個主題的概率,該詞針對的每個主題的計算公式中都會有該常量,因此該常量在對於將某個詞分配給那個主題計算就沒有影響了,只是都放大或者縮小了多少倍而已。
4:如何確定topic個數?topic太小易欠擬合,太大易過擬合。原始論文中採用的評測指標perplexity, 即針對每個主題,我們可以訓練引數得到一個perplexity值,然後得到perplexity-topic分佈曲線,會發現perplexity隨著topic number增大不斷減小直至穩定。選擇穩定拐角點處的topic number作為該訓練資料的topic number(perplexity可以用來驗證模型的好壞和結果是否已經收斂) 另外還有一個指標就是MPI(point-wise mutualinformation)[7], 此外文獻[7]同時給出當k過大過擬合時,模型效能可能會嚴重退化
注:確定topic的數目沒有好的辦法,只能用交叉驗證,而hdp比較複雜,更多的存在於學術上
5:超引數的選擇:採用對稱dirichlet分佈的原因是表明每個主題都會有相同的概率被分配到一個文件中,每個單詞有相同的概率被分配到同一個主題(因為沒有任何先驗資訊)。一般alpha和beta都採用小於1的值(因為這樣其概率密度曲線變得比較稀疏) ;啟發式的alpha=1/topic number, beta=0.01。alpha表明了不同文件間主題是否鮮明,beta表明有多少個近義詞能屬於同一類別。。實際中給定了topic number,對alpha和beta進行訓練能顯著改善模型的效果。
文獻[8]給出超引數alpha取非對稱值佔據足夠的優勢,而beta取非對稱值則沒有好處
6:lda的應用:相似文件,自動打標籤,推薦系統,topic rank,word rank等—詳細見lda漫遊指南[6]
7:文獻[7]獲得了2014 ICML best paper,分析了文件數目,文件長度及超引數對lda模型的影響及學習建議,值得一讀。
8:(累加法):當為某個詞sample一個新的主題時,計算是這樣的,首先得到某個詞屬於各個主題的概率,並不是取最大的,而是看落在那個累積概率中。是這樣理解,在輪盤賭中,某一分割槽面積越大,指標落到該區域概率越大,這裡取得是累積概率就好比是輪盤的某個區域的面積,區域的label就是topic index 。比如3個主題的概率為[0.3,0.1,0.6], 累計概率為[0.3,0.4,1], 那麼隨機取樣值為0.35,由於0.35落在0.4區域中,因此此時選擇的主題是2而不是3.—不太懂(有深入理解的請指教)
9: 文件數量也會嚴重影響模型的效能,當文件數量較少時,即使每篇文件非常長,也不可能達到較好的效果,一般都要有足夠的文件數量,或者從大批量的預料庫中隨機選擇上千的文件也是可以的[7]
10:每篇文件長度對模型效能起著關鍵的作用,當文件很短,即使有非常多數量的文件,模型也不可能達到較好的效果, 文件要足夠長,但是無需過長(文獻[7]在實驗中文件長度在120+就會收斂),對於過長的文件,可以從中取樣一部分構成文件[7]。
參考文獻:[詳細瞭解可以按順序閱讀]
1:lda數學八卦
2:Parameter estimation fortext analysis 論文 GregorHeinrich 2004
3:Distributed GibbsSampling of Latent Topic Models: The Gritty Details wangyi 公式詳細推導過程
4:鄒博主題模型課件http://ask.julyedu.com/article/295
5:網友blog: http://blog.csdn.net/yangliuy/article/details/8302599可以看java程式碼瞭解過程
6:lda漫遊指南-特別是第四章的應用http://yuedu.baidu.com/ebook/d0b441a8ccbff121dd36839a.html
7:Understanding theLimiting Factors of Topic Modeling via Posterior Contraction Analysis:2014 ICMLbest paper
8Rethinking LDA: Why Priors Matter
相關文章
- LDA主題模型簡介及Python實現LDA模型Python
- LDA主題模型LDA模型
- 主題模型值LDA模型LDA
- Apache Kafka資料模型概念簡介 - BaeldungApacheKafka模型
- Volatile之Java記憶體模型概念Java記憶體模型
- 主題搗鼓日記(週記)
- Java記憶體模型簡介Java記憶體模型
- Java記憶體模型 - 簡介Java記憶體模型
- keras轉tensorflow lite【方法二】直接轉:簡單模型例項Keras模型
- 文字主題抽取:用gensim訓練LDA模型LDA模型
- 使用Swift 字典模型互轉 超級簡單Swift模型
- AFNetworking的簡易封裝,含字典轉模型封裝模型
- ONNX模型轉Openvino部署踩坑記錄模型
- 兩種解決powerdesigner概念模型轉物理模型報欄位重複錯誤的方法模型
- 部落格園主題折騰記
- Dubbo學習筆記(一)基本概念與簡單使用筆記
- Zookeeper學習筆記(一)基本概念和簡單使用筆記
- 廢土藝術風格 2丨遊戲主題概念設計遊戲
- Kafka訊息分發、主題分割槽與消費組的概念Kafka
- 概念剖析:白話主資料
- 盒模型-深入理解盒模型及相關概念模型
- Java記憶體模型常見問題Java記憶體模型
- Java記憶體模型FAQ(五)舊的記憶體模型有什麼問題?Java記憶體模型
- tp5.0 的模型型別轉換問題模型型別
- redis-23.主從複製-概念Redis
- 什麼是Java記憶體模型(JMM)中的主記憶體和本地記憶體?Java記憶體模型
- 20100601的主題,《簡單之美》之二,老倪
- 胖哥學SpringMVC:簡單跳轉專題SpringMVC
- 統計模型機器學習模型領域相關知識,指標概念及問題點積累模型機器學習指標
- VSCode Lite Edit 主題的相關CSS記錄VSCodeCSS
- 記SqlSugar ORM框架之找不到主鍵問題SqlSugarORM框架
- 部落格折騰記——tranquilpeak主題個性化UI
- 博主簡介
- Java記憶體模型是什麼,為什麼要有Java記憶體模型,Java記憶體模型解決了什麼問題?Java記憶體模型
- atc轉換過程問題記錄
- Xenlism WildFire: Linux 桌面的極簡風格圖示主題Linux
- PixiJS核心概念及簡單上手JS
- SAP HANA Delivery Unit概念簡述