在PYTHON中進(jìn)行主題模型LDA分析
原文鏈接:http://tecdat.cn/?p=6227
?
主題建模是一種在大量文檔中查找抽象主題的藝術(shù)方法。一種作為監(jiān)督無的機(jī)器學(xué)習(xí)方法,主題模型不容易評估,因?yàn)闆]有標(biāo)記的“基礎(chǔ)事實(shí)”數(shù)據(jù)可供比較。然而,由于主題建模通常需要預(yù)先定義一些參數(shù)(首先是要發(fā)現(xiàn)的主題?的數(shù)量),因此模型評估對于找到給定數(shù)據(jù)的“最佳”參數(shù)集是至關(guān)重要的。
?
?
概率LDA主題模型的評估方法
?
使用未標(biāo)記的數(shù)據(jù)時(shí),模型評估很難。這里描述的指標(biāo)都試圖用理論方法評估模型的質(zhì)量,以便找到“最佳”模型。
?
評估后部分布的密度或發(fā)散度
有些指標(biāo)僅用于評估后驗(yàn)分布(主題 - 單詞和文檔 - 主題分布),而無需以某種方式將模型與觀察到的數(shù)據(jù)進(jìn)行比較。
?
使用美聯(lián)社數(shù)據(jù)查找最佳主題模型
?
計(jì)算和評估主題模型
?
主題建模的主要功能位于tmtoolkit.lda_utils
。
import matplotlib.pyplot as plt ? # 繪制結(jié)果
plt.style.use('ggplot')
# 讀取數(shù)據(jù)
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
?
?
接下來,我們加載由文檔標(biāo)簽,詞匯表(唯一單詞)列表和文檔 - 術(shù)語 - 矩陣組成的數(shù)據(jù)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]
?
?
現(xiàn)在我們定義應(yīng)該評估的參數(shù)集我們設(shè)置了一個(gè)常量參數(shù)字典。const_params
,它將用于每個(gè)主題模型計(jì)算并保持不變我們還設(shè)置了。varying_params
包含具有不同參數(shù)值的字典的不同參數(shù)列表:
在這里,我們想要從一系列主題中計(jì)算不同的主題模型ks = [10, 20, .. 100, 120, .. 300, 350, .. 500, 600, 700]
。由于我們有26個(gè)不同的值ks
,我們將創(chuàng)建和比較26個(gè)主題模型。請注意,還我們alpha
為每個(gè)模型定義了一個(gè)參數(shù)1/k
(有關(guān)LDA中的α和測試超參數(shù)的討論,請參見下文)。參數(shù)名稱必須與所使用的相應(yīng)主題建模包的參數(shù)匹配。在這里,我們將使用lda
,因此我們通過參數(shù),如n_iter
或n_topics
(例如,而與其他包的參數(shù)名稱也會(huì)有所不同num_topics
,不是而n_topics
在gensim)。
我們現(xiàn)在可以使用模塊中的evaluate_topic_models
函數(shù)開始評估我們的模型tm_lda
,并將不同參數(shù)列表和帶有常量參數(shù)的字典傳遞給它:
默認(rèn)情況下,這將使用所有CPU內(nèi)核來計(jì)算模型并并行評估它們。?
該plot_eval_results
函數(shù)使用在評估期間計(jì)算的所有度量創(chuàng)建33繪圖。之后,如果需要,我們可以使用matplotlib方法調(diào)整繪圖(例如添加繪圖標(biāo)題),最后我們顯示和/或保存繪圖。
結(jié)果
?

主題模型評估,alpha = 1 / k,beta = 0.01
?
請注意,對于“l(fā)oglikelihood”度量,僅報(bào)告最終模型的對數(shù)似然估計(jì),這與Griffiths和Steyvers使用的調(diào)和均值方法不同。無法使用Griffiths和Steyvers方法,因?yàn)樗枰粋€(gè)特殊的Python包(gmpy2) ,這在我運(yùn)行評估的CPU集群機(jī)器上是不可用的。但是,“對數(shù)似然”將報(bào)告非常相似的結(jié)果。
阿爾法和貝塔參數(shù)
除了主題數(shù)量之外,還有alpha和beta(有時(shí)是文獻(xiàn)中的eta)參數(shù)。兩者都用于定義Dirichlet先驗(yàn),用于計(jì)算各自的后驗(yàn)分布.Alpha是針對特定于文檔的主題分布的先驗(yàn)的“濃度參數(shù)”,并且是針對主題特定的單詞分布的先前的β 。?

?
主題模型,alpha = 1 / k,beta = 0.1
當(dāng)我們使用與上述相同的alpha參數(shù)和相同的k范圍運(yùn)行評估時(shí),但是當(dāng)β= 0.1而不是β= 0.01時(shí),我們看到對數(shù)似然在k的較低范圍內(nèi)最大化,即大約70到300(見上圖) 。
組合這些參數(shù)有很多種可能性,但是解釋這些參數(shù)通常并不容易。下圖顯示了不同情景的評估結(jié)果:(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超參數(shù)α,β和主題數(shù)量都相互關(guān)聯(lián),相互作用非常復(fù)雜。在大多數(shù)情況下,用于定義模型“粒度”的beta的固定值似乎是合理的,這也是Griffiths和Steyvers所推薦的。一個(gè)更精細(xì)的模型評估,具有不同的alpha參數(shù)(取決于k)使用解釋的指標(biāo)可以完成很多主題。
?
?
?
?
▍需要幫助?聯(lián)系我們
?
最受歡迎的見解
1.探析大數(shù)據(jù)期刊文章研究熱點(diǎn)
2.618網(wǎng)購數(shù)據(jù)盤點(diǎn)-剁手族在關(guān)注什么
3.r語言文本挖掘tf-idf主題建模,情感分析n-gram建模研究
4.python主題建??梢暬痩da和t-sne交互式可視化
5.r語言文本挖掘nasa數(shù)據(jù)網(wǎng)絡(luò)分析,tf-idf和主題建模
6.python主題lda建模和t-sne可視化
7.r語言中對文本數(shù)據(jù)進(jìn)行主題模型topic-modeling分析
8.r語言對nasa元數(shù)據(jù)進(jìn)行文本挖掘的主題建模分析
9.python爬蟲進(jìn)行web抓取lda主題語義數(shù)據(jù)分析
?