文本主題模型之LDA(一) LDA基礎html
文本主題模型之LDA(二) LDA求解之Gibbs採樣算法算法
文本主題模型之LDA(三) LDA求解之變分推斷EM算法機器學習
在前面咱們講到了基於矩陣分解的LSI和NMF主題模型,這裏咱們開始討論被普遍使用的主題模型:隱含狄利克雷分佈(Latent Dirichlet Allocation,如下簡稱LDA)。注意機器學習還有一個LDA,即線性判別分析,主要是用於降維和分類的,若是你們須要瞭解這個LDA的信息,參看以前寫的線性判別分析LDA原理總結。文本關注於隱含狄利克雷分佈對應的LDA。函數
LDA是基於貝葉斯模型的,涉及到貝葉斯模型離不開「先驗分佈」,「數據(似然)」和"後驗分佈"三塊。在樸素貝葉斯算法原理小結中咱們也已經講到了這套貝葉斯理論。在貝葉斯學派這裏:post
先驗分佈 + 數據(似然)= 後驗分佈學習
這點其實很好理解,由於這符合咱們人的思惟方式,好比你對好人和壞人的認知,先驗分佈爲:100個好人和100個的壞人,即你認爲好人壞人各佔一半,如今你被2個好人(數據)幫助了和1個壞人騙了,因而你獲得了新的後驗分佈爲:102個好人和101個的壞人。如今你的後驗分佈裏面認爲好人比壞人多了。這個後驗分佈接着又變成你的新的先驗分佈,當你被1個好人(數據)幫助了和3個壞人(數據)騙了後,你又更新了你的後驗分佈爲:103個好人和104個的壞人。依次繼續更新下去。url
對於上一節的貝葉斯模型和認知過程,假如用數學和機率的方式該如何表達呢?3d
對於咱們的數據(似然),這個好辦,用一個二項分佈就能夠搞定,即對於二項分佈:$$Binom(k|n,p) = {n \choose k}p^k(1-p)^{n-k}$$htm
其中p咱們能夠理解爲好人的機率,k爲好人的個數,n爲好人壞人的總數。blog
雖然數據(似然)很好理解,可是對於先驗分佈,咱們就要費一番腦筋了,爲何呢?由於咱們但願這個先驗分佈和數據(似然)對應的二項分佈集合後,獲得的後驗分佈在後面還能夠做爲先驗分佈!就像上面例子裏的「102個好人和101個的壞人」,它是前面一次貝葉斯推薦的後驗分佈,又是後一次貝葉斯推薦的先驗分佈。也便是說,咱們但願先驗分佈和後驗分佈的形式應該是同樣的,這樣的分佈咱們通常叫共軛分佈。在咱們的例子裏,咱們但願找到和二項分佈共軛的分佈。
和二項分佈共軛的分佈其實就是Beta分佈。Beta分佈的表達式爲:$$Beta(p|\alpha,\beta) = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}p^{\alpha-1}(1-p)^{{\beta-1}}$$
其中$\Gamma$是Gamma函數,知足$\Gamma(x) = (x-1)!$
仔細觀察Beta分佈和二項分佈,能夠發現二者的密度函數很類似,區別僅僅在前面的歸一化的階乘項。那麼它如何作到先驗分佈和後驗分佈的形式同樣呢?後驗分佈$P(p|n,k,\alpha,\beta)$推導以下:
$$ \begin{align} P(p|n,k,\alpha,\beta) & \propto P(k|n,p)P(p|\alpha,\beta) \\ & = P(k|n,p)P(p|\alpha,\beta) \\& = Binom(k|n,p) Beta(p|\alpha,\beta) \\ &= {n \choose k}p^k(1-p)^{n-k} \times \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}p^{\alpha-1}(1-p)^{{\beta-1}} \\& \propto p^{k+\alpha-1}(1-p)^{n-k + \beta -1} \end{align}$$
將上面最後的式子歸一化之後,獲得咱們的後驗機率爲:$$P(p|n,k,\alpha,\beta) = \frac{\Gamma(\alpha + \beta + n)}{\Gamma(\alpha + k)\Gamma(\beta + n - k)}p^{k+\alpha-1}(1-p)^{n-k + \beta -1} $$
可見咱們的後驗分佈的確是Beta分佈,並且咱們發現:$$ Beta(p|\alpha,\beta) + BinomCount(k,n-k) = Beta(p|\alpha + k,\beta +n-k)$$
這個式子徹底符合咱們在上一節好人壞人例子裏的狀況,咱們的認知會把數據裏的好人壞人數分別加到咱們的先驗分佈上,獲得後驗分佈。
咱們在來看看Beta分佈$Beta(p|\alpha,\beta)$的指望:$$ \begin{align} E(Beta(p|\alpha,\beta)) & = \int_{0}^{1}tBeta(p|\alpha,\beta)dt \\& = \int_{0}^{1}t \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}t^{\alpha-1}(1-t)^{{\beta-1}}dt \\& = \int_{0}^{1}\frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}t^{\alpha}(1-t)^{{\beta-1}}dt \end{align}$$
因爲上式最右邊的乘積對應Beta分佈$Beta(p|\alpha+1,\beta)$,所以有:$$ \int_{0}^{1}\frac{\Gamma(\alpha + \beta+1)}{\Gamma(\alpha+1)\Gamma(\beta)}p^{\alpha}(1-p)^{{\beta-1}} dp=1$$
這樣咱們的指望能夠表達爲:$$E(Beta(p|\alpha,\beta)) = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}\frac{\Gamma(\alpha+1)\Gamma(\beta)}{\Gamma(\alpha + \beta+1)} = \frac{\alpha}{\alpha + \beta} $$
這個結果也很符合咱們的思惟方式。
如今咱們回到上面好人壞人的問題,假如咱們發現有第三類人,很差不壞的人,這時候咱們如何用貝葉斯來表達這個模型分佈呢?以前咱們是二維分佈,如今是三維分佈。因爲二維咱們使用了Beta分佈和二項分佈來表達這個模型,則在三維時,以此類推,咱們能夠用三維的Beta分佈來表達先驗後驗分佈,三項的多項分佈來表達數據(似然)。
三項的多項分佈好表達,咱們假設數據中的第一類有$m_1$個好人,第二類有$m_2$個壞人,第三類爲$m_3 = n-m_1-m_2$個很差不壞的人,對應的機率分別爲$p_1,p_2,p_3 = 1-p_1-p_2$,則對應的多項分佈爲:$$multi(m_1,m_2,m_3|n,p_1,p_2,p_3) = \frac{n!}{m_1! m_2!m_3!}p_1^{m_1}p_2^{m_2}p_3^{m_3}$$
那三維的Beta分佈呢?超過二維的Beta分佈咱們通常稱之爲狄利克雷(如下稱爲Dirichlet )分佈。也能夠說Beta分佈是Dirichlet 分佈在二維時的特殊形式。從二維的Beta分佈表達式,咱們很容易寫出三維的Dirichlet分佈以下:$$Dirichlet(p_1,p_2,p_3|\alpha_1,\alpha_2, \alpha_3) = \frac{\Gamma(\alpha_1+ \alpha_2 + \alpha_3)}{\Gamma(\alpha_1)\Gamma(\alpha_2)\Gamma(\alpha_3)}p_1^{\alpha_1-1}(p_2)^{\alpha_2-1}(p_3)^{\alpha_3-1}$$
一樣的方法,咱們能夠寫出4維,5維,。。。以及更高維的Dirichlet 分佈的機率密度函數。爲了簡化表達式,咱們用向量來表示機率和計數,這樣多項分佈能夠表示爲:$Dirichlet(\vec p| \vec \alpha) $,而多項分佈能夠表示爲:$multi(\vec m| n, \vec p)$。
通常意義上的K維Dirichlet 分佈表達式爲:$$Dirichlet(\vec p| \vec \alpha) = \frac{\Gamma(\sum\limits_{k=1}^K\alpha_k)}{\prod_{k=1}^K\Gamma(\alpha_k)}\prod_{k=1}^Kp_k^{\alpha_k-1}$$
而多項分佈和Dirichlet 分佈也知足共軛關係,這樣咱們能夠獲得和上一節相似的結論:$$ Dirichlet(\vec p|\vec \alpha) + MultiCount(\vec m) = Dirichlet(\vec p|\vec \alpha + \vec m)$$
對於Dirichlet 分佈的指望,也有和Beta分佈相似的性質:$$E(Dirichlet(\vec p|\vec \alpha)) = (\frac{\alpha_1}{\sum\limits_{k=1}^K\alpha_k}, \frac{\alpha_2}{\sum\limits_{k=1}^K\alpha_k},...,\frac{\alpha_K}{\sum\limits_{k=1}^K\alpha_k})$$
前面作了這麼多的鋪墊,咱們終於能夠開始LDA主題模型了。
咱們的問題是這樣的,咱們有$M$篇文檔,對應第d個文檔中有有$N_d$個詞。即輸入爲以下圖:
咱們的目標是找到每一篇文檔的主題分佈和每個主題中詞的分佈。在LDA模型中,咱們須要先假定一個主題數目$K$,這樣全部的分佈就都基於$K$個主題展開。那麼具體LDA模型是怎麼樣的呢?具體以下圖:
LDA假設文檔主題的先驗分佈是Dirichlet分佈,即對於任一文檔$d$, 其主題分佈$\theta_d$爲:$$\theta_d = Dirichlet(\vec \alpha)$$
其中,$\alpha$爲分佈的超參數,是一個$K$維向量。
LDA假設主題中詞的先驗分佈是Dirichlet分佈,即對於任一主題$k$, 其詞分佈$\beta_k$爲:$$\beta_k= Dirichlet(\vec \eta)$$
其中,$\eta$爲分佈的超參數,是一個$V$維向量。$V$表明詞彙表裏全部詞的個數。
對於數據中任一一篇文檔$d$中的第$n$個詞,咱們能夠從主題分佈$\theta_d$中獲得它的主題編號$z_{dn}$的分佈爲:$$z_{dn} = multi(\theta_d)$$
而對於該主題編號,獲得咱們看到的詞$w_{dn}$的機率分佈爲: $$w_{dn} = multi(\beta_{z_{dn}})$$
理解LDA主題模型的主要任務就是理解上面的這個模型。這個模型裏,咱們有$M$個文檔主題的Dirichlet分佈,而對應的數據有$M$個主題編號的多項分佈,這樣($\alpha \to \theta_d \to \vec z_{d}$)就組成了Dirichlet-multi共軛,可使用前面提到的貝葉斯推斷的方法獲得基於Dirichlet分佈的文檔主題後驗分佈。
若是在第d個文檔中,第k個主題的詞的個數爲:$n_d^{(k)}$, 則對應的多項分佈的計數能夠表示爲 $$\vec n_d = (n_d^{(1)}, n_d^{(2)},...n_d^{(K)})$$
利用Dirichlet-multi共軛,獲得$\theta_d$的後驗分佈爲:$$Dirichlet(\theta_d | \vec \alpha + \vec n_d)$$
一樣的道理,對於主題與詞的分佈,咱們有$K$個主題與詞的Dirichlet分佈,而對應的數據有$K$個主題編號的多項分佈,這樣($\eta \to \beta_k \to \vec w_{(k)}$)就組成了Dirichlet-multi共軛,可使用前面提到的貝葉斯推斷的方法獲得基於Dirichlet分佈的主題詞的後驗分佈。
若是在第k個主題中,第v個詞的個數爲:$n_k^{(v)}$, 則對應的多項分佈的計數能夠表示爲 $$\vec n_k = (n_k^{(1)}, n_k^{(2)},...n_k^{(V)})$$
利用Dirichlet-multi共軛,獲得$\beta_k$的後驗分佈爲:$$Dirichlet(\beta_k | \vec \eta+ \vec n_k)$$
因爲主題產生詞不依賴具體某一個文檔,所以文檔主題分佈和主題詞分佈是獨立的。理解了上面這$M+K$組Dirichlet-multi共軛,就理解了LDA的基本原理了。
如今的問題是,基於這個LDA模型如何求解咱們想要的每一篇文檔的主題分佈和每個主題中詞的分佈呢?
通常有兩種方法,第一種是基於Gibbs採樣算法求解,第二種是基於變分推斷EM算法求解。
若是你只是想理解基本的LDA模型,到這裏就能夠了,若是想理解LDA模型的求解,能夠繼續關注系列裏的另外兩篇文章。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)