本文參考自:https://www.zhihu.com/question/32286630
LDA中topic個數的確定是一個困難的問題。
當各個topic之間的相似度的最小的時候,就可以算是找到了合適的topic個數。
參考
一種基於密度的自適應最優LDA模型選擇方法 ,簡略過程如下:
- 選取初始K值,得到初始模型,計算各topic之間的相似度
- 增加或減少K的值,重新訓練得到模型,再次計算topic之間的相似度
- 重復第二步直到得到最優的K
One of the methods for automatically determining the number of topics is called
the ** hierarchical Dirichlet process (HDP)**
LDA中如何確定topic數量一直都沒有公認的好方法,原因在於不同業務對於生成topic的要求是存在差異的。
如果LDA的結果是用於某個目標明確的學習任務(比如分類),那么就直接采用最終任務的指標來衡量就好了,能夠實現分類效果最好的topic個數就是最合適的。
如果沒有這樣的任務怎么辦?業界最常用的指標包括Perplexity,MPI-score等。以我的經驗,通過觀察Perplexity/MPI-score這些指標隨topic個數的變化確實能夠幫助我們選擇合適的個數值,比如可以找出曲線的拐點。但是這些指標只能作為參考,而不能作為標准。
有的業務需要topic之間相互比較獨立,那么就可以選擇考察topic之間的相關性作為額外的指標。而有的業務可以容忍topic之間存在overlap,但是對topic中詞的聚合性要求高,這時候就需要尋找一些聚類的指標做評判標准。
最后,肉眼看仍然是我目前發現的最簡單有效的方法。
這個問題在《LDA漫游指南》一書中做了很好的解答,詳見第4章第4.2節
topic number K:許多讀者問,如何設置主題個數,其實現在沒有特別好的辦(
HDP等較為復雜的模型可以自動確定這個參數,但是模型復雜,計算復雜),
目前只有
交叉驗證(cross validation),通過設置不同的K值訓練后驗證比較求得最佳值,我的建議是一開始不要設置太大而逐步增大實驗,Blei在論文《Latent Dirichlet Allocation》提出過一個方法,采用設置不同的
topic數量,畫出topic_number-perplexity曲線;Thomas L. Griffiths等人在《Finding scientific topics》也提出過一個驗證方法,畫出topic_number-logP(w|T)曲線,然后找到曲線中的縱軸最高點便是topic數量的最佳值。有興趣的讀者可以去讀讀這兩篇論文原文的相應部分。這個參數同時也跟文章數量有關,可以通過一個思想實驗來驗證:設想兩個極端情況:如果僅有一篇文章做訓練,則設置幾百個topic不合適,如果將好幾億篇文章拿來做topic model,則僅僅設置很少topic也是不合適的。
