天天看點

淺析LDA-主題模型

簡介

關于LDA有兩種含義,一種是線性判别分析(Linear Discriminant Analysis),一種是機率主題模型:隐含狄利克雷分布(Latent Dirichlet Allocation,簡稱LDA),本文講後者。

主題模型

什麼是主題模型?

以下我從維基百科上得到的一些資訊:
           

主題模型(Topic Model)在機器學習和自然語言處理等領域是用來在一系列文檔中發現抽象主題的一種統計模型。直覺來講,如果一篇文章有一個中心思想,那麼一些特定詞語會更頻繁的出現。比方說,如果一篇文章是在講狗的,那“狗”和“骨頭”等詞出現的頻率會高些。如果一篇文章是在講貓的,那“貓”和“魚”等詞出現的頻率會高些。而有些詞例如“這個”、“和”大概在兩篇文章中出現的頻率會大緻相等。但真實的情況是,一篇文章通常包含多種主題,而且每個主題所占比例各不相同。是以,如果一篇文章10%和貓有關,90%和狗有關,那麼和狗相關的關鍵字出現的次數大概會是和貓相關的關鍵字出現次數的9倍。一個主題模型試圖用數學架構來展現文檔的這種特點。主題模型自動分析每個文檔,統計文檔内的詞語,根據統計的資訊來斷定目前文檔含有哪些主題,以及每個主題所占的比例各為多少。

主題模型最初是運用于自然語言處理相關方向,但目前以及延伸至例如生物資訊學的其它領域。

LDA解析

LDA的作用

傳統判斷兩個文檔相似性的方法是通過檢視兩個文檔共同出現的單詞的多少,如TF-IDF等,這種方法沒有考慮到文字背後的語義關聯,可能在兩個文檔共同出現的單詞很少甚至沒有,但兩個文檔是相似的。

舉個例子,有兩個句子分别如下:

            “喬布斯離我們而去了。”

            “蘋果價格會不會降?”
           

可以看到上面這兩個句子沒有共同出現的單詞,但這兩個句子是相似的,如果按傳統的方法判斷這兩個句子肯定不相似,是以在判斷文檔相關性的時候需要考慮到文檔的語義,而語義挖掘的利器是主題模型,LDA就是其中一種比較有效的模型。

在主題模型中,主題表示一個概念、一個方面,表現為一系列相關的單詞,是這些單詞的條件機率。形象來說,主題就是一個桶,裡面裝了出現機率較高的單詞,這些單詞與這個主題有很強的相關性。

怎樣才能生成主題?對文章的主題應該怎麼分析?這是主題模型要解決的問題。

首先,可以用生成模型來看文檔和主題這兩件事。所謂生成模型,就是說,我們認為一篇文章的每個詞都是通過“以一定機率選擇了某個主題,并從這個主題中以一定機率選擇某個詞語”這樣一個過程得到的。那麼,如果我們要生成一篇文檔,它裡面的每個詞語出現的機率為:

淺析LDA-主題模型

這個機率公式可以用矩陣表示:

淺析LDA-主題模型

其中”文檔-詞語”矩陣表示每個文檔中每個單詞的詞頻,即出現的機率;”主題-詞語”矩陣表示每個主題中每個單詞的出現機率;”文檔-主題”矩陣表示每個文檔中每個主題出現的機率。

給定一系列文檔,通過對文檔進行分詞,計算各個文檔中每個單詞的詞頻就可以得到左邊這邊”文檔-詞語”矩陣。主題模型就是通過左邊這個矩陣進行訓練,學習出右邊兩個矩陣。

主題模型有兩種:pLSA(ProbabilisticLatent Semantic Analysis)和LDA(Latent Dirichlet Allocation),下面主要介紹LDA。

LDA-主題模型

按照wiki上的介紹,LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,是一種主題模型,它可以将文檔集 中每篇文檔的主題以機率分布的形式給出,進而通過分析一些文檔抽取出它們的主題(分布)出來後,便可以根據主題(分布)進行主題聚類或文本分類。同時,它是一種典型的詞袋模型,即一篇文檔是由一組詞構成,詞與詞之間沒有先後順序的關系。

此外,一篇文檔可以包含多個主題,文檔中每一個詞都由其中的一個主題生成。

人類是怎麼生成文檔的呢?LDA的這三位作者在原始論文中給了一個簡單的例子。比如假設事先給定了這幾個主題:Arts、Budgets、Children、Education,然後通過學習訓練,擷取每個主題Topic對應的詞語。如下圖所示:

淺析LDA-主題模型

然後以一定的機率選取上述某個主題,再以一定的機率選取那個主題下的某個單詞,不斷的重複這兩步,最終生成如下圖所示的一篇文章(其中不同顔色的詞語分别對應上圖中不同主題下的詞):

淺析LDA-主題模型

而當我們看到一篇文章後,往往喜歡推測這篇文章是如何生成的,我們可能會認為作者先确定這篇文章的幾個主題,然後圍繞這幾個主題遣詞造句,表達成文。LDA就是要幹這事:根據給定的一篇文檔,推測其主題分布。

通俗來說,可以假定認為人類是根據上述文檔生成過程寫成了各種各樣的文章,現在某小撮人想讓計算機利用LDA幹一件事:你計算機給我推測分析網絡上各篇文章分别都寫了些啥主題,且各篇文章中各個主題出現的機率大小(主題分布)是啥。然而,就是這麼一個看似普通的LDA,一度吓退了不少想深入探究其内部原理的初學者。難在哪呢,難就難在LDA内部涉及到的數學知識點太多了。

在LDA模型中,一篇文檔生成的方式如下:

從狄利克雷分布

淺析LDA-主題模型

中取樣生成文檔 i 的主題分布

淺析LDA-主題模型

從主題的多項式分布

淺析LDA-主題模型

中取樣生成文檔i第 j 個詞的主題

淺析LDA-主題模型

從狄利克雷分布

淺析LDA-主題模型

中取樣生成主題

淺析LDA-主題模型

對應的詞語分布

淺析LDA-主題模型

從詞語的多項式分布

淺析LDA-主題模型

中采樣最終生成詞語

淺析LDA-主題模型

其中,類似Beta分布是二項式分布的共轭先驗機率分布,而狄利克雷分布(Dirichlet分布)是多項式分布的共轭先驗機率分布。

此外,LDA生成模型如下圖所示(類似貝葉斯網絡結構):

淺析LDA-主題模型

對于LDA生成模型的了解: 假定我們需要寫一篇文檔, 那麼這個文章可能包含多個主題, 也就是說我們先要決定我們的文檔由哪些主題構成, 這些主題所占的比例如何。 有了主題分布, 也就對應于

淺析LDA-主題模型

(每篇文檔的主題分布), 有了主題分布, 我們就開始寫文檔, 在決定寫一個單詞的時候, 根據上圖的模型, 先要由主題分布決定這個單詞所屬的topic, 然後有了這個單詞的topic, 在根據每個topic下面的term的分布選擇應該采用哪個單詞。 這樣重複這個過程就可以獲得一篇有N個單詞的文檔。重複M次實驗就會有M篇文檔。

以上的簡短的概括了LDA的主題思想,截下來介紹一下上面中所涉及到的幾個分布。

二項分布、多項分布、beta分布、Dirichlet 分布

  • 二項分布
    淺析LDA-主題模型
  • 多項式分布
    淺析LDA-主題模型
  • beta分布
    淺析LDA-主題模型

    如果想要了解gamma函數可以通路一下連結

    https://zh.wikipedia.org/wiki/%CE%93%E5%87%BD%E6%95%B0

  • Dirichlet 分布
    淺析LDA-主題模型

如果想要檢視更詳細的内容可以參照一下大師的部落格詳解以上的内容采用大師的詳解:

http://blog.csdn.net/v_july_v/article/details/41209515#t34

常見的一個上帝扔骰子的例子:

在《LDA數學八卦》一文中,對文檔的生成過程有個很形象的描述:

淺析LDA-主題模型

圖中一篇文檔可以包含多個主題,文檔中每一個詞都由其中的一個主題生成。3 過程重複N次生成一篇含有N個詞的文檔,然後重複M遊戲生成M篇文檔。

來看一個簡單的例子**潛在狄立克雷配置設定**(Latent Dirichlet Allocation,LDA)主題模型是最簡單的主題模型,它描述的是一篇文章是如何産生的。如圖所示: 
           
淺析LDA-主題模型

從左往右看,一個主題是由一些詞語的分布定義的,比如藍色主題是由2%幾率的data,2%的number……構成的。一篇文章則是由一些主題構成的,比如右邊的直方圖。具體産生過程是,從主題集合中按機率分布選取一些主題,從該主題中按機率分布選取一些詞語,這些詞語構成了最終的文檔(LDA模型中,詞語的無序集合構成文檔,也就是說詞語的順序沒有關系)。

如果我們能将上述兩個機率分布計算清楚,那麼我們就得到了一個模型,該模型可以根據某篇文檔推斷出它的主題分布,即分類。由文檔推斷主題是文檔生成過程的逆過程。

LDA算法模型

unigram model

該模型使用下面方法生成1個文檔:

For each ofthe N words w_n: 
                Choose a word w_n ~ p(w);
           

其中N表示要生成的文檔的單詞的個數,w_n表示生成的第n個單詞w,p(w)表示單詞w的分布,可以通過語料進行統計學習得到,比如給一本書,統計各個單詞在書中出現的機率。

這種方法通過訓練語料獲得一個單詞的機率分布函數,然後根據這個機率分布函數每次生成一個單詞,使用這個方法M次生成M個文檔。其圖模型如下圖所示:

淺析LDA-主題模型

但是unigram model的方法的缺點就是生成的文本沒有主題且過于簡單!是以有了第二種方法。

Mixture of unigram

由于unigram model方法缺點是生成的文本沒有文本主題,過于簡單,mixture of unigram對其進行了改進,該模型使用下面方法生成一個文檔:

choose a topic z ~ p(z);
for each of the N words w_n;
    choose a word w_n ~ p(w|z)
           

其中z表示一個主題,p(z)表示主題的機率分布,z通過p(z)按機率産生;N和w_n同方法一;p(w|z)表示給定z時w的分布,可以看成是一個k×V的矩陣,k為主題個數,V為單詞個數,每行表示這個主題對應的單詞的機率分布,即主題z所包含的各個單詞的詞頻,通過這個機率分布按一定機率生成每個單詞。

淺析LDA-主題模型

從上圖可以看出,z在w所在的長方形外面,表示z生成一份N個單詞的文檔時主題z隻生成一次,即隻允許一個文檔隻有一個主題,這不太符合正常情況,通常一個文檔可能包含多個主題。是以還有第三個方法

LDA(Latent Dirichlet Allocation)

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的單詞機率分布生成一個單詞。其圖模型如下圖所示:

淺析LDA-主題模型

從上圖可知LDA的聯合機率為:

淺析LDA-主題模型

把上面的式子對應到圖上,可以大緻按下圖了解:

淺析LDA-主題模型

從上圖可以看出,LDA的三個表示層被三種顔色表示出來:

1. corpus-level(紅色):α和β表示語料級别的參數,也就是每個文檔都一樣,是以生成過程隻采樣一次。

    2.document-level(橙色):θ是文檔級别的變量,每個文檔對應一個θ,也就是每個文檔産生各個主題z的機率是不同的,所有生成每個文檔采樣一次θ。

    3. word-level(綠色):z和w都是單詞級别變量,z由θ生成,w由z和β共同生成,一個 單詞w對應一個主題z。

    通過上面對LDA生成模型的讨論,可以知道LDA模型主要是從給定的輸入語料中學習訓練兩個控制參數α和β,學習出了這兩個控制參數就确定了模型,便可以用來生成文檔。其中α和β分别對應以下各個資訊:

    α:分布p(θ)需要一個向量參數,即Dirichlet分布的參數,用于生成一個主題θ向量;

    β:各個主題對應的單詞機率分布矩陣p(w|z)。
           

把w當做觀察變量,θ和z當做隐藏變量,就可以通過EM算法學習出α和β,求解過程中遇到後驗機率p(θ,z|w)無法直接求解,需要找一個似然函數下界來近似求解,原文使用基于分解(factorization)假設的變分法(varialtional inference)進行計算,用到了EM算法。每次E-step輸入α和β,計算似然函數,M-step最大化這個似然函數,算出α和β,不斷疊代直到收斂。

LDA的EM推導:

http://www.cnblogs.com/hebin/archive/2013/04/25/3043575.html

EM算法原理詳解:

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

http://www.chengxuyuans.com/Linux/88638.html

參考

參考部落格:

http://blog.csdn.net/v_july_v/article/details/41209515#t34

http://blog.csdn.net/chixujohnny/article/details/51604563

http://cos.name/author/rickjin/

http://blog.csdn.net/huagong_adu/article/details/7937616

維基百科主題模型以及gamma函數:

https://zh.wikipedia.org/wiki/%CE%93%E5%87%BD%E6%95%B0

https://zh.wikipedia.org/wiki/%E4%B8%BB%E9%A2%98%E6%A8%A1%E5%9E%8B

隐含狄利克雷分布:

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

繼續閱讀