Latent Dirchlet Allocation in action

LDA in action

Latent Direchlet Allocation

關於公式推導可以看LDA數學八卦Parameter estimation for text analysis,代碼中的公式標號來自於後文。

toy code

https://github.com/gajanlee/toys/tree/master/toy_lda

如何實現

1. 數據轉換

LDA 是詞袋模型,所以不在乎詞的順序,每個文檔轉換爲list形式。[1, 1, 2, 2, 3, 4 …]代表有兩個word_id爲1的詞,2個word_id爲2的詞… 所有的document一起輸入進去,所以爲了方便起見,需要一個Docs_is和Term_js代表文檔編號和詞編號,合起來表示一個文檔中的詞,Term_js中的每個值代表word_id。

2. train

每個詞需要一個topic,所以用一個一維list存放所有詞的topic(初始化爲隨機)。使用collapsed Gibbas sample公式forumula 79,對於輸入文檔的各項統計後,得到當前詞的各個topic概率。隨機一個數,看看落在哪個topic內,作爲新的採樣。對每個詞進行一次。

採樣後,使用前驗+後驗公式formula 82,歸一化後,獲取topic_term_distribution和document_topic_distribution。

3. perplexity

在運行中檢查算法運行效果的公式,loglikelihood,同一個文章內每個詞概率相乘。

4. inference

Evaluation Methods for Topic Models在Section 4.1提出了一種更能逼近真實分佈的"iterated pseudo-counts"方法。

並行LDA

document和term不能夠並行,所以我們可以使用對角線並行法。詳見《LDA》漫遊指南。

代碼參考

https://github.com/lda-project/lda

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