主題建模是一種在大量文檔中查找抽象主題的藝術方法。一種做爲_監督無的_機器學習方法,主題模型不容易評估,由於沒有標記的「基礎事實」數據可供比較。然而,因爲主題建模一般須要預先定義一些參數(首先是要發現的主題_ķ_的數量),所以模型評估對於找到給定數據的「最佳」參數集是相當重要的。python
使用未標記的數據時,模型評估很難。這裏描述的指標都試圖用理論方法評估模型的質量,以便找到「最佳」模型。web
有些指標僅用於評估後驗分佈(主題 - 單詞和文檔 - 主題分佈),而無需以某種方式將模型與觀察到的數據進行比較。網絡
主題建模的主要功能位於tmtoolkit.lda_utils
。python爬蟲
import matplotlib.pyplot as plt # 繪製結果 plt.style.use('ggplot') # 讀取數據 from tmtoolkit.utils import unpickle_file # 模型評估 from tmtoolkit.lda_utils import tm_lda # 創建模型評估圖 from tmtoolkit.lda_utils.common import results_by_parameter from tmtoolkit.lda_utils.visualize import plot_eval_results
接下來,咱們加載由文檔標籤,詞彙表(惟一單詞)列表和文檔 - 術語 - 矩陣組成的數據dtm
。咱們確保dtm**維度**
合適:機器學習
doc_labels, vocab, dtm = unpickle_file('ap.pickle') print('%d documents, %d vocab size, %d tokens' % (len(doc_labels), len(vocab), dtm.sum())) assert len(doc_labels) == dtm.shape[0] assert len(vocab) == dtm.shape[1]
如今咱們定義應該評估的參數集咱們設置了一個常量參數字典。const_params
,它將包含不變參數用於計算每一個主題模型。咱們還設置了varying_params,
包含具備不一樣參數值的字典的不一樣參數列表:函數
在這裏,咱們想要從一系列主題中計算不一樣的主題模型ks = [10, 20, .. 100, 120, .. 300, 350, .. 500, 600, 700]
。因爲咱們有26個不一樣的值ks
,咱們將建立和比較26個主題模型。請注意,還咱們alpha
爲每一個模型定義了一個參數1/k
(有關LDA中的α和測試超參數的討論,請參見下文)。參數名稱必須與所使用的相應主題建模包的參數匹配。在這裏,咱們將使用lda
,所以咱們經過參數,如n_iter
或n_topics
(而與其餘包的參數名稱也會有所不一樣num_topics
,不是而n_topics
)。學習
咱們如今能夠使用模塊中的evaluate_topic_models
函數開始評估咱們的模型tm_lda
,並將不一樣參數列表和帶有常量參數的字典傳遞給它:測試
默認狀況下,這將使用全部CPU內核來計算模型來並行評估它們。 大數據
plot_eval_results
函數使用在評估期間計算的全部度量建立繪圖。以後,若是須要,咱們能夠使用matplotlib方法調整繪圖(例如添加繪圖標題),最後咱們顯示和/或保存繪圖。lua
主題模型評估,alpha = 1 / k,beta = 0.01
請注意,對於「loglikelihood」度量,僅報告最終模型的對數似然估計,這與Griffiths和Steyvers使用的調和均值方法不一樣。沒法使用Griffiths和Steyvers方法,由於它須要一個_特殊_的Python包(_gmpy2_) ,這在我運行評估的CPU集羣機器上是不可用的。可是,「對數似然」將報告很是類似的結果。
除了主題數量以外,還有_alpha_和_beta_(有時是文獻中的_eta_)參數。二者都用於定義Dirichlet先驗分佈,用於計算各自的後驗分佈。Alpha是針對特定於文檔的主題分佈的先驗的「參數」,β是針對主題特定的單詞分佈的先驗的參數 。
主題模型,alpha = 1 / k,beta = 0.1
當咱們使用與上述相同的alpha參數和相同的_k_範圍運行評估時,可是當β= 0.1而不是β= 0.01時,咱們看到對數似然在_k_的較低範圍內最大化,即大約70到300(見上圖) 。
組合這些參數有不少種可能性,可是解釋這些參數一般並不容易。下圖顯示了不一樣情景的評估結果:(1)α固定,β的值取決於_k_,(2)α和β都固定, (3)α和β均取決於_k_。
(1)主題模型,alpha = 0.1,beta = 1 /(10k)
(2)主題模型,alpha = 0.1,beta = 0.01
(3)主題模型,alpha = 1 / k,beta = 1 /(10k)
LDA超參數α,β和主題數量都相互關聯,相互做用很是複雜。在大多數狀況下,用於定義模型「稀疏性」的beta的固定值彷佛是合理的,這也是Griffiths和Steyvers所推薦的。一個更精細的模型評估,具備不一樣的alpha參數(取決於_k_)使用解釋的指標能夠完成不少主題。
▍須要幫助?聯繫咱們
最受歡迎的看法
3.r語言文本挖掘tf-idf主題建模,情感分析n-gram建模研究
4.python主題建模可視化lda和t-sne交互式可視化
5.r語言文本挖掘nasa數據網絡分析,tf-idf和主題建模