主題模型TopicModel:Unigram、LSA、PLSA主題模型詳解

筆尖的痕發表於2016-08-02

http://blog.csdn.net/pipisorry/article/details/42560693

主題模型歷史:

Papadimitriou、Raghavan、Tamaki和Vempala在1998年發表的一篇論文中提出了潛在語義索引。1999年,Thomas Hofmann又在此基礎上,提出了概率性潛在語義索引(Probabilistic Latent Semantic Indexing,簡稱PLSI)。

隱含狄利克雷分配LDA可能是最常見的主題模型,是一般化的PLSI,由Blei, David M.、吳恩達和Jordan, Michael I於2003年提出。LDA允許文件擁有多種主題。其它主體模型一般是在LDA基礎上改進的。例如Pachinko分佈在LDA度量詞語關聯之上,還加入了主題的關聯度。


文字建模-理解LDA模型的基礎模型:

Unigram model、mixture of unigrams model,以及pLSA模型。

   定義變數:

  • 表示詞,表示所有單詞的個數(固定值)
  • 表示主題,是主題的個數(預先給定,固定值)
  • 表示語料庫,其中的是語料庫中的文件數(固定值)
  • 表示文件,其中的表示一個文件中的詞數(隨機變數)

Unigram model

    對於文件,用表示詞的先驗概率,生成文件的概率為:

    其圖模型為(圖中被塗色的w表示可觀測變數,N表示一篇文件中總共N個單詞,M表示M篇文件):

       或為:  

    unigram model假設文字中的詞服從Multinomial分佈,而我們已經知道Multinomial分佈的先驗分佈為Dirichlet分佈。    上圖中的表示在文字中觀察到的第n個詞,n∈[1,N]表示該文字中一共有N個單詞。加上方框表示重複,即一共有N個這樣的隨機變數。其中,p和α是隱含未知變數:

  • p是詞服從的Multinomial分佈的引數
  • α是Dirichlet分佈(即Multinomial分佈的先驗分佈)的引數。

    一般α由經驗事先給定,p由觀察到的文字中出現的詞學習得到,表示文字中出現每個詞的概率。

最簡單的 Unigram Model:

假設我們的詞典中一共有 V 個詞 v1,v2,vV,那麼最簡單的 Unigram Model 就是認為上帝是按照如下的遊戲規則產生文字的。

game-unigram-model

上帝的這個唯一的骰子各個面的概率記為 p=(p1,p2,,pV), 所以每次投擲骰子類似於一個拋鋼鏰時候的貝努利實驗, 記為 wMult(w|p)

unigram-model

上帝投擲V 個面的骰子

對於一篇文件d=w=(w1,w2,,wn), 該文件被生成的概率就是

p(w)=p(w1,w2,,wn)=p(w1)p(w2)p(wn)    {對整篇文件來說,詞之間是相互獨立的}


而文件和文件之間我們認為是獨立的, 所以如果語料中有多篇文件 W=(w1,w2,,wm),則該語料的概率

p(W)=p(w1)p(w2)p(wm)          {文件之間也是相互獨立的}

在 Unigram Model 中假設了文件之間是獨立可交換的,而文件中的詞也是獨立可交換的,所以一篇文件相當於一個袋子,裡面裝了一些詞,而詞的順序資訊就無關緊要了,這樣的模型也稱為詞袋模型(Bag-of-words)。

假設語料中總的詞頻是N, 在所有的 N 個詞中,如果我們關注每個詞 vi 的發生次數 ni,那麼n=(n1,n2,,nV) 正好是一個多項分佈

p(n)=Mult(n|p,N)=(Nn)k=1Vpnkk    {對於整個語料中的詞來說的,是->n的概率}
此時, 語料的概率
p(W)=p(w1)p(w2)p(wm)=k=1Vpnkk            {對整個語料來說,詞也都是相對獨立的,可由文件被生成的概率得出}

當然,我們很重要的一個任務就是估計模型中的引數p,也就是問上帝擁有的這個骰子的各個面的概率是多大,按照統計學家中頻率派的觀點,使用最大似然估計最大化P(W),於是引數pi的估計值就是

piˆ=niN.

貝葉斯觀點下的 Unigram Model

對於以上模型,貝葉斯統計學派的統計學家會有不同意見,他們會很挑剔的批評只假設上帝擁有唯一一個固定的骰子是不合理的。在貝葉斯學派看來,一切引數都是隨機變數,以上模型中的骰子p不是唯一固定的,它也是一個隨機變數。所以按照貝葉斯學派的觀點,上帝是按照以下的過程在玩遊戲的

game-bayesian-unigram-model
上帝的這個罈子裡面,骰子可以是無窮多個,有些型別的骰子數量多,有些型別的骰子少,所以從概率分佈的角度看,罈子裡面的骰子p 服從一個概率分佈 p(p),這個分佈稱為引數p 的先驗分佈。

bayesian-unigram-model

貝葉斯觀點下的 Unigram Model

以上貝葉斯學派的遊戲規則的假設之下,語料W產生的概率如何計算呢?由於我們並不知道上帝到底用了哪個骰子p,所以每個骰子都是可能被使用的,只是使用的概率由先驗分佈p(p)來決定。對每一個具體的骰子p,由該骰子產生資料的概率是p(W|p), 所以最終資料產生的概率就是對每一個骰子p上產生的資料概率進行積分累加求和

p(W)=p(W|p)p(p)dp

在貝葉斯分析的框架下,此處先驗分佈p(p) 就可以有很多種選擇了,注意到    P(n)=Mult(n|p,N)
實際上是在計算一個多項分佈的概率,所以對先驗分佈的一個比較好的選擇就是多項分佈對應的共軛分佈,即 Dirichlet 分佈
Dir(p|α)=1Δ(α)k=1Vpαk1kα=(α1,,αV)

此處,Δ(α) 就是歸一化因子Dir(α),即


Δ(α)=k=1Vpαk1kdp.

dirichlet-multinomial-unigram

Dirichlet 先驗下的 Unigram Model

graph-model-unigram

Unigram Model的概率圖模型


Dirichlet 先驗 + 多項分佈的資料  後驗分佈為 Dirichlet 分佈

Dir(p|α)+MultCount(n)=Dir(p|α+n)

於是,在給定了引數 p的先驗分佈Dir(p|α) 的時候,各個詞出現頻次的資料 nMult(n|p,N) 為多項分佈, 所以無需計算,我們就可以推出後驗分佈是

p(p|W,α)=Dir(p|n+α)=1Δ(n+α)k=1Vpnk+αk1kdp(1)

貝葉斯的框架下引數p的估計:由於我們已經有了引數的後驗分佈,所以合理的方式是使用後驗分佈的極大值點,或者是引數在後驗分佈下的平均值。在該文件中,我們取平均值作為引數的估計值。使用上個小節中的結論,由於p 的後驗分佈為 Dir(p|n+α),於是

E(p)=(n1+α1Vi=1(ni+αi),n2+α2Vi=1(ni+αi),,nV+αVVi=1(ni+αi))

也就是說對每一個 pi, 我們用下式做引數估計
piˆ=ni+αiVi=1(ni+αi)(2)

考慮到 αi 在 Dirichlet 分佈中的物理意義是事件的先驗的偽計數,這個估計式子的含義是很直觀的:每個引數的估計值是其對應事件的先驗的偽計數和資料中的計數的和在整體計數中的比例。

進一步,我們可以計算出文字語料的產生概率

p(W|α)=p(W|p)p(p|α)dp=k=1VpnkkDir(p|α)dp=k=1Vpnkk1Δ(α)k=1Vpαk1kdp=1Δ(α)k=1Vpnk+αk1kdp=Δ(n+α)Δ(α)(3)

(α)=k=1Vpαk1kdp                                      

Mixture of unigrams model

    一篇文件只由一個主題生成。該模型的生成過程是:給某個文件先選擇一個主題,再根據該主題生成文件,該文件中的所有詞都來自一個主題。假設主題有,生成文件{語料}的概率為:
  
    其圖模型為(圖中被塗色的w表示可觀測變數,未被塗色的z表示未知的隱變數,N表示一篇文件中總共N個單詞,M表示M篇文件):



PLSA模型

    跟LDA模型最為接近的便是下面要闡述的這個pLSA模型——給pLSA加上貝葉斯框架,便是LDA
    {pLSA樣本隨機,引數雖未知但固定,屬於頻率派思想;區別LDA樣本固定,引數未知但不固定,是個隨機變數,服從一定的分佈,LDA屬於貝葉斯派思想}

pLSA模型

    Mixture of unigrams model中,我們假定一篇文件只由一個主題生成,可實際中,一篇文章往往有多個主題,只是這多個主題各自在文件中出現的概率大小不一樣。比如介紹一個國家的文件中,往往會分別從教育、經濟、交通等多個主題進行介紹。
Hoffman 於 1999 年給出的PLSA(Probabilistic Latent Semantic Analysis) 模型中首先進行了明確的數學化。Hoffman 認為一篇文件(Document) 可以由多個主題(Topic) 混合而成, 而每個Topic 都是詞彙上的概率分佈,文章中的每個詞都是由一個固定的 Topic 生成的。下圖是英語中幾個Topic 的例子。

topic-examples

Topic 就是Vocab 上的概率分佈


PLSA的文件生成模型
    假設你要寫M篇文件,由於一篇文件由各個不同的片語成,所以你需要確定每篇文件裡每個位置上的詞。再假定你一共有K個可選的主題,有V個可選的詞,我們們來玩一個扔骰子的遊戲。
  • 1. 假設你每寫一篇文件會製作一顆K面的“文件-主題”骰子(扔此骰子能得到K個主題中的任意一個),和K個V面的“主題-詞項” 骰子(每個骰子對應一個主題,K個骰子對應之前的K個主題,且骰子的每一面對應要選擇的詞項,V個面對應著V個可選的詞)。
    • 比如可令K=3,即製作1個含有3個主題的“文件-主題”骰子,這3個主題可以是:教育、經濟、交通。然後令V = 3,製作3個有著3面的“主題-詞項”骰子,其中,教育主題骰子的3個面上的詞可以是:大學、老師、課程,經濟主題骰子的3個面上的詞可以是:市場、企業、金融,交通主題骰子的3個面上的詞可以是:高鐵、汽車、飛機。
  • 2. 每寫一個詞,先扔該“文件-主題”骰子選擇主題,得到主題的結果後,使用和主題結果對應的那顆“主題-詞項”骰子,扔該骰子選擇要寫的詞。     {每篇文件有不同的 文件-主題 骰子}
    • 先扔“文件-主題”的骰子,假設(以一定的概率)得到的主題是教育,所以下一步便是扔教育主題篩子,(以一定的概率)得到教育主題篩子對應的某個詞:大學。
      • 上面這個投骰子產生詞的過程簡化下便是:“先以一定的概率選取主題,再以一定的概率選取詞”。事實上,一開始可供選擇的主題有3個:教育、經濟、交通,那為何偏偏選取教育這個主題呢?其實是隨機選取的,只是這個隨機遵循一定的概率分佈。比如3個主題的概率分佈是{教育:0.5,經濟:0.3,交通:0.2},我們把各個主題z在文件d中出現的概率分佈稱之為主題分佈,且是一個多項分佈
      • 同樣的,從主題分佈中隨機抽取出教育主題後,依然面對著3個詞:大學、老師、課程,這3個詞都可能被選中,但它們被選中的概率也是不一樣的。比如3個詞的概率分佈是{大學:0.5,老師:0.3,課程:0.2},我們把各個詞語w在主題z下出現的概率分佈稱之為詞分佈,這個詞分佈也是一個多項分佈
  • 所以,選主題和選詞都是兩個隨機的過程,先從主題分佈{教育:0.5,經濟:0.3,交通:0.2}中抽取出主題:教育,然後從該主題對應的詞分佈{大學:0.5,老師:0.3,課程:0.2}中抽取出詞:大學
  • 3. 最後,你不停的重複扔“文件-主題”骰子和”主題-詞項“骰子,重複N次(產生N個詞),完成一篇文件,重複這產生一篇文件的方法M次,則完成M篇文件。
    在這個過程中,我們並未關注詞和詞之間的出現順序,所以pLSA是一種詞袋方法。具體說來,該模型假設一組共現(co-occurrence)詞項關聯著一個隱含的主題類別
變數定義
  • 表示海量文件中某篇文件被選中的概率。
  • 表示詞在給定文件中出現的概率。
    • 怎麼計算得到呢?針對海量文件,對所有文件進行分詞後,得到一個詞彙列表,這樣每篇文件就是一個詞語的集合。對於每個詞語,用它在文件中出現的次數除以文件中詞語總的數目便是它在文件中出現的概率
  • 表示具體某個主題在給定文件下出現的概率。
  • 表示具體某個詞在給定主題下出現的概率,與主題關係越密切的詞,其條件概率越大。
    利用上述的第1、3、4個概率,我們便可以按照如下的步驟得到“文件-詞項”的生成模型
  1. 按照概率選擇一篇文件
  2. 選定文件後,從主題分佈中按照概率選擇一個隱含的主題類別
  3. 選定後,從詞分佈中按照概率選擇一個詞
    所以pLSA中生成文件的整個過程便是選定文件生成主題,確定主題生成詞。


 如何根據已經產生好的文件反推其主題?
    這個利用看到的文件推斷其隱藏的主題(分佈)的過程(其實也就是產生文件的逆過程),便是主題建模的目的:自動地發現文件集中的主題(分佈)。
    文件d和單詞w自然是可被觀察到的,但主題z卻是隱藏的。如下圖所示(圖中被塗色的d、w表示可觀測變數,未被塗色的z表示未知的隱變數,N表示一篇文件中總共N個單詞,M表示M篇文件):
    上圖中,文件d和詞w是我們得到的樣本(樣本隨機,引數雖未知但固定,所以pLSA屬於頻率派思想。區別於下文要介紹的LDA中:樣本固定,引數未知但不固定,是個隨機變數,服從一定的分佈,所以LDA屬於貝葉斯派思想),可觀測得到,所以對於任意一篇文件,其是已知的。
    從而可以根據大量已知的文件-詞項資訊,訓練出文件-主題主題-詞項,如下公式所示:
    故得到文件中每個詞的生成概率為:
              {P(di)應該都一樣吧-}

    由於可事先計算求出,未知,所以就是我們要估計的引數(值,通俗點說,就是要最大化這個θ

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

EM演算法的簡單介紹

    EM演算法,全稱為Expectation-maximization algorithm,為期望最大演算法,其基本思想是:首先隨機選取一個值去初始化待估計的值,然後不斷迭代尋找更優的使得其似然函式likelihood 比原來的要大。換言之,假定現在得到了,想求,使得

    EM的關鍵便是要找到的一個下界(注:,其中,X表示已經觀察到的隨機變數),然後不斷最大化這個下界,通過不斷求解下界的極大化,從而逼近要求解的似然函式

    所以EM演算法的一般步驟為:

  • 1. 隨機選取或者根據先驗知識初始化
  • 2. 不斷迭代下述兩步
    • ①給出當前的引數估計,計算似然函式的下界
    • ②重新估計引數θ,即求,使得
  • 3. 上述第二步後,如果收斂(即收斂)則退出演算法,否則繼續回到第二步。

    上述過程好比在二維平面上,有兩條不相交的曲線,一條曲線在上(簡稱上曲線),一條曲線在下(簡稱下曲線),下曲線為上曲線的下界。現在對上曲線未知,只已知下曲線,為了求解上曲線的最高點,我們試著不斷增大下曲線,使得下曲線不斷逼近上曲線,下曲線在某一個點達到區域性最大值並與上曲線在這點的值相等,記錄下這個值,然後繼續增大下曲線,尋找下曲線上與上曲線上相等的值,迭代到收斂(即收斂)停止,從而利用當前下曲線上的區域性最大值當作上曲線的全域性最大值(換言之,EM演算法不保證一定能找到全域性最優值)。如下圖所示:


PLSA演算法的EM推導詳細介紹

    假定有訓練集,包含m個獨立樣本,希望從中找到該組資料的模型p(x,z)的引數。   

    然後通過極大似然估計建立目標函式--對數似然函式

   

  {規範地,x -> xi}         }p(x|theta)和p(x;theta)的區別

這裡,z是隱隨機變數,直接找到引數的估計是很困難的。我們的策略是建立的下界,並且求該下界的最大值;重複這個過程,直到收斂到區域性最大值。

    令Qi是z的某一個分佈(表示式待會可以求解出來),Qi≥0,且結合Jensen不等式,有:

[TopicModel - EM演算法]

為了尋找儘量緊的下界,我們可以讓使上述等號成立,而若要讓等號成立的條件則是:

    換言之,有以下式子成立:,且由於有:

    所以可得:

      {the distribution of zi given xi and parameterized by theta,e.g. Qi(Zi) = theta0^x0*theta1^x1*... -}

最終得到EM演算法的整體框架:

                     {E步中,是通過上次的p(z|d)和p(w|z)求出p(x,z;theta)的}


EM演算法估計pLSA的兩未知引數(對應上面的框架)

    首先嚐試從矩陣的角度來描述待估計的兩個未知變數

  • 假定用表示詞表在主題上的一個多項分佈,則可以表示成一個向量,每個元素表示詞項出現在主題中的概率,即

  • 表示所有主題在文件上的一個多項分佈,則可以表示成一個向量,每個元素表示主題出現在文件中的概率,即

    這樣,巧妙的把轉換成了兩個矩陣。換言之,最終我們要求解的引數是這兩個矩陣

    由於詞和詞之間是相互獨立的,所以整篇文件N個詞的分佈為:

    再由於文件和文件之間也是相互獨立的,所以整個語料庫中詞的分佈為(整個語料庫M篇文件,每篇文件N個詞):

    其中,表示詞項在文件中的詞頻,表示文件di中詞的總數,顯然有
    從而得到整個語料庫的詞分佈的對數似然函式下述公式中有個小錯誤,正確的應該是:N為M,M為N):

{note:1)步的推導:


其中∑ P(wj|zk)P(zk|di) = P(wj|di)的推導:


{條件概率的全概率並且我們是按照如下方式得到“詞-文件”的生成模型的:

1. 按照概率P(di)選擇一篇文件di
2. 按照概率P(zk|di)選擇一個隱含的主題類別zk
3. 按照概率P(wj|zk)生成一個詞wj

根據操作的物理意義 P(wj,zk,di) = P(wj,zk)
如果從PLSA的話,模型本身就設定w與d無關的
按照這個順序操作的話  P(wj|zk,di) 確實等於 P(wj|zk);因為主題zk都是從文章di中選的,詞wi又都是從主題zk中選的,所以這裡的詞wi都是從文章di中選的
對於word只關注來自哪個topic,不關注來自哪個doc-}}

    現在,我們需要最大化上述這個對數似然函式來求解引數。對於這種含有隱變數的最大似然估計,可以使用EM演算法。

  • E-step:假定引數已知,計算此時隱變數的後驗概率。
    利用貝葉斯法則,可以得到:

    

{步驟中,我們假定所有的都是已知的,初始時隨機賦值,後面迭代的過程中取前一輪M步驟中得到的引數值。}

  • M-step:帶入隱變數的後驗概率,最大化樣本分佈的對數似然函式,求解相應的引數。

    觀察之前得到的對數似然函式的結果,由於文件長度可以單獨計算,所以去掉它不影響最大化似然函式。


此外,根據E-step的計算結果,把代入,於是我們只要最大化下面這個函式 {E()}即可(下述公式中有個小錯誤,正確的應該是:N為M,M為N):

                             

E     

{TopicModel - EM演算法 - Lazy Statistician規則:E(z) = ∑P(zk|di, wj)z中z替換成L式, 相當於把其中與z相關的部分積分掉


TopicModel - EM演算法 最大化Complete data對數似然函式的期望(即把其中與z相關的部分積分掉)}

    這是一個多元函式求極值問題,並且已知有如下約束條件(下述公式中有個小錯誤,正確的應該是:M為N):

    (1)

   凸優化中,一般處理這種帶有約束條件的極值問題,常用的方法便是拉格朗日乘數法,即通過引入拉格朗日乘子將約束條件和多元(目標)函式融合到一起,轉化為無約束條件的極值問題。

    這裡我們引入兩個拉格朗日乘子,從而寫出拉格朗日函式(下述公式中有個小錯誤,正確的應該是:N為M,M為N):

    因為我們要求解的引數是,所以分別對求偏導,然後令偏導結果等於0,得到(下述公式中有個小錯誤,正確的應該是:N為M,M為N):

   (2)

    消去拉格朗日乘子,最終可估計出引數下述公式中有個小錯誤,正確的應該是:N為M,M為N):


{注意這裡進行過方程兩邊同時乘以的變形},聯立上面4組方程(1)(2),我們就可以解出M步驟中通過最大化期望估計出的新的引數值

解方程組的關鍵在於先求出,其實只需要做一個加和運算就可以把的係數都化成1,後面就好計算了}

TopicModel - PLSA模型及PLSA的EM推導

然後使用更新後的引數值,我們又進入E步驟,計算隱含變數 Given當前估計的引數條件下的後驗概率。如此不斷迭代,直到滿足終止條件。

from:http://blog.csdn.net/pipisorry/article/details/42560693

ref:

1.TopicModel - LSA(隱性語義分析)的早期方法SVD

2.TopicModel - EM演算法及PLSA的EM推導

3.TopicModel - LDA詳解

相關文章