LDA(生)

***********************示例**************************

LDA要乾的事情簡單來說就是爲一堆文檔進行聚類(所以是非監督學習),一種topic就是一類,要聚成的topic數目是事先指定的。聚類的結果是一個概率,而不是布爾型的100%屬於某個類。國外有個博客[1]上有一個清晰的例子,直接引用:

Suppose you have the following set of sentences:

  • I like to eat broccoli and bananas.
  • I ate a banana and spinach smoothie for breakfast.
  • Chinchillas and kittens are cute.
  • My sister adopted a kitten yesterday.
  • Look at this cute hamster munching on a piece of broccoli.

What is latent Dirichlet allocation? It’s a way of automatically discovering topics that these sentences contain. For example, given these sentences and asked for 2 topics, LDA might produce something like

  • Sentences 1 and 2: 100% Topic A
  • Sentences 3 and 4: 100% Topic B
  • Sentence 5: 60% Topic A, 40% Topic B
  • Topic A: 30% broccoli, 15% bananas, 10% breakfast, 10% munching, … (at which point, you could interpret topic A to be about food)
  • Topic B: 20% chinchillas, 20% kittens, 20% cute, 15% hamster, … (at which point, you could interpret topic B to be about cute animals)

上面關於sentence 5的結果,可以看出來是一個明顯的概率類型的聚類結果(sentence 1和2正好都是100%的確定性結果)。

再看例子裏的結果,除了爲每句話得出了一個概率的聚類結果,而且對每個Topic,都有代表性的詞以及一個比例。以Topic A爲例,就是說所有對應到Topic A的詞裏面,有30%的詞是broccoli。在LDA算法中,會把每一個文檔中的每一個詞對應到一個Topic,所以能算出上面這個比例。這些詞爲描述這個Topic起了一個很好的指導意義,我想這就是LDA區別於傳統文本聚類的優勢吧。

*******************LDA整體流程******************

先定義一些字母的含義:

  • 文檔集合D,topic集合T
  • D中每個文檔d看作一個單詞序列< w1,w2,...,wn >,wi表示第i個單詞,設d有n個單詞。(LDA裏面稱之爲word bag,實際上每個單詞的出現位置對LDA算法無影響)
  • D中涉及的所有不同單詞組成一個大集合VOCABULARY(簡稱VOC)

LDA以文檔集合D作爲輸入(會有切詞,去停用詞,取詞幹等常見的預處理,略去不表),希望訓練出的兩個結果向量(設聚成k個Topic,VOC中共包含m個詞):

  • 對每個D中的文檔d,對應到不同topic的概率θd < pt1,..., ptk >,其中,pti表示d對應T中第i個topic的概率。計算方法是直觀的,pti=nti/n,其中nti表示d中對應第i個topic的詞的數目,n是d中所有詞的總數。
  • 對每個T中的topic t,生成不同單詞的概率φt < pw1,..., pwm >,其中,pwi表示t生成VOC中第i個單詞的概率。計算方法同樣很直觀,pwi=Nwi/N,其中Nwi表示對應到topic t的VOC中第i個單詞的數目,N表示所有對應到topic t的單詞總數。

LDA的核心公式如下:

p(w|d) = p(w|t)*p(t|d)

直觀的看這個公式,就是以Topic作爲中間層,可以通過當前的θd和φt給出了文檔d中出現單詞w的概率。其中p(t|d)利用θd計算得到,p(w|t)利用φt計算得到。

實際上,利用當前的θd和φt,我們可以爲一個文檔中的一個單詞計算它對應任意一個Topic時的p(w|d),然後根據這些結果來更新這個詞應該對應的topic。然後,如果這個更新改變了這個單詞所對應的Topic,就會反過來影響θd和φt

LDA算法開始時,先隨機地給θd和φt賦值(對所有的d和t)。然後上述過程不斷重複,最終收斂到的結果就是LDA的輸出。


***************TOPIC數目的確定*******************

LDA中topic個數的確定是一個困難的問題。當各個topic之間的相似度的最小的時候,就可以算是找到了合適的topic個數。參考一種基於密度的自適應最優LDA模型選擇方法 ,簡略過程如下:
  1. 選取初始K值,得到初始模型,計算各topic之間的相似度
  2. 增加或減少K的值,重新訓練得到模型,再次計算topic之間的相似度
  3. 重複第二步直到得到最優的K


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章