機(jī)器學(xué)習(xí)基礎(chǔ)(16)- 主題模型LDA理解與應(yīng)用

本文主要用于理解主題模型LDA(Latent Dirichlet Allocation)其背后的數(shù)學(xué)原理及其推導(dǎo)過程宏榕。本菇力求用簡(jiǎn)單的推理來論證LDA背后復(fù)雜的數(shù)學(xué)知識(shí),苦于自身數(shù)學(xué)基礎(chǔ)不夠旗吁,因此文中還是大量引用了各方大神的數(shù)學(xué)推導(dǎo)細(xì)節(jié),既是為了方便自己以后回顧,也方便讀者追本溯源别厘,當(dāng)然喜歡直接看應(yīng)用的讀者可直接翻到第二章~

基本目錄如下:

  1. LDA的原理
    1.1 先導(dǎo)數(shù)學(xué)知識(shí)準(zhǔn)備
    1.2 文本模型 - Unigram Model
    1.3 主題模型 - PLSA Model
    1.4 主題模型 - LDA Model

  2. LDA的應(yīng)用與擴(kuò)展
    2.1 LDA的Python實(shí)現(xiàn)
    2.2 LDA模型中的主題個(gè)數(shù)

------------------第一菇 - LDA的原理------------------

1.1 先導(dǎo)數(shù)學(xué)知識(shí)準(zhǔn)備

LDA之所以很難懂怎棱,跟其涉及大量的數(shù)學(xué)統(tǒng)計(jì)知識(shí)有關(guān)哩俭,因此,為了更好的理解LDA拳恋,還是先鋪墊一些數(shù)學(xué)知識(shí)凡资。本段力求少擺公式,用更通俗的話來闡述其背后的數(shù)學(xué)思想~

1.1.1 Gamma函數(shù)

認(rèn)真學(xué)過高數(shù)的應(yīng)該都對(duì)這個(gè)函數(shù)有印象,其基本公式如下:

\Gamma (x) = \int_{0}^{\infty } t^{x-1}e^{-t}dt
再貼一張Gamma函數(shù)圖隙赁,方便大家對(duì)其有一個(gè)概覽性的認(rèn)識(shí):

gamma函數(shù)

該函數(shù)有一個(gè)很好的遞歸性質(zhì)(利用分步積分法可證)如下:

\Gamma (x + 1) =x\Gamma(x)
當(dāng)然該函數(shù)還有更重要的一點(diǎn)垦藏,即其可以表述為階乘在實(shí)數(shù)集上的延拓:

\Gamma(n) = (n-1)!
(PS.至于為何不定義一個(gè)函數(shù)滿足\Gamma(n) = (n)!,大家可以移步LDA數(shù)學(xué)八卦第一章伞访,看完還蠻有趣的掂骏,順便感嘆一下偉大數(shù)學(xué)家們對(duì)完美數(shù)學(xué)公式的追求~)

1.1.2 二項(xiàng)分布

高中學(xué)概率論的時(shí)候,還記得拋硬幣的例子么厚掷?每一次拋硬幣都會(huì)有倆個(gè)結(jié)果弟灼,正面OR背面,那么拋一次硬幣就滿足伯努利分布(又叫0-1分布)冒黑,是一個(gè)離散型的隨機(jī)分布田绑。二項(xiàng)分布無非就是重復(fù)N次的伯努利實(shí)驗(yàn),其概率密度函數(shù)可以表示為:

P(K = k) = \begin{pmatrix} n\\ k\\ \end{pmatrix}p^k{(1-p)}^{n-k}
其中

\begin{pmatrix} n\\ k\\ \end{pmatrix}=C(n,k) = \frac{n!}{k!(n-k)!}
看到C(n,k)大部分人應(yīng)該都能想起這個(gè)在高中就學(xué)過的式子的意思抡爹,最簡(jiǎn)單的排列組合掩驱,從n個(gè)事件中挑出k個(gè)事件的組合方式,因此上面的式子應(yīng)該不難理解了冬竟。

1.1.3 多項(xiàng)分布

高中學(xué)習(xí)概率論的時(shí)候欧穴,我們除了仍硬幣還仍什么?還會(huì)仍骰子哈哈~但這個(gè)時(shí)候仍一次骰子就不滿足伯努利分布了泵殴,因?yàn)槿砸淮西蛔訒?huì)有6或更多種結(jié)果苔可。因此,多項(xiàng)分布就是二項(xiàng)分布擴(kuò)展到高維的情況袋狞,其概率密度函數(shù)可以表示為:

P(x_1, x_2, ..., x_k; n, p_1, p_2, ..., p_k) = \frac{n!}{x_1!...x_k!}{p_1}^{x_1}...{p_k}^{x_k}
想細(xì)究該公式怎么來的焚辅,可以先移步這篇博文多項(xiàng)式分布的理解概率公式的理解,本質(zhì)思想跟二項(xiàng)分布幾乎沒差苟鸯,只不過涉及到了一些多項(xiàng)式定理同蜻。

1.1.4 Beta分布

通俗理解,當(dāng)我們不知道一個(gè)概率是什么早处,但又有一些合理的猜測(cè)時(shí)湾蔓,Beta分布能很好的作為一個(gè)表示概率的概率分布。舉個(gè)例子砌梆,我們要統(tǒng)計(jì)預(yù)測(cè)一下窩火琦琦新賽季的三分投籃命中率默责,假如琦琦上賽季投了一個(gè)三分,命中一個(gè)咸包,則按照我們熟悉的思路桃序,我們可以預(yù)測(cè)琦琦新賽季命中率100%(想想美滋滋)!但仔細(xì)一想不對(duì)啊烂瘫,就算是頂級(jí)的三分手(比如湯神)也就40%超一點(diǎn)媒熊,難道我大琦琦比湯神還牛了?顯然這里大家的思考就會(huì)出現(xiàn)分歧,于是就引申出了一個(gè)統(tǒng)計(jì)學(xué)知識(shí)點(diǎn)芦鳍,或者說是倆個(gè)學(xué)派 - 頻率學(xué)派和貝葉斯學(xué)派嚷往!這倆個(gè)學(xué)派的思路差異體現(xiàn)在:

  • 頻率學(xué)派:他們把需要推斷的參數(shù)\theta(本例就是琦琦的三分命中率)看做是固定的未知常數(shù),即雖然這個(gè)概率是未知的柠衅,但卻是確定的一個(gè)值皮仁,同時(shí),樣本X是隨機(jī)的菲宴,因此頻率學(xué)派重點(diǎn)研究樣本空間贷祈,大部分的概率計(jì)算都是針對(duì)樣本X的分布!
  • 貝葉斯學(xué)派:他們與頻率學(xué)派認(rèn)知?jiǎng)偤孟喾慈雇纾麄冋J(rèn)為參數(shù)都不是固定值付燥,而是服從一個(gè)概率分布宣谈,樣本X卻是固定的愈犹,因此他們重點(diǎn)研究的是參數(shù)的分布。

因此闻丑,回到琦琦的例子上來漩怎,用傳統(tǒng)頻率學(xué)派的觀點(diǎn),那琦琦的命中率確實(shí)就是100%嗦嗡,而用貝葉斯學(xué)派的觀點(diǎn)勋锤,首先琦琦的命中率有一個(gè)先驗(yàn)分布,而根據(jù)樣本信息侥祭,我們可以對(duì)其進(jìn)行更新叁执,得到后驗(yàn)分布。而數(shù)學(xué)家們?yōu)槎?xiàng)分布選取的先驗(yàn)分布就是Beta分布矮冬!

Beta分布在概率論中指一組分布在[0,1]區(qū)間的連續(xù)概率分布谈宛,其中參數(shù)為\alpha > 0, \beta > 0,概率密度函數(shù)為:

f(x; \alpha, \beta) = \frac{1}{B(\alpha, \beta)} x^{\alpha - 1} {(1-x)}^{\beta-1}
其中胎署,

\frac{1}{B(\alpha, \beta)} = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}
至于\alpha, \beta代表的物理意義吆录,可以簡(jiǎn)單理解這倆一起控制著Beta分布的形狀,貼一張圖方便理解:

不同取值的Beta分布.png

當(dāng)然如果這個(gè)時(shí)候新賽季已經(jīng)開打琼牧,那我們又會(huì)多得到一點(diǎn)信息恢筝,比如琦琦在揭幕戰(zhàn)怒投5三分,并且命中2個(gè)巨坊,錯(cuò)失3個(gè)撬槽,那這個(gè)時(shí)候,揭幕戰(zhàn)中投出的5個(gè)三分趾撵,肯定能為我所用(樣本信息為二項(xiàng)分布)恢氯,用于更新我對(duì)琦琦一開始命中率預(yù)測(cè)的Beta(\alpha, \beta)分布。而這個(gè)時(shí)候就要用到Beta分布另一個(gè)重要的性質(zhì)了,即Beta-Binomial共軛,對(duì)琦琦的預(yù)測(cè)分布可更新為Beta(\alpha + 2, \beta + 3)勾缭。

先講明狂男,“共軛分布” 援引wiki的定義即為:在貝葉斯統(tǒng)計(jì)中,如果后驗(yàn)分布與先驗(yàn)分布屬于同類挂滓,則先驗(yàn)分布與后驗(yàn)分布被稱為共軛分布,而先驗(yàn)分布被稱為似然函數(shù)的共軛先驗(yàn)【1】啸胧。參照定義赶站,Beta-Binomial 共軛意味著,如果我們?yōu)槎?xiàng)分布的參數(shù)p選取的先驗(yàn)分布是Beta分布纺念,那么以p為參數(shù)的二項(xiàng)分布用貝葉斯估計(jì)得到的后驗(yàn)分布仍然服從Beta分布贝椿,那么Beta分布就是二項(xiàng)分布的共軛先驗(yàn)分布,用數(shù)學(xué)公式表述就是:

Beta(p|\alpha,\beta) + BinomCount(m_1,m_2) = Beta(p|\alpha + m_1, \beta + m_2)
這種形式不變的好處是陷谱,我們能夠在先驗(yàn)分布中賦予參數(shù)很明確的物理意義烙博,這個(gè)物理意義可以延續(xù)到后續(xù)分布中進(jìn)行解釋,同時(shí)從先驗(yàn)變換到后驗(yàn)過程中從數(shù)據(jù)中補(bǔ)充的知識(shí)也容易有物理解釋【2】烟逊。另外再多說一點(diǎn)渣窜,關(guān)于Beta分布的期望可推導(dǎo)表示為:

E(p) = \frac{\alpha}{\alpha + \beta}
不知大家能否一眼看出這倆個(gè)參數(shù)的物理意義,實(shí)際上就是琦琦三分投籃時(shí)候宪躯,命中與未命中的次數(shù)G撬蕖(居然與頻率學(xué)派對(duì)P值的估計(jì)統(tǒng)一起來了~妙!)

1.1.5 Dirichlet分布

終于涉及到本文的主角访雪,Dirichlet分布了~靈光的讀者研究到這應(yīng)該大致能猜到該分布是干嘛的了详瑞。類比于多項(xiàng)分布是二項(xiàng)分布的推廣,Dirichlet分布也確實(shí)是Beta分布的推廣臣缀,其概率密度函數(shù)為:

f(x_1, x_2, ..., x_k; \alpha_1, \alpha_2, ..., \alpha_k) = \frac{1}{B(\alpha)}\prod_{i=1}^{k}{x_i}^{\alpha^i-1}
其中

B(\alpha) = \frac{\prod_{i=1}^{k}\Gamma(\alpha^i)}{\Gamma(\sum_{i=1}^{k}\alpha^i)}, \sum_{i=1}^{k}x^i = 1
且類比于Beta分布坝橡,Dirichlet也是多項(xiàng)分布的共軛先驗(yàn)分布:

Dirichlet(\vec{p}|\vec{\alpha}) + MultiCount(\vec {m}) = Dirichlet(\vec{p}|\vec{\alpha} + \vec{m})
相對(duì)應(yīng)于Beta的期望,Dirichlet分布的期望也可以如下:(其物理意義也就是每個(gè)參數(shù)的估計(jì)值是其對(duì)應(yīng)事件的先驗(yàn)的參數(shù)(也叫偽計(jì)數(shù))和數(shù)據(jù)中的計(jì)數(shù)的和在整體計(jì)數(shù)中的比例):

E(p) =\biggl ( \frac{\alpha ^ 1}{\sum_{i = 1}^K \alpha_i}, \frac{\alpha ^ 2}{\sum_{i = 2}^K \alpha_i}, \cdots, \frac{\alpha ^ K}{\sum_{i = 1}^K \alpha_i} \biggr)
對(duì)以上倆個(gè)分布的推導(dǎo)過程感興趣的可以移步LDA數(shù)學(xué)八卦肝陪。

1.2 文本模型 - Unigram Model

假設(shè)一篇文檔由若干個(gè)詞語構(gòu)成驳庭,可以不考慮順序,就你像看這句話的時(shí)候也沒現(xiàn)發(fā)他序順亂了~因此我們不妨就把一篇文章看作是一些詞的集合氯窍。那么最簡(jiǎn)單的文本生成模型就是饲常,確定文本的長度為N,然后選出N個(gè)詞來狼讨。選詞的過程與我們?nèi)憎蛔右荒R粯颖从伲瑹o非就是這個(gè)骰子的面比較多,但其仍然服從多項(xiàng)分布政供。這個(gè)簡(jiǎn)單的文本生成模型就叫做Unigram Model播聪。當(dāng)然少不了貝葉斯估計(jì)朽基,每一個(gè)面朝上的概率也會(huì)有一個(gè)先驗(yàn)分布為Dirichlet分布,表示為Dir(\vec{p}|\vec{\alpha})离陶,而我們也可以根據(jù)樣本信息\vec{n}來估計(jì)后驗(yàn)分布Dir(\vec{p}|\vec{\alpha} + \vec{n})稼虎,其概率圖模型可以表示為:

Unigram Model 概率圖模型

該記圖方式為plate notation,有興趣的可以了解一下招刨。此時(shí)該文本的生成概率就等于:

p(\vec{W}|\vec{\alpha}) = \int p(\vec{W}|\vec{p})\cdot p(\vec{p}|\vec{\alpha})d\vec{p}
我們推導(dǎo)可以計(jì)算得到:

p(\vec{W}|\vec{\alpha}) = \frac{\Delta (\vec{n} + \vec{\alpha}) }{\Delta (\vec{\alpha})}

1.3 主題模型 - PLSA Model

上面講的文本生成模型足夠簡(jiǎn)單霎俩,但是對(duì)文本的表達(dá)能力還是不夠,且不太符合我們?nèi)粘5膶懽髁?xí)慣沉眶!試想打却,我們寫一篇文章的時(shí)候,肯定都會(huì)事先擬定一個(gè)主題谎倔,然后再從這個(gè)主題中去尋找相應(yīng)的詞匯柳击,因此這么來看,只扔一個(gè)有N面的骰子似乎還不夠片习,我們似乎應(yīng)該提前再準(zhǔn)備m個(gè)不同類型的骰子捌肴,作為我們的主題,然后確定了主題以后毯侦,再選中那個(gè)骰子哭靖,來決定詞匯具垫。由此侈离,便引申出了我們的主題模型!別急筝蚕,還沒輪到LDA登場(chǎng)卦碾,我們先介紹一個(gè)簡(jiǎn)單的PLSA模型!

簡(jiǎn)單來說PLSA是用一個(gè)生成模型(生成模型與判別式模型的區(qū)別大家還是要懂的)來建模文章的生成過程起宽!它有幾個(gè)前提假設(shè)【3】如下:

  • 一篇文章可以由多個(gè)主題構(gòu)成
  • 每一個(gè)主題由一組詞的概率分布來表示
  • 一篇文章中的每一個(gè)具體的詞都來自于一個(gè)固定的主題

其概率圖模型【4】可以表示為:


PLSA Model 概率圖模型

用自己的話翻譯一下上述過程就是:

  • 按照概率P(d_i)選中一篇文檔d_i
  • 從主題分布中按照概率P(z_k|d_i)選中一個(gè)主題z_k
  • 從詞分布中按照概率P(w_j|z_k)選中一個(gè)詞w_j

則整個(gè)語料庫中的文本生成概率可以用似然函數(shù)表示為:

L = \prod_{m}^{M}\prod_{n}^{N}p(d_m, w_n)^{c(d_w, w_n)}
其中c(d_w, w_n)表示單詞w_n在文檔d_w中出現(xiàn)的次數(shù)洲胖。

其對(duì)數(shù)似然函數(shù)可以寫成:

l = \sum_{m}^{M}\sum_{n}^{N}c(d_w, w_n)log\sum_{k}^{K}p(d_m)p(z_k|d_m)p(w_n|z_k)
其中主題分布p(z_k|d_m)和定義在主題上的詞分布p(w_n|z_k)就是待估計(jì)的參數(shù),一般會(huì)用EM算法(值得另開一篇來單獨(dú)講的機(jī)器學(xué)習(xí)基礎(chǔ)算法)來求解坯沪。有興趣考究推導(dǎo)細(xì)節(jié)的讀者請(qǐng)移步July老師的博客

1.3 主題模型 - LDA Model

堅(jiān)持看到這里的讀者绿映,其實(shí)內(nèi)心應(yīng)該對(duì)LDA也有了自己的猜想,看看PLSA漏了什么腐晾?沒錯(cuò)叉弦,就是一個(gè)貝葉斯框架!如果我們給主題分布加一個(gè)Dirichlet分布\alpha藻糖,再給主題上的詞分布再加一個(gè)Dirichlet分布\beta淹冰,那就是LDA!因此實(shí)際上LDA就是PLSA的貝葉斯版本巨柒。我們直接來看模型圖【4】:

LDA Model 概率圖模型

用自己的話翻譯一下上述過程就是:

  • 按照概率P(d_i)選中一篇文檔d_i
  • 從Dirichlet分布\alpha中抽樣生成文檔d_i的主題分布\theta_m
  • 從主題分布\theta_m中抽取文檔d_i第j個(gè)詞的主題z_{m,n}
  • 從Dirichlet分布\beta中抽樣生成主題z_{m,n}對(duì)應(yīng)的詞分布\varphi_{k}
  • 從詞分布\varphi_{k}中抽樣生成詞w_{m,n}

為了方便求解樱拴,我們通常會(huì)將上述過程順序交換一下柠衍,即我們先生成完全部的主題,再由這些主題去生成完每一個(gè)詞晶乔。這樣珍坊,第一,二個(gè)過程的推導(dǎo)就可以用到Unigram Model的結(jié)論正罢,即我們整個(gè)語料庫下所有詞的主題編號(hào)的生成概率為:

p(\vec z \mid \vec \alpha) = \prod_{m}^{M}\frac{\Delta (\vec n_m + \vec \alpha)}{\Delta (\vec \alpha )}
對(duì)于詞的生成過程(主題編號(hào)的選擇并不會(huì)改變K個(gè)主題下的詞分布)垫蛆,即可表示為:

p(\vec w \mid \vec z, \vec \beta) = p(\vec w \mid \vec \beta) = \prod_{k}^{V} \frac{\Delta (\vec v_k + \vec \beta )}{\Delta \vec \beta}
因此,LDA模型的語料庫的生成概率可以表述為:

p(\vec w, \vec z \mid \vec \alpha, \vec \beta) = \prod_{k}^{K} \frac{\Delta (\vec v_k + \vec \beta )}{\Delta \vec \beta}\cdot \prod_{m}^{M}\frac{\Delta (\vec n_m + \vec \alpha)}{\Delta (\vec \alpha )}

至此腺怯,整個(gè)LDA模型的文檔生成過程介紹完了袱饭,而實(shí)際我們運(yùn)用求解的時(shí)候,我們的任務(wù)也就是去估計(jì)隱含變量主題分布\vec \theta_m和詞分布\vec \varphi_k的值了呛占。實(shí)際求解的時(shí)候虑乖,一般會(huì)采用Gibbis Sampleing (又是可以單獨(dú)寫一篇的MCMC采樣的其中一種,詳情可見我的另一篇文章)晾虑。這里簡(jiǎn)單介紹一下疹味,就是首先隨機(jī)給定每個(gè)單詞的主題,然后在其他變量保持不變的情況下帜篇,根據(jù)轉(zhuǎn)移概率抽樣生成每個(gè)單詞的新主題糙捺,反復(fù)迭代以后,收斂后的結(jié)果就是主題分布和詞分布的期望笙隙。

寫到這里洪灯,基本上整個(gè)LDA模型算是從最簡(jiǎn)單的二項(xiàng)分布到Dirichlet分布梳理明白了,對(duì)于不追求數(shù)學(xué)細(xì)節(jié)的讀者來說竟痰,至少可以在實(shí)際運(yùn)用中不像無頭蒼蠅一樣當(dāng)個(gè)“調(diào)包俠”签钩,當(dāng)然這些都還只是個(gè)入門基礎(chǔ),研究人員對(duì)LDA做了非常多的擴(kuò)展應(yīng)用(這里推薦一篇文章是專門講當(dāng)初三位大佬LDA論文的坏快,看完也是收獲頗多铅檩,推薦一波),而我們只有打好了扎實(shí)的基礎(chǔ)莽鸿,才能在實(shí)際應(yīng)用中面對(duì)各種不同的變化得心應(yīng)手昧旨!接下來,我就舉幾個(gè)實(shí)際的實(shí)戰(zhàn)案例祥得,讓大家體驗(yàn)一把其實(shí)際的應(yīng)用兔沃。

------------------第二菇 - LDA的應(yīng)用與擴(kuò)展------------------

2.1 LDA的Python實(shí)現(xiàn)

在實(shí)際的運(yùn)用中,LDA可以直接從gensim調(diào)啃沪,主要的一些參數(shù)有如下幾個(gè):

  • corpus:語料數(shù)據(jù)粘拾,需要包含單詞id與詞頻
  • num_topics:我們需要生成的主題個(gè)數(shù)(重點(diǎn)調(diào)節(jié))
  • id2word:是一種id到單詞的映射(gensim也有包生成)
  • passes:遍歷文本的次數(shù),遍歷越多越準(zhǔn)備
  • alpha:主題分布的先驗(yàn)
  • eta:詞分布的先驗(yàn)

接下來创千,我們實(shí)戰(zhàn)一把缰雇,直接用其官方的示例

from gensim.test.utils import common_texts
from gensim.corpora.dictionary import Dictionary

# Create a corpus from a list of texts
common_dictionary = Dictionary(common_texts)
common_corpus = [common_dictionary.doc2bow(text) for text in common_texts]

# Train the model on the corpus.
lda = LdaModel(common_corpus, num_topics=10)

一步步拆解來看入偷,首先common_texts是list形式,里面的每一個(gè)元素都可以認(rèn)為是一篇文檔也是list結(jié)構(gòu):

>>> print type(common_texts)
<type 'list'>
>>> common_texts[0]
['human', 'interface', 'computer']

第二步械哟,doc2bow這個(gè)方法用于將文本轉(zhuǎn)化為詞袋形式疏之,看一個(gè)官方的示例大家應(yīng)該就能明白了,

>>> from gensim.corpora import Dictionary
>>> dct = Dictionary(["máma mele maso".split(), "ema má máma".split()])
>>> dct.doc2bow(["this", "is", "máma"])
[(2, 1)]
>>> dct.doc2bow(["this", "is", "máma"], return_missing=True)
([(2, 1)], {u'this': 1, u'is': 1})

初始化的時(shí)候?qū)γ恳粋€(gè)詞都會(huì)生成一個(gè)id暇咆,新的文本進(jìn)去的時(shí)候锋爪,返回該文本每一個(gè)詞的id,和對(duì)應(yīng)的頻數(shù)爸业,對(duì)于那些不存在原詞典的其骄,可以控制是否返回。此時(shí)生成的corpus就相當(dāng)于是LDA訓(xùn)練模型的輸入了扯旷,讓我們檢查一下:

>>>common_corpus[0]
[(0, 1), (1, 1), (2, 1)]
# human單詞的id為0拯爽,且在第一個(gè)文檔中只出現(xiàn)了一次

最后一步,我們只需調(diào)用LDA模型即可钧忽,這里指定了10個(gè)主題毯炮。

from gensim.models import LdaModel
lda = LdaModel(common_corpus, num_topics=10)

讓我們檢查一下結(jié)果(還有很多種方法大家可以看文檔),比如我們想看第一個(gè)主題由哪些單詞構(gòu)成:

>>>lda.print_topic(1, topn=2)
'0.500*"9" + 0.045*"10"

可以看出第一個(gè)模型的詞分布耸黑,9號(hào)10號(hào)占比較大(這里topn控制了輸出的單詞個(gè)數(shù)桃煎,對(duì)應(yīng)的單詞可以通過之前生成dict找出)
我們還可以對(duì)剛才生成的lda模型用新語料去進(jìn)行更新,

# 能更新全部參數(shù)
lda.update(other_corpus)
#還能單獨(dú)更新主題分布大刊, 輸入為之前的參數(shù)为迈,其中rho指學(xué)習(xí)率
lda.update_alpha(gammat, rho)
#還能單獨(dú)更新詞分布
lda.update_eta(lambdat, rho)

大家可以根據(jù)自己的實(shí)際業(yè)務(wù)需求,來具體查驗(yàn)所需函數(shù)奈揍,這里就不一一展開了曲尸,官方文檔上也寫的比較細(xì)赋续,總的來說男翰,感謝大神們把輪子都造好了,我們只要會(huì)用即可纽乱,最好還能參透一點(diǎn)其背后的原理蛾绎。

2.2 LDA模型中的主題個(gè)數(shù)

這里擴(kuò)展開來談一點(diǎn),我們?nèi)绾未_定LDA模型中的主題個(gè)數(shù)鸦列,因?yàn)檫@也是我們調(diào)參的重點(diǎn)租冠,該參數(shù)選取的恰當(dāng),那我們模型的效果往往會(huì)變好薯嗤。首先還是熟悉的套路顽爹,交叉驗(yàn)證,28骆姐,37分看數(shù)據(jù)量镜粤,而我們的評(píng)估指標(biāo)捏题,我翻了一圈,大家都是用的困惑度(perplexity)肉渴,其定義為:

perplexity(D) = exp\{-\frac{\sum_{d=1}^{M}\log p(w_d)}{\sum_{d=1}^{M}N_d}\}
其中M為文檔的總數(shù)公荧,w_d為文檔d中單詞所組成的詞袋向量,p(w_d)為模型所預(yù)測(cè)的文檔d的生成概率同规,N_d為文檔d中單詞的總數(shù)循狰。簡(jiǎn)單理解一下就是,對(duì)于一篇文章券勺,我們的模型有多不確定它是屬于哪一個(gè)主題的绪钥。很自然,主題越多关炼,肯定困惑度越小昧识,但是不要忘了,計(jì)算性能也扛不住啊盗扒,因此跪楞,一般也是會(huì)在合理的主題范圍內(nèi)去挑選一個(gè)最佳的主題個(gè)數(shù),比如畫topic_number-perplexity曲線(跟K-means)去找最佳的K一樣的理念吧侣灶。還有其他大佬甸祭,融入了分層狄利克雷過程(HDP),構(gòu)成一種非參數(shù)主題模型褥影,好處就是不需要預(yù)先指定個(gè)數(shù)池户,模型可以隨著文檔的變化而自動(dòng)的對(duì)主題個(gè)數(shù)進(jìn)行調(diào)整(復(fù)雜程度有點(diǎn)高,本菇還未深入涉足這一塊)凡怎。這里還要再提醒一點(diǎn)校焦,也是看知乎上小伙伴上提醒的,千萬不要用gensim中的log_perplexity()計(jì)算的perplexity指標(biāo)來比較topic數(shù)量的好壞统倒!因?yàn)檫@個(gè)函數(shù)沒有對(duì)主題數(shù)目做歸一化寨典,因此不同的topic數(shù)目不能直接比較!【5】(然后發(fā)現(xiàn)一票人最后說房匆,都是自己拍的一個(gè)主題個(gè)數(shù)哈哈哈)

至此運(yùn)用這一塊也算是簡(jiǎn)單的耸成,大家還是需要根據(jù)自己的業(yè)務(wù)再做調(diào)整~畢竟也是一門實(shí)驗(yàn)學(xué)科,大家多做實(shí)驗(yàn)浴鸿,多試驗(yàn)試驗(yàn)自然經(jīng)驗(yàn)就有了井氢。

簡(jiǎn)單總結(jié)一下本文,先是介紹了一些LDA背后的統(tǒng)計(jì)分布岳链,重點(diǎn)有Beta分布花竞,及Beta-Binomial 共軛,然后引出了Dirichlet分布掸哑,最后引出了LDA模型约急,雖然省略了一些數(shù)學(xué)推導(dǎo)細(xì)節(jié)寇仓,但基本不影響讀者理解。最后還附上了一些Python的實(shí)戰(zhàn)應(yīng)用烤宙,并重點(diǎn)討論了一下如何選取合適的主題數(shù)目遍烦。希望大家讀完本文后對(duì)機(jī)器學(xué)習(xí)主題模型這一塊有全新的認(rèn)識(shí)。有說的不對(duì)的地方也請(qǐng)大家指出躺枕,多多交流服猪,大家一起進(jìn)步~??

參考文獻(xiàn):
【1】https://zh.wikipedia.org/wiki/%E5%85%B1%E8%BD%AD%E5%85%88%E9%AA%8C
【2】https://zhuanlan.zhihu.com/p/31470216
【3】http://aroslin.com/2017/11/07/LDA-From-Zero/
【4】https://clyyuanzi.gitbooks.io/julymlnotes/content/lda.html
【5】https://www.zhihu.com/question/32286630

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拐云,隨后出現(xiàn)的幾起案子罢猪,更是在濱河造成了極大的恐慌,老刑警劉巖叉瘩,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膳帕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡薇缅,警方通過查閱死者的電腦和手機(jī)危彩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泳桦,“玉大人汤徽,你說我怎么就攤上這事【淖” “怎么了谒府?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浮毯。 經(jīng)常有香客問我完疫,道長,這世上最難降的妖魔是什么债蓝? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任壳鹤,我火速辦了婚禮,結(jié)果婚禮上惦蚊,老公的妹妹穿的比我還像新娘器虾。我一直安慰自己,他們只是感情好蹦锋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著欧芽,像睡著了一般莉掂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上千扔,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天憎妙,我揣著相機(jī)與錄音库正,去河邊找鬼。 笑死厘唾,一個(gè)胖子當(dāng)著我的面吹牛褥符,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抚垃,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼喷楣,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了鹤树?” 一聲冷哼從身側(cè)響起铣焊,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罕伯,沒想到半個(gè)月后曲伊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡追他,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年坟募,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邑狸。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婿屹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出推溃,到底是詐尸還是另有隱情昂利,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布铁坎,位于F島的核電站蜂奸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏硬萍。R本人自食惡果不足惜扩所,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朴乖。 院中可真熱鬧祖屏,春花似錦、人聲如沸买羞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畜普。三九已至期丰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钝荡。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工街立, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埠通。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓赎离,卻偏偏與公主長得像,于是被迫代替她去往敵國和親端辱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子梁剔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容