实时数仓入门训练营:实时数仓助力互联网实时决策和精准营销

React 系列九:深入理解 setState

  返回  

《统计学习方法》啃书辅助:第20章 潜在狄利克雷分配

2021/7/21 12:30:12 浏览:

【学习建议】建议在学习20.2之前先学习附录E.1(KL散度的定义)和附录E.2(狄利克雷分布的性质)。

【学习建议】建议在学习20.4.3之前先学习附录B(牛顿法和拟牛顿法)。

20.1.1 分布定义

【补充解释】在多项分布中, p 1 n 1 p 2 n 2 ⋯ p k n k p_1^{n1} p_2^{n2} \cdots p_k^{nk} p1n1p2n2pknk表示每一个满足条件的事件发生的概率, n ! n 1 ! n 2 ! ⋯ n k ! \frac{n!}{n_1! n_2! \cdots n_k!} n1!n2!nk!n!表示不包含重复事件的满足条件的事件数。

【补充解释】图20.2中的连接上下的“包含”均是指将每次试验可能出现的结果由 k k k种特殊化为 2 2 2种;连接左右的“包含”均是指将 n n n次独立的随机试验特殊化为 1 1 1次。

【学习建议】关于“指数分布族”及其性质的延伸知识可参考附录E.2(狄利克雷分布的性质)。

【补充解释】我们可以简单地将定义在实数域( s > 0 s>0 s>0)的Gamma函数(伽马函数)理解为阶乘数列的平滑曲线。除书中所提性质外,还具有如下常用性质:

  • x ∈ ( 0 , 1 ) x\in (0,1) x(0,1),有 Γ ( 1 − x ) Γ ( x ) = π s i n π x \Gamma(1-x) \Gamma(x) = \frac{\pi}{sin \pi x} Γ(1x)Γ(x)=sinπxπ
  • Γ ( 1 2 ) = π \Gamma(\frac{1}{2})=\sqrt{\pi} Γ(21)=π
  • 定义域( s > 0 s>0 s>0)内,Gamma函数是严格凸函数。

(参考资料:伽玛函数 - 百度百科)

20.1.2 共轭先验

【消歧补充】P. 389 倒数第9行中,应区分向量 n = ( n 1 , n 2 , ⋯   , n k ) n=(n_1,n_2,\cdots,n_k) n=(n1,n2,,nk)和参数 n = ∑ i = 1 k n i n = \sum_{i=1}^k n_i n=i=1kni之间的区别,其中 n i n_i ni为样本中 w i w_i wi出现的次数。 X ∼ M u l t ( n , θ ) X \sim Mult(n,\theta) XMult(n,θ)中的 n n n是参数 n n n,而式(20.12)中的 n n n应为向量 n n n

【补充解释】先验概率和后验概率:先验概率 P ( A ) P(A) P(A)可以理解为,在观察样本之前,估计 A A A发生的概率。后验概率 P ( A ∣ B ) P(A|B) P(AB)可以理解为,已知样本具有特征 B B B后,估计事件 A A A发生的概率。

【补充说明】样本数据: D = { X 1 , X 2 , ⋯   , X n } D = \{X_1,X_2,\cdots,X_n\} D={X1,X2,,Xn}表示 n n n次独立随机试验的样本; n i n_i ni表示在 n n n次独立试验的样本中 w i w_i wi的出现次数。

【补充解释】关于先验分布和后验分布推荐阅读:先验分布、后验分布、似然估计这几个概念是什么意思,它们之间的关系是什么? - Agenter的回答 - 知乎。也可以简单理解如下:

  • 先验分布:在观察样本前,依据对事物经验认知,给出 y y y的分布。先验分布不唯一,也不需要有客观的证据。
  • 后验分布:在观察样本后,结合样本数据和先验分布,给出 y y y的分布。

式20.12的推导

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\theta|D,\al…

将式(20.10)和式(20.11)代入得
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\theta|D,\al…
因为式(20.5),所以有
B ( α + n ) = ∫ ∏ i = 1 k θ i n i + α i − 1 d θ (2) B(\alpha+n) = \int \prod_{i=1}^k \theta_i^{n_i+\alpha_i-1} d \theta \tag{2} B(α+n)=i=1kθini+αi1dθ(2)
将上式(2)代入式(1),得
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\theta|D,\al…

20.2 潜在狄利克雷分配模型

【补充说明】超参数是指在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。

【学习建议】20.2.1、20.2.2、20.2.3和20.2.5结合着一起看,以理解LDA模型。

【阅读建议】整理模型要素的参数列表如下,以便阅读:

  • 单词集合: W = { w 1 , w 2 , ⋯   , w v } W = \{w_1,w_2,\cdots,w_v\} W={w1,w2,,wv};其中 w v w_v wv是第 v v v个单词, v = 1 , 2 , ⋯   , V v=1,2,\cdots,V v=1,2,,V V V V是单词的个数。
  • 文本集合: D = { w 1 , ⋯   , w m , ⋯   , w M } D = \{\textbf{w}_1,\cdots,\textbf{w}_m,\cdots,\textbf{w}_M\} D={w1,,wm,,wM};其中 w m \textbf{w}_m wm是第 m m m个文本, m = 1 , 2 , ⋯   , M m=1,2,\cdots,M m=1,2,,M M M M是文本的个数。
  • 文本: w m \textbf{w}_m wm​是一个单词序列 w m = ( w m 1 , ⋯   , w m n , ⋯   , w m N m ) \textbf{w}_m = (w_{m1},\cdots,w_{mn},\cdots,w_{m N_m}) wm=(wm1,,wmn,,wmNm)​,其中 w m n w_{mn} wmn​是文本 w m \textbf{w}_m wm​的第 n n n​个单词, n = 1 , 2 , ⋯   , N m n=1,2,\cdots,N_m n=1,2,,Nm​, N m N_m Nm​是文本 w n \textbf{w}_n wn​中单词的个数。
  • 话题集合: Z = { z 1 , ⋯   , z k , ⋯   , z K } Z = \{z_1,\cdots,z_k,\cdots,z_K\} Z={z1,,zk,,zK},其中 z k z_k zk是第k个话题, k = 1 , 2 , ⋯   , K k=1,2,\cdots,K k=1,2,,K K K K是话题的个数。
  • 单词-话题矩阵( K × V K×V K×V矩阵): φ = { φ k } k = 1 K \varphi = \{\varphi_k\}_{k=1}^K φ={φk}k=1K。每一行是一个话题,每一列是一个单词。 φ k v = p ( w v ∣ z k ) \varphi_{kv} = p(w_v|z_k) φkv=p(wvzk),表示话题 z k z_k zk生成单词 w v w_v wv的概率。
  • 话题-文本矩阵( M × K M×K M×K矩阵): θ = { θ m } m = 1 M \theta = \{\theta_m\}_{m=1}^M θ={θm}m=1M。每一行是一个文本,每一列是一个话题。 θ m k = p ( z k ∣ w m ) \theta_{mk} = p(z_k|\textbf{w}_m) θmk=p(zkwm),表示文本 w m \textbf{w}_m wm生成话题 z k z_k zk的概率。

20.2.1 基本想法

【词语解释】单词分布(即各个话题的单词分布):话题生成各个单词的概率,例如 φ k v = p ( w v ∣ z k ) \varphi_{kv} = p(w_v|z_k) φkv=p(wvzk)表示话题 z k z_k zk生成单词 w v w_v wv的概率。

【词语解释】单词分布的先验分布(即各个话题单词分布的先验分布): φ k ∼ D i r ( β ) \varphi_k \sim Dir(\beta) φkDir(β),其中 φ k \varphi_k φk为多项分布 p ( w ∣ z k ) p(w|z_k) p(wzk)的参数; β \beta β为超参数。单词的先验分布用于生成各个话题的单词分布。

【词语解释】话题内容:即话题的单词分布。

【词语解释】话题分布(即各个文本的话题分布):文本生成各个话题的概率,例如 θ m k = p ( z k ∣ w m ) \theta_{mk} = p(z_k|\textbf{w}_m) θmk=p(zkwm)表示文本 w m \textbf{w}_m wm生成话题 z k z_k zk的概率。

【词语解释】话题分布的先验分布(即各个文本的话题分布的先验分布): θ m ∼ D i r ( α ) \theta_m \sim Dir(\alpha) θmDir(α),其中 θ m \theta_m θm为多项分布 p ( z ∣ w m ) p(z|\textbf{w}_m) p(zwm)的参数; α \alpha α为超参数。话题的先验分布用于生成各个文本的话题分布。

【词语解释】文本内容:即文本的话题分布。

【词语解释】话题序列:按照文本 w m \textbf{w}_m wm的话题分布 M u l t ( θ m ) Mult(\theta_m) Mult(θm),随机生成 n n n个话题 z m 1 , z m 2 , ⋯   , z m n z_{m1},z_{m2},\cdots,z_{mn} zm1,zm2,,zmn所构成的序列,其中 z m n ∼ M u l t ( θ m ) z_{mn} \sim Mult(\theta_m) zmnMult(θm)。其中 n n n为文本中单词的个数。

【词语解释】单词序列:遍历文本 w m \textbf{w}_m wm的话题序列中的每一个话题 z m n z_{mn} zmn;每个话题按照话题 z m n z_{mn} zmn的单词分布 M u l t ( z m n ) Mult(z_{mn}) Mult(zmn),随机生成 1 1 1个单词 w m n w_{mn} wmn,其中 w m n ∼ M u l t ( z m n ) w_{mn} \sim Mult(z_{mn}) wmnMult(zmn);累计生成 n n n个单词,构成单词序列。其中单词序列中的单词 w m n w_{mn} wmn,逐个对应着话题序列中的话题 z m n z_{mn} zmn。其中 n n n为文本中单词的个数。

【词语解释】文本:即文本的单词序列。

20.2.1第2段与20.2.2.2生成过程的对应关系

  • 首先,基于单词分布的先验分布(狄利克雷分布)生成多个单词分布,即决定多个话题内容:(1) 生成话题的单词分布
  • 之后,基于话题分布的先验分布(狄利克雷分布)生成多个话题分布,即决定多个文本内容:(2) 生成文本的话题分布
  • 然后,基于每一个【批:文本的】话题分布生成话题序列:每个文本循环 n n n次的 (3-1)
  • 针对每一个话题,基于话题的单词分布生成单词,整体构成一个单词序列,即生成文本:每个文本循环 n n n次的 (3-2)
  • 重复这个过程生成所有文本:(3) 中对 M M M个文本的循环

20.2.2 模型定义

【补充说明】多项分布 p ( w ∣ z k ) p(w|z_k) p(wzk)的参数 φ k \varphi_k φk即多项分布的参数 p p p φ k ∼ D i r ( β ) \varphi_k \sim Dir(\beta) φkDir(β) φ k v = p ( w v ∣ z k ) \varphi_{kv} = p(w_v|z_k) φkv=p(wvzk),满足 ∑ v = 1 V φ k v = ∑ v = 1 V p ( w v ∣ z k ) = 1 \sum_{v=1}^V \varphi_{kv} = \sum_{v=1}^V p(w_v|z_k) = 1 v=1Vφkv=v=1Vp(wvzk)=1

【补充说明】多项分布 p ( z ∣ w m ) p(z|\textbf{w}_m) p(zwm)的参数 θ m \theta_m θm即多项分布的参数 p p p θ m ∼ D i r ( α ) \theta_m \sim Dir(\alpha) θmDir(α) θ m k = p ( z k ∣ w m ) \theta_{mk} = p(z_k|\textbf{w}_m) θmk=p(zkwm),满足 ∑ k = 1 K θ m k = ∑ k = 1 K p ( z k ∣ w m ) = 1 \sum_{k=1}^K \theta_{mk} = \sum_{k=1}^{K} p(z_k|\textbf{w}_m) = 1 k=1Kθmk=k=1Kp(zkwm)=1

20.2.4 随机变量序列的可交换性

【补充说明】因为LDA假设文本由无限可交换的话题序列组成,所以与话题序列一一对应的单词序列也是无限可交换的。因此,在LDA模型中,只考虑单词是否出现,而不考虑单词出现的顺序,就是“词袋模型”。

20.2.5 概率公式

【文献导读】在参考文献[2]中,没有定义 φ \varphi φ,其中的 β \beta β就是书中的 φ \varphi φ。即文献中的 β \beta β K × V K×V K×V矩阵,有 β k v = p ( w v ∣ z k ) \beta_{kv} = p(w_v|z_k) βkv=p(wvzk)

【消歧补充】类似的,式(20.15)或应写作如下形式以消除歧义:
p ( w , z , θ , φ ∣ α , β ) = [ ∏ k = 1 K p ( φ k ∣ β ) ] [ ∏ m = 1 M p ( θ m ∣ α ) ∏ n = 1 N m p ( z m n ∣ θ m ) p ( w m n ∣ z m n , φ ) ] p(\textbf{w},\textbf{z},\theta,\varphi|\alpha,\beta) = \bigg[ \prod_{k=1}^K p(\varphi_k|\beta) \bigg] \bigg[ \prod_{m=1}^M p(\theta_m|\alpha) \prod_{n=1}^{N_m} p(z_{mn}|\theta_m) p(w_{mn}|z_{mn},\varphi) \bigg] p(w,z,θ,φα,β)=[k=1Kp(φkβ)][m=1Mp(θmα)n=1Nmp(zmnθm)p(wmnzmn,φ)]
【勘误补充】P. 395倒数第9行“表为”应写作“表示为”。

【消歧补充】于是书中式(20.16)或应写作如下形式以消除歧义:
p ( w m , z m , θ m , φ ∣ α , β ) = p ( φ ∣ β ) p ( w m , z m , θ m ∣ α , φ ) = [ ∏ k = 1 K p ( φ k ∣ β ) ] [ p ( θ m ∣ α ) ∏ n = 1 N m p ( z m n ∣ θ m ) p ( w m n ∣ z m n , φ ) ] p(\textbf{w}_m,\textbf{z}_m,\theta_m,\varphi|\alpha,\beta) = p(\varphi|\beta) p(\textbf{w}_m,\textbf{z}_m,\theta_m|\alpha,\varphi) = \bigg[ \prod_{k=1}^K p(\varphi_k|\beta) \bigg] \bigg[ p(\theta_m|\alpha) \prod_{n=1}^{N_m} p(z_{mn}|\theta_m) p(w_{mn}|z_{mn},\varphi) \bigg] p(wm,zm,θm,φα,β)=p(φβ)p(wm,zm,θmα,φ)=[k=1Kp(φkβ)][p(θmα)n=1Nmp(zmnθm)p(wmnzmn,φ)]
【补充说明】式(20.17)也可以写作
p ( w m ∣ θ m , φ ) = ∏ n = 1 N m [ ∑ z m n ∈ Z p ( z m n ∣ θ m ) p ( w m n ∣ z m n , φ ) ] p(\textbf{w}_m|\theta_m,\varphi) = \prod_{n=1}^{N_m} \bigg[ \sum_{z_{mn} \in Z} p(z_{mn}|\theta_m) p(w_{mn}|z_{mn},\varphi) \bigg] p(wmθm,φ)=n=1Nm[zmnZp(zmnθm)p(wmnzmn,φ)]
【勘误补充】式(20.18)和式(20.19)的最外层不应将某一个话题的单词分布 φ k \varphi_k φk作为积分变量进行积分,而应该将所有话题的单词分布 φ = ( φ 1 , φ 2 , ⋯   , φ k ) \varphi = (\varphi_1,\varphi_2,\cdots,\varphi_k) φ=(φ1,φ2,,φk)作为积分变量进行积分。于是,式(20.18)和式(20.19)应为
p ( w m ∣ α , β ) = ∫ [ ∏ k = 1 K p ( φ k ∣ β ) ] [ ∫ p ( θ m ∣ α ) ∏ n = 1 N m [ ∑ z m n ∈ Z p ( z m n ∣ θ m ) p ( w m n ∣ z m n , φ ) ]   d θ m ]   d φ p(\textbf{w}_m|\alpha,\beta) = \int \Bigg[ \prod_{k=1}^K p(\varphi_k|\beta) \Bigg] \Bigg[ \int p(\theta_m|\alpha) \prod_{n=1}^{N_m} \bigg[ \sum_{z_{mn} \in Z} p(z_{mn}|\theta_m) p(w_{mn}|z_{mn},\varphi) \bigg] \ d \theta_m \Bigg] \ d \varphi p(wmα,β)=[k=1Kp(φkβ)][p(θmα)n=1Nm[zmnZp(zmnθm)p(wmnzmn,φ)] dθm] dφ

p ( w m ∣ α , β ) = ∫ [ ∏ k = 1 K p ( φ k ∣ β ) ] [ ∏ m = 1 M ∫ p ( θ m ∣ α ) ∏ n = 1 N m [ ∑ z m n ∈ Z p ( z m n ∣ θ m ) p ( w m n ∣ z m n , φ ) ]   d θ m ]   d φ p(\textbf{w}_m|\alpha,\beta) = \int \Bigg[ \prod_{k=1}^K p(\varphi_k|\beta) \Bigg] \Bigg[ \prod_{m=1}^M \int p(\theta_m|\alpha) \prod_{n=1}^{N_m} \bigg[ \sum_{z_{mn} \in Z} p(z_{mn}|\theta_m) p(w_{mn}|z_{mn},\varphi) \bigg] \ d \theta_m \Bigg] \ d \varphi p(wmα,β)=[k=1Kp(φkβ)][m=1Mp(θmα)n=1Nm[zmnZp(zmnθm)p(wmnzmn,φ)] dθm] dφ

第m个文本的联合概率分布(式20.16)的推导

参数 θ m \theta_m θm φ \varphi φ给定的条件下,第m个文本的联合概率分布是
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\textbf{w}_m…
根据上式(C.1),考虑 θ m ∼ D i r ( α ) \theta_m \sim Dir(\alpha) θmDir(α),则有:参数 α \alpha α φ \varphi φ给定的条件下,第m个文本的联合概率分布是
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\textbf{w}_m…
上式(C.2)即为参考文献[2]中的式(2)(将某个文本改为第m个文本)。

根据上式(C.2),考虑 φ l ∼ D i r ( β ) \varphi_l \sim Dir(\beta) φlDir(β),则有:参数 α \alpha α β \beta β给定的条件下,第m个文本的联合概率分布是
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\textbf{w}_m…

所有文本的联合概率分布(式20.15)的推导

根据式(C.3),有:参数 α \alpha α β \beta β给定的条件下,所有文本的联合概率分布是
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\textbf{w},\…

参数 θ m \theta_m θm φ \varphi φ给定条件下第m个文本的生成概率(式20.17)的推导

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\textbf{w}_m…

超参数 α \alpha α β \beta β给定条件下第m个文本的生成概率(式20.18)的推导

根据式(C.5),有边缘分布
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\textbf{w}_m…
上式(C.6)即为参考文献[2]中的式(3)。根据上式(C.6),有边缘分布
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\textbf{w}_m…
其中 φ = ( φ 1 , φ 2 , ⋯   , φ k ) \varphi = (\varphi_1,\varphi_2,\cdots,\varphi_k) φ=(φ1,φ2,,φk)

超参数 α \alpha α β \beta β给定条件下所有本文的生成概率(式20.19)的推导

根据式(C.6),有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\textbf{w}|\…

20.3.2 算法的主要部分

【补充说明】式(20.28)依据满条件分布的定义式(19.45)得到,其中 Z z i = ∫ p ( z ∣ w , α , β )   d z i Z_{z_i} = \int p(\textbf{z}|\textbf{w},\alpha,\beta) \ d z_i Zzi=p(zw,α,β) dzi

【勘误补充】P. 398倒数第6行,“这里 w i w_i wi表示所有文本的单词序列的第 i i i个位置的单词”应该写作“ w i w_i wi是第 m m m个文本的第 n n n个位置的单词”,与倒数第1行中 w i w_i wi的含义相同。

式20.22的推导

p ( w ∣ z , φ ) p(\textbf{w}|\textbf{z},\varphi) p(wz,φ)表示在给定所有话题的单词分布以及所有文本的话题序列的情况下,所有文本的单词序列的出现概率。于是有
p ( w ∣ z , φ ) = ∏ m = 1 M p ( w m ∣ z m , φ ) = ∏ m = 1 M ∏ n = 1 N m p ( w m n ∣ z m n , φ ) = ∏ m = 1 M ∏ n = 1 N m φ z m n   w m n p(\textbf{w}|\textbf{z},\varphi) = \prod_{m=1}^M p(\textbf{w}_m|\textbf{z}_m,\varphi) = \prod_{m=1}^M \prod_{n=1}^{N_m} p(w_{mn}|z_{mn},\varphi) = \prod_{m=1}^M \prod_{n=1}^{N_m} \varphi_{z_{mn} \ w_{mn}} p(wz,φ)=m=1Mp(wmzm,φ)=m=1Mn=1Nmp(wmnzmn,φ)=m=1Mn=1Nmφzmn wmn
通过上式发现,$p(\textbf{w}|\textbf{z},\varphi) 是 多 个 是多个 \varphi_{kv} 的 积 , 于 是 也 可 以 通 过 计 算 每 个 的积,于是也可以通过计算每个 \varphi_{kv}$的出现次数来改写上式,于是有
p ( w ∣ z , φ ) = ∏ k = 1 K ∏ v = 1 V φ k v n k v p(\textbf{w}|\textbf{z},\varphi) = \prod_{k=1}^K \prod_{v=1}^V \varphi_{kv}^{n_{kv}} p(wz,φ)=k=1Kv=1Vφkvnkv
其中 φ k v φ_{kv} φkv是第 k k k个话题生成单词集合第 v v v个单词的概率, n k v n_{kv} nkv是数据中第 k k k个话题生成第 v v v个单词的次数。

式20.23的推导

因为 φ k ∼ D i r ( β ) \varphi_k \sim Dir(\beta) φkDir(β),根据式(20.11),有 p ( φ k ∣ β ) = 1 B ( β ) ∏ v = 1 V φ k v β v − 1 p(\varphi_k|\beta) = \frac{1}{B(\beta)} \prod_{v=1}^V \varphi_{kv}^{\beta_v-1} p(φkβ)=B(β)1v=1Vφkvβv1;根据式(20.5)和式(20.22),于是有
p ( w ∣ z , β ) = ∫ p ( w ∣ z , φ ) p ( φ ∣ β )   d φ = ∫ [ ∏ k = 1 K ∏ v = 1 V φ k v n k v ] [ ∏ k = 1 K 1 B ( β ) ∏ v = 1 V φ k v β v − 1 ]   d φ = ∏ k = 1 K 1 B ( β ) ∫ ∏ v = 1 V φ k v n k v + β v − 1   d φ = ∏ k = 1 K B ( n k + β ) B ( β ) \begin{aligned} p(\textbf{w}|\textbf{z},\beta) & = \int p(\textbf{w}|\textbf{z},\varphi) p(\varphi|\beta) \ d \varphi \\ & = \int \bigg[ \prod_{k=1}^K \prod_{v=1}^V \varphi_{kv}^{n_{kv}} \bigg] \bigg[ \prod_{k=1}^K \frac{1}{B(\beta)} \prod_{v=1}^V \varphi_{kv}^{\beta_v-1} \bigg] \ d \varphi \\ & = \prod_{k=1}^K \frac{1}{B(\beta)} \int \prod_{v=1}^V \varphi_{kv}^{n_{kv}+\beta_v-1} \ d \varphi \\ & = \prod_{k=1}^K \frac{B(n_k+\beta)}{B(\beta)} \\ \end{aligned} p(wz,β)=p(wz,φ)p(φβ) dφ=[k=1Kv=1Vφkvnkv][k=1KB(β)1v=1Vφkvβv1] dφ=k=1KB(β)1v=1Vφkvnkv+βv1 dφ=k=1KB(β)B(nk+β)

式20.29的推导

将第 m ∗ m^* m个文本的第 n ∗ n^* n个位置的单词为 w m n w_{mn} wmn设为 w i w_i wi z i z_i zi表示单词 w i w_i wi对应的话题;不妨设单词 w i w_i wi是单词集合的第 v ∗ v^* v个单词,话题 z i z_i zi是话题集合的第 k ∗ k^* k个话题。

根据满条件分布的定义式(19.45),式(20.28)可以写成
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(z_i|\textbf{…
将式(20.20)和式(20.21)代入上式(C.9)则有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(z_i|\textbf{…
类似式(20.22),有
p ( w ∣ z − i , φ ) = ∏ k = 1 K ∏ v = 1 V φ k v n k v ∗ (C.11) p(\textbf{w}|\textbf{z}_{-i},\varphi) = \prod_{k=1}^K \prod_{v=1}^V \varphi_{kv}^{n_{kv}^*} \tag{C.11} p(wzi,φ)=k=1Kv=1Vφkvnkv(C.11)
其中 φ k v \varphi_{kv} φkv是第 k k k个话题生成单词集合第 v v v个单词的概率; n k v ∗ n_{kv}^* nkv是数据中第 k k k个话题生成第 v v v个单词的次数,但减去当前单词 w i w_i wi的次数。

类似式(20.23),将式(C.11)代入得
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\textbf{w}|\…
其中 n k ∗ = { n k 1 ∗ , n k 2 ∗ , ⋯   , n k V ∗ } n_k^* = \{ n_{k1}^*,n_{k2}^*,\cdots,n_{kV}^*\} nk={nk1,nk2,,nkV}

同理。类似式(20.24)和式(20.25),有
p ( z − i ∣ θ ) = ∏ m = 1 M ∏ k = 1 K θ m k n m k ∗ (C.13) p(\textbf{z}_{-i}|\theta) = \prod_{m=1}^M \prod_{k=1}^K \theta_{mk}^{n_{mk}^*} \tag{C.13} p(ziθ)=m=1Mk=1Kθmknmk(C.13)

p ( z − i ∣ α ) = ∏ m = 1 M B ( n m ∗ + α ) B ( α ) (C.14) p(\textbf{z}_{-i}|\alpha) = \prod_{m=1}^M \frac{B(n_m^*+\alpha)}{B(\alpha)} \tag{C.14} p(ziα)=m=1MB(α)B(nm+α)(C.14)

其中 θ m k \theta_{mk} θmk是第 m m m个文本生成第 k k k个话题的概率; n m ∗ = { n m 1 ∗ , n m 2 ∗ , ⋯   , n m K ∗ } n_m^* = \{n_{m1}^*,n_{m2}^*,\cdots,n_{mK}^*\} nm={nm1,nm2,,nmK} n m k ∗ n_{mk}^* nmk是数据中第 m m m个文本生成第 k k k个话题的次数,但减去当前单词 w i w_i wi的次数。

将式(20.23)、式(20.25)、式(C.12)和式(C.14)代入式(C.10),有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(z_i|\textbf{…
因为当 k ≠ k ∗ k \ne k^* k=k时,有 B ( n k + β ) = B ( n k ∗ + β ) B(n_k+\beta) = B(n_k^*+\beta) B(nk+β)=B(nk+β);当 m ≠ m ∗ m \ne m^* m=m时,有 B ( n m + α ) = B ( n m ∗ + α ) B(n_m+\alpha)=B(n_m^*+\alpha) B(nm+α)=B(nm+α)。于是上式(C.15)可以写成
p ( z i ∣ z − i , w , α , β ) = B ( n k ∗ + β ) B ( n m ∗ + α ) B ( n k ∗ ∗ + β ) B ( n m ∗ ∗ + α ) (C.16) p(z_i|\textbf{z}_{-i},\textbf{w},\alpha,\beta) = \frac{B(n_{k^*}+\beta) B(n_{m^*}+\alpha)}{B(n_{k^*}^* + \beta) B(n_{m^*}^*+\alpha)} \tag{C.16} p(zizi,w,α,β)=B(nk+β)B(nm+α)B(nk+β)B(nm+α)(C.16)
将贝塔函数的定义式(20.3)代入上式(C.16),得
p ( z i ∣ z − i , w , α , β ) = [ ∏ v = 1 V Γ ( n k ∗ v + β v ) Γ ( ∑ v = 1 V n k ∗ v ∗ + β v ) Γ ( ∑ v = 1 V n k ∗ v + β v ) ∏ v = 1 V Γ ( n k ∗ v ∗ + β v ) ] [ ∏ k = 1 K Γ ( n m ∗ k + α k ) Γ ( ∑ k = 1 K n m ∗ k ∗ + α k ) Γ ( ∑ k = 1 K n m ∗ k + α k ) ∏ k = 1 K Γ ( n m ∗ k ∗ + α k ) ] (C.17) p(z_i|\textbf{z}_{-i},\textbf{w},\alpha,\beta) = \bigg[ \frac{\prod_{v=1}^V \Gamma(n_{k^* v}+\beta_v) \Gamma(\sum_{v=1}^V n_{k^* v}^* + \beta_v)}{\Gamma(\sum_{v=1}^V n_{k^* v}+\beta_v) \prod_{v=1}^V \Gamma(n_{k^* v}^* + \beta_v)} \bigg] \bigg[ \frac{\prod_{k=1}^K \Gamma(n_{m^* k}+\alpha_k) \Gamma(\sum_{k=1}^K n_{m^* k}^* + \alpha_k)}{\Gamma(\sum_{k=1}^K n_{m^* k}+\alpha_k) \prod_{k=1}^K \Gamma(n_{m^* k}^* + \alpha_k)} \bigg] \tag{C.17} p(zizi,w,α,β)=[Γ(v=1Vnkv+βv)v=1VΓ(nkv+βv)v=1VΓ(nkv+βv)Γ(v=1Vnkv+βv)][Γ(k=1Knmk+αk)k=1KΓ(nmk+αk)k=1KΓ(nmk+αk)Γ(k=1Knmk+αk)](C.17)
在第1项中,当 v ≠ v ∗ v \ne v^* v=v时,有 n k ∗ v + β v = n k ∗ v ∗ + β v n_{k^* v}+\beta_v = n_{k^* v}^* + \beta_v nkv+βv=nkv+βv;当 v = v ∗ v = v^* v=v时,有 n k ∗ v ∗ = n k ∗ v ∗ ∗ + 1 n_{k^* v^*} = n_{k^* v^*}^* +1 nkv=nkv+1。在第2项中,当 k ≠ k ∗ k \ne k^* k=k时,有 n m ∗ k + α k = n m ∗ k ∗ + α k n_{m^* k} + \alpha_k = n_{m^* k}^* + \alpha_k nmk+αk=nmk+αk;当 k = k ∗ k = k^* k=k时,有 n m ∗ k ∗ = n m ∗ k ∗ ∗ + 1 n_{m^* k^*} = n_{m^* k^*}^*+1 nmk=nmk+1。于是上式(C.17)可以写成
p ( z i ∣ z − i , w , α , β ) = [ Γ ( ( n k ∗ v ∗ ∗ + β v ) + 1 ) Γ ( ∑ v = 1 V n k ∗ v ∗ + β v ) Γ ( ( ∑ v = 1 V n k ∗ v ∗ + β v ) ) + 1 ) Γ ( n k ∗ v ∗ ∗ + β v ) ] [ Γ ( ( n m ∗ k ∗ ∗ + α k ) + 1 ) Γ ( ∑ k = 1 K n m ∗ k ∗ + α k ) Γ ( ( ∑ k = 1 K n m ∗ k ∗ + α k ) ) + 1 ) Γ ( n m ∗ k ∗ ∗ + α k ) ] (C.18) p(z_i|\textbf{z}_{-i},\textbf{w},\alpha,\beta) = \bigg[ \frac{\Gamma \Big( \big( n_{k^* v^*}^* + \beta_v \big) + 1 \Big) \Gamma(\sum_{v=1}^V n_{k^* v}^* + \beta_v)}{\Gamma \Big( \big( \sum_{v=1}^V n_{k^* v}^* + \beta_v) \big)+ 1 \Big) \Gamma(n_{k^* v^*}^* + \beta_v)} \bigg] \bigg[ \frac{\Gamma \Big( \big( n_{m^* k^*}^* + \alpha_k \big) + 1\Big) \Gamma(\sum_{k=1}^K n_{m^* k}^* + \alpha_k)}{\Gamma \Big( \big( \sum_{k=1}^K n_{m^* k}^* + \alpha_k) \big) + 1 \Big) \Gamma(n_{m^* k^*}^* + \alpha_k)} \bigg] \tag{C.18} p(zizi,w,α,β)=[Γ((v=1Vnkv+βv))+1)Γ(nkv+βv)Γ((nkv+βv)+1)Γ(v=1Vnkv+βv)][Γ((k=1Knmk+αk))+1)Γ(nmk+αk)Γ((nmk+αk)+1)Γ(k=1Knmk+αk)](C.18)
因为伽马函数具有性质 Γ ( s + 1 ) = s Γ ( s ) \Gamma(s+1) = s\Gamma(s) Γ(s+1)=sΓ(s),于是上式(C.18)可以写成
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(z_i|\textbf{…
上式即书中式(20.29)。

20.3.3 算法的后处理

式20.30的推导

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\theta_m|\te…

因为有 z m n ∼ M u l t ( 1 , θ m ) z_{mn} \sim Mult(1,\theta_m) zmnMult(1,θm),于是有 z m ∼ M u l t ( N m , θ m ) \textbf{z}_m \sim Mult(N_m,\theta_m) zmMult(Nm,θm);其中 N m N_m Nm是第 m m m个文本 w m \textbf{w}_m wm中单词的个数,也就是对应的话题序列 z m \textbf{z}_m zm中话题的个数。不妨设 n m = { n m 1 , n m 2 , ⋯   , n m K } n_m = \{n_{m1},n_{m2},\cdots,n_{mK}\} nm={nm1,nm2,,nmK},其中 n m k n_{mk} nmk表示第 m m m个文本 w m \textbf{w}_m wm对应的话题序列 z m \textbf{z}_m zm中话题 k k k个的出现次数。

此时,有 z m ∼ M u l t ( N m , θ m ) \textbf{z}_m \sim Mult(N_m,\theta_m) zmMult(Nm,θm) θ m ∼ D i r ( α ) \theta_m \sim Dir(\alpha) θmDir(α),根据式(20.12),得到 θ m \theta_m θm的后验概率分布
p ( θ m ∣ z m , α ) = p ( z m ∣ θ m , α ) p ( θ m ∣ α ) p ( z m ∣ α ) = D i r ( θ m ∣ n m + α ) p(\theta_m|\textbf{z}_m,\alpha) = \frac{p(\textbf{z}_m|\theta_m,\alpha) p (\theta_m|\alpha)}{p(\textbf{z}_m|\alpha)} = Dir(\theta_m|n_m+\alpha) p(θmzm,α)=p(zmα)p(zmθm,α)p(θmα)=Dir(θmnm+α)
上式即书中式(20.30)。

式20.31的推导

已知对服从狄利克雷分布的随机变量 X = D i r ( X ∣ α ) X = Dir(X|\alpha) X=Dir(Xα),有期望 E ( X i ) = α i ∑ i = 1 n α i E(X_i) = \frac{\alpha_i}{\sum_{i=1}^n \alpha_i} E(Xi)=i=1nαiαi

因为 θ m \theta_m θm的后验分布 p ( θ m ∣ z m , α ) = D i r ( θ m ∣ n m + α ) p(\theta_m|\textbf{z}_m,\alpha) = Dir(\theta_m|n_m+\alpha) p(θmzm,α)=Dir(θmnm+α),于是有 θ m \theta_m θm的贝叶斯估计
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \hat{\theta}_{…

20.3.4 算法

【补充说明】满条件分布中第一个因子为 p ( w ∣ z , β ) p ( w ∣ z − i , β ) \frac{p(\textbf{w}|\textbf{z},\beta)}{p(\textbf{w}|\textbf{z}_{-i},\beta)} p(wzi,β)p(wz,β),表示第 i = ( m , n ) i=(m,n) i=(m,n)个位置根据话题 z i z_i zi生成单词 w i w_i wi的概率;第二个因子为$\frac{p(\textbf{z}|\alpha)}{p(\textbf{z}_{-i}|\alpha)} , 表 示 第 ,表示第 i=(m,n) 个 位 置 根 据 文 本 个位置根据文本 \textbf{w}_m 生 成 话 题 生成话题 z_i$的概率。

【补充说明】话题-单词矩阵 N K × V N_{K×V} NK×V中, n k v n_{kv} nkv表示数据中第 k k k个话题生成第 v v v个单词的次数;文本-话题矩阵 N M × K N_{M×K} NM×K中, n m k n_{mk} nmk表示数据中第 m m m个文本生成第 k k k个话题的次数。

【勘误补充】P. 400 倒数第4行“直到进入燃烧期”应写作“直到结束燃烧期”。

LDA吉布斯抽样算法(Python+numpy实现)

import numpy as np


def check_words(D):
    """整理文本集合整理为数值化的文本的单词序列

    :param D: 文本集合
    :return: 数值化的文本的单词序列
    """
    n_components = 0  # 单词集合中单词的个数
    mapping = {}  # 单词到数值化单词的映射
    X = []
    for d in D:
        x = []
        for word in d:
            if word not in mapping:
                mapping[word] = n_components
                n_components += 1
            x.append(mapping[word])
        X.append(x)
    return np.asarray(X), n_components


def lda_gibbs(D, K, A=None, B=None, n_iter=100, random_state=0):
    """LDA吉布斯抽样算法

    :param D: 文本集合:每一行为1个文本,每一列为1个单词
    :param A: 超参数αlpha
    :param B: 超参数beta
    :param K: 话题个数
    :param n_iter: 迭代次数(直到结束燃烧期)
    :param random_state: 随机种子
    :return: 文本-话题计数矩阵(M×K矩阵),单词-话题计数矩阵(K×V矩阵),文本-话题概率矩阵(M×K矩阵),单词-话题概率矩阵(K×V矩阵)
    """
    X, n_components = check_words(D)  # 数值化的文本的单词序列;单词数(V)
    n_samples = len(D)  # 文本数(M)
    n_features = [len(X[m]) for m in range(n_samples)]  # 文本中单词的个数(N_m)

    np.random.seed(random_state)

    # 初始化超参数alpha和beta:在没有其他先验知识的情况下,可以假设向量alpha和beta的所有分量均为1
    if A is None:
        A = [1] * K
    if B is None:
        B = [1] * n_components
    A_sum = sum(A)
    B_sum = sum(B)

    # 初始化计数矩阵,设所有技术矩阵的元素的初值为0
    N_kv = np.zeros((K, n_components))  # 单词-话题矩阵(K×V矩阵)
    N_k = np.zeros(K)  # 单词-话题矩阵的边缘计数
    N_mk = np.zeros((n_samples, K))  # 文本-话题矩阵(M×K矩阵)
    N_m = np.zeros(n_samples)  # 文本-话题矩阵的边缘计数

    # 给文本的单词序列的每个位置上随机指派一个话题
    Z = [[np.random.randint(0, K) for _ in range(n_features[m])] for m in range(n_samples)]

    # 根据随机指派的话题,更新计数矩阵
    for m in range(n_samples):  # 遍历所有文本
        for n in range(n_features[m]):  # 遍历第m个文本中的所有单词
            v = X[m][n]  # 当前位置单词是第v个单词
            k = Z[m][n]  # 当前位置话题是第k个话题
            N_kv[k][v] += 1  # 增加话题-单词计数
            N_k[k] += 1  # 增加话题-单词和计数
            N_mk[m][k] += 1  # 增加文本-话题计数
            N_m[m] += 1  # 增加文本-话题和计数

    # 循环执行以下操作,直到结束燃烧期
    for _ in range(n_iter):
        for m in range(n_samples):  # 遍历所有文本
            for n in range(n_features[m]):  # 遍历第m个文本中的所有单词
                v = X[m][n]  # 当前位置单词是第v个单词
                k = Z[m][n]  # 当前位置话题是第k个话题

                # 对话题-单词矩阵和文本-话题矩阵中当期位置的已有话题的计数减1
                N_kv[k][v] -= 1  # 减少话题-单词计数
                N_k[k] -= 1  # 减少话题-单词和计数
                N_mk[m][k] -= 1  # 减少文本-话题计数
                N_m[m] -= 1  # 减少文本-话题和计数

                # 按照满条件分布进行抽样(以下用于抽样的伪概率没有除以分母)
                p = np.zeros(K)
                for k in range(K):
                    p[k] = ((N_kv[k][v] + B[v]) / (N_k[k] + B_sum)) * ((N_mk[m][k] + A[k]) / (N_m[m] + A_sum))
                p /= np.sum(p)

                k = np.random.choice(range(K), size=1, p=p)[0]

                # 对话题-单词矩阵和文本-话题矩阵中当期位置的新话题的计数加1
                N_kv[k][v] += 1  # 增加话题-单词计数
                N_k[k] += 1  # 增加话题-单词和计数
                N_mk[m][k] += 1  # 增加文本-话题计数
                N_m[m] += 1  # 增加文本-话题和计数

                # 更新文本的话题序列
                Z[m][n] = k

    # 利用得到的样本计数,计算模型参数
    T = np.zeros((n_samples, K))  # theta(M×K矩阵)
    for m in range(n_samples):
        for k in range(K):
            T[m][k] = N_mk[m][k] + A[k]
        T[m, :] /= np.sum(T[m, :])

    P = np.zeros((K, n_components))  # phi(K×V矩阵)
    for k in range(K):
        for v in range(n_components):
            P[k][v] = N_kv[k][v] + B[v]
        P[k, :] /= np.sum(P[k, :])

    return N_mk, N_kv, T, P

【测试】例17.2.2

if __name__ == "__main__":
    np.set_printoptions(precision=2, suppress=True)

    example = [["guide", "investing", "market", "stock"],
               ["dummies", "investing"],
               ["book", "investing", "market", "stock"],
               ["book", "investing", "value"],
               ["investing", "value"],
               ["dads", "guide", "investing", "rich", "rich"],
               ["estate", "investing", "real"],
               ["dummies", "investing", "stock"],
               ["dads", "estate", "investing", "real", "rich"]]

    N_mk, N_kv, T, P = lda_gibbs(example, 3)

    print("文本-话题计数矩阵(M×K矩阵):")
    print(N_mk)
    # [[1. 0. 3.]
    #  [0. 0. 2.]
    #  [4. 0. 0.]
    #  [1. 1. 1.]
    #  [0. 2. 0.]
    #  [0. 4. 1.]
    #  [0. 2. 1.]
    #  [3. 0. 0.]
    #  [1. 1. 3.]]

    print("文本-话题概率矩阵(M×K矩阵):")
    print(T)
    # [[0.29 0.14 0.57]
    #  [0.2  0.2  0.6 ]
    #  [0.71 0.14 0.14]
    #  [0.33 0.33 0.33]
    #  [0.2  0.6  0.2 ]
    #  [0.12 0.62 0.25]
    #  [0.17 0.5  0.33]
    #  [0.67 0.17 0.17]
    #  [0.25 0.25 0.5 ]]

    print("单词-话题计数矩阵(K×V矩阵):")
    print(N_kv)
    # [[0. 2. 1. 3. 1. 2. 0. 0. 1. 0. 0.]
    #  [0. 2. 0. 0. 0. 0. 2. 1. 2. 2. 1.]
    #  [2. 5. 1. 0. 1. 0. 0. 1. 0. 0. 1.]]

    print("单词-话题概率矩阵(K×V矩阵):")
    print(P)
    # [[0.05 0.14 0.1  0.19 0.1  0.14 0.05 0.05 0.1  0.05 0.05]
    #  [0.05 0.14 0.05 0.05 0.05 0.05 0.14 0.1  0.14 0.14 0.1 ]
    #  [0.14 0.27 0.09 0.05 0.09 0.05 0.05 0.09 0.05 0.05 0.09]]

20.4.1 变分推理

【补充说明】联合概率分布 p ( x , z ) p(x,z) p(x,z)中, x x x是观测变量,即一个文本的单词序列; z z z是隐变量,即与该文本的单词序列对应的话题序列;后验概率分布 p ( z ∣ x ) p(z|x) p(zx)是给定文本的单词序列的条件下,各个话题序列的概率。

【补充解释】变分推理的推导逻辑:KL散度是描述两个概率分布相似度的一种度量;那么你希望找到与 p ( z ∣ x ) p(z|x) p(zx)​在KL散度意义下最接近的分布 q ∗ ( z ) q^*(z) q(z)​,即最小化KL散度 D ( q ( z ) ∣ ∣ p ( z ∣ x ) ) D(q(z)||p(z|x)) D(q(z)p(zx))​。此时 p ( x ) p(x) p(x)​为观测变量的概率,是常量;所以在式20.36中,只需要使右端的证据下界尽可能接近左端的证据,则可得到最小的KL散度,即与 p ( z ∣ x ) p(z|x) p(zx)​最接近的 q ∗ ( z ) q^*(z) q(z)​。

【补充解释】假设 q ( z ) q(z) q(z) z z z的所有分量都相互独立,即假设在由 q ( z ) q(z) q(z)近似表示的条件概率分布 p ( z ∣ x ) p(z|x) p(zx)中,话题序列的各个位置上的话题分布相互独立。

【推荐阅读】变分推理(variational inference) - Rooftrellen的文章 - 知乎

【补充知识】平均场理论,是把环境对物体的作用进行集体处理,以平均作用效果替代单个作用效果的加和的方法。这一方法,能简化对复杂问题的研究,把一个高次、多维的难以求解的问题转换为一个低维问题。(引自:平均场理论 - 百度百科)

【补充解释】在当前语境下,平均场可以不严谨地简单理解如下:我们将决定某个单词对应什么话题的过程,称为决策。在文本中,每个单词的决策,都受到文本中其他单词的决策的影响。但是,如果在考虑每个单词的决策时,都同时考虑文本中其他所有单词的单个决策,那将是非常困难的。所以,我们在考虑每个单词的决策时,不使用其他单词的单个决策作为依据,而是将其他单词的决策综合在一起作为依据。这样就将决策问题大大简化了。

【补充解释】变分推理的另一个角度的理解:证据 l o g   p ( x ) log \ p(x) log p(x)的最大化,是指“极大化不完全数据的似然函数 p ( x ∣ θ ) p(x|\theta) p(xθ),其中 θ \theta θ是需要估计的模型参数”。但因为模型中含有高维隐变量 z = ( z 1 , z 2 , ⋯   , z n ) z = (z_1,z_2,\cdots,z_n) z=(z1,z2,,zn),无法用解析方法求解,同时常规的EM算法也会因为隐变量的高维而变得十分复杂,不易求解。因此考虑转而通过最大化证据下界求解。

式20.35的推导

根据KL散度(相对熵)的定义式(E.1),有
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ D(q(z)||p(z|x)…

20.4.2 变分EM算法

【补充解释】在式(20.41)中, l o g   p ( x ∣ θ ( t − 1 ) ) log \ p(x|\theta^{(t-1)}) log p(xθ(t1)) L ( q ( t ) , θ ( t − 1 ) ) L(q^{(t)},\theta^{(t-1)}) L(q(t),θ(t1))是第 i i i次迭代E步的计算结果; L ( q ( t ) , θ ( t ) ) L(q^{(t)},\theta^{(t)}) L(q(t),θ(t))是第 i i i次迭代M步的计算结果; l o g   p ( x ∣ θ ( t ) ) log \ p(x|\theta^{(t)}) log p(xθ(t))是第 i + 1 i+1 i+1次迭代E步的结算结果。

为什么引入平均场?

假设给定观测数据 x x x,其概率分布是 p ( x ∣ θ ) p(x|\theta) p(xθ),其中 θ \theta θ是需要估计的模型参数,那么不完全数据 x x x的似然函数是 p ( x ∣ θ ) p(x|\theta) p(xθ),对数似然函数 l o g   p ( x ∣ θ ) log \ p(x|\theta) log p(xθ);假设 x x x和隐变量 z z z的联合概率分布是 p ( x , z ∣ θ ) p(x,z|\theta) p(x,zθ),那么完全数据的对数似然函数是 l o g   p ( x , z ∣ θ ) log \ p(x,z|\theta) log p(x,zθ)

接着定义Q函数,因为Q函数是完全数据的对数似然函数对不完全数据的条件分布的期望,于是有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ Q(\theta,\thet…
此时,隐变量 z = ( z 1 , z 2 , ⋯   , z n ) z = (z_1,z_2,\cdots,z_n) z=(z1,z2,,zn)为高维分布,计算上式Q函数的时间复杂度极高,不可能直接求解。因此转而考虑用平均场求解其证据下界。

20.4.3 算法推导

【补充说明】式(20.42)依据式(20.15)和图20.7中的模型即可得到。

式20.43的推导

首先,求给定 w \textbf{w} w条件下 z \textbf{z} z的条件概率分布,并将式(20.17)和式(20.42)代入得
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ p(\theta,\text…
因为分母中作为积分变量的 z \textbf{z} z的可取值数量是指数级的;即文本中每一个单词的话题分布,都受到文本中其他单词话题分布的影响。所以,引入基于平均场的变分分布 q ( θ , z ∣ γ , η ) q(\theta,\textbf{z}|\gamma,\eta) q(θ,zγ,η),以近似LDA模型的后验分布 p ( θ , z ∣ w , α , β ) p(\theta,\textbf{z}|\textbf{w},\alpha,\beta) p(θ,zw,α,β)
q ( θ , z ∣ γ , η ) = q ( θ ∣ γ ) ⋅ ∏ n = 1 N q ( z n ∣ η n ) (20.43) q(\theta,\textbf{z}|\gamma,\eta) = q(\theta|\gamma) · \prod_{n=1}^N q(z_n|\eta_n) \tag{20.43} q(θ,zγ,η)=q(θγ)n=1Nq(znηn)(20.43)
其中式(20.43)中的第一项近似式(C.21)中的第一项;因为根据LDA模型有 θ ∼ D i r ( α ) \theta \sim Dir(\alpha) θDir(α),所以不妨假设 θ ∼ D i r ( γ ) \theta \sim Dir(\gamma) θDir(γ)。式(20.43)中的第二项近似式(C.21)中的第二项;因为根据LDA模型有 z ∼ M u l t ( θ ) \textbf{z} \sim Mult(\theta) zMult(θ),所以不妨假设 z ∼ M u l t ( η ) \textbf{z} \sim Mult(\eta) zMult(η)。(这里的 z \textbf{z} z θ \theta θ为一个文本的话题序列和话题分布)

【补充解释】注意到在式(C.21)的第二项中包含 p ( z n ∣ θ ) p(z_n|\theta) p(znθ),即隐变量 z \textbf{z} z和隐变量 θ \theta θ之间存在依存关系。而在变分分布中,在第二项中定义参数 η \eta η而不再使用 θ \theta θ,使隐变量 z \textbf{z} z不再依存于隐变量 θ \theta θ

式20.44的推导

类似式(20.35),有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ D \big( q(\the…
于是右端第一项和第二项满足
p ( x ∣ α , φ ) ≥ E q [ l o g   p ( θ , x , z ∣ α , φ ) ] − E q [ l o g   q ( θ , z ∣ γ , η ) ] p(\textbf{x}|\alpha,\varphi) \ge E_q \big[ log \ p(\theta,\textbf{x},\textbf{z}|\alpha,\varphi) \big] - E_q \big[ log \ q(\theta,\textbf{z}|\gamma,\eta) \big] p(xα,φ)Eq[log p(θ,x,zα,φ)]Eq[log q(θ,zγ,η)]
继而得到一个文本的证据下界式(20.44)。

式20.49的推导

E q [ l o g   p ( θ ∣ α ) ] E_q \big[ log \ p(\theta|\alpha) \big] Eq[log p(θα)],是关于分布 q ( θ , z ∣ γ , η ) q(\theta,\textbf{z}|\gamma,\eta) q(θ,zγ,η)的数学期望。因为 θ ∼ D i r ( α ) \theta \sim Dir(\alpha) θDir(α),所以根据式(20.11)有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ E_q \big[ log …
【补充解释】关于“ α k \alpha_k αk γ k \gamma_k γk表示第 k k k个话题的狄利克雷分布参数”的理解,可以参考书中P. 390对先验伪计数的描述。

【消歧补充】式(20.52)中的 z n k z_{nk} znk表示 z n = k z_n = k zn=k

【消歧补充】式(20.52)的最后一步用到式(20.50),式(20.50用到附录E式(E.7),附录E式(E.7)用到附录E式(E.4)。所以式子(20.52)最后一步用到的附录E式(E.4)是间接的。

式20.52的推导

E q [ l o g   p ( z ∣ θ ) ] E_q \big[ log \ p(\textbf{z}|\theta) \big] Eq[log p(zθ)],是关于分布 q ( θ , z ∣ γ , η ) q(\theta,\textbf{z}|\gamma,\eta) q(θ,zγ,η)的数学期望。因为 z n ∼ M u l t ( θ ) z_n \sim Mult(\theta) znMult(θ) n = 1 , 2 , ⋯   , N n=1,2,\cdots,N n=1,2,,N,所以有

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ E_q \big[ log …

注意到当 z n = k z_n = k zn=k时,有 l o g   p ( z n = k ∣ θ ) = θ k log \ p(z_n = k|\theta) = \theta_k log p(zn=kθ)=θk。由于上式是关于分布 q ( θ , z ∣ γ , η ) q(\theta,\textbf{z}|\gamma,\eta) q(θ,zγ,η)的期望,而变量 z \textbf{z} z和变量 θ \theta θ是相互独立的,所以可以将对 z \textbf{z} z的期望展开,得
E q [ l o g   p ( z ∣ θ ) ] = ∑ n = 1 N ∑ k = 1 K q ( z n = k ∣ η ) E q ( θ ∣ γ ) [ l o g   θ k ] E_q \big[ log \ p(\textbf{z}|\theta) \big] = \sum_{n=1}^N \sum_{k=1}^K q(z_n = k|\eta) E_{q(\theta|\gamma)} \big[ log \ \theta_k \big] Eq[log p(zθ)]=n=1Nk=1Kq(zn=kη)Eq(θγ)[log θk]
η n k \eta_{nk} ηnk表示文档第 n n n个位置的单词由第 k k k个话题产生的概率,同时将式(20.50)代入上式,得
E q [ l o g   p ( z ∣ θ ) ] = ∑ n = 1 N ∑ k = 1 K η n k [ Ψ ( γ k ) − Ψ ( ∑ l = 1 K γ l ) ] E_q \big[ log \ p(\textbf{z}|\theta) \big] = \sum_{n=1}^N \sum_{k=1}^K \eta_{nk} \Big[ \Psi(\gamma_k) - \Psi(\sum_{l=1}^K \gamma_l) \Big] Eq[log p(zθ)]=n=1Nk=1Kηnk[Ψ(γk)Ψ(l=1Kγl)]

式20.53的推导

E q [ l o g   p ( w ∣ z , φ ) ] E_q \big[ log \ p(\textbf{w}|\textbf{z},\varphi) \big] Eq[log p(wz,φ)],是关于分布 q ( θ , z ∣ γ , η ) q(\theta,\textbf{z}|\gamma,\eta) q(θ,zγ,η)的数学期望。因为 w n ∼ M u l t ( φ z n ) w_n \sim Mult(\varphi_{z_n}) wnMult(φzn) n = 1 , 2 , ⋯   , N n=1,2,\cdots,N n=1,2,,N,所以有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ E_q \big[ log …
由于上式是关于分布 q ( θ , z ∣ γ , η ) q(\theta,\textbf{z}|\gamma,\eta) q(θ,zγ,η)的期望,而变量 z \textbf{z} z θ \theta θ是相互独立的;又因为求期望的部分并不包含变量 θ \theta θ,所以将对 z \textbf{z} z的期望展开,得
E q [ l o g   p ( w ∣ z , φ ) ] = ∑ n = 1 N ∑ k = 1 K q ( z n = k ∣ η ) l o g   p ( w n ∣ z n = k , φ ) E_q \big[ log \ p(\textbf{w}|\textbf{z},\varphi) \big] = \sum_{n=1}^N \sum_{k=1}^K q(z_n=k|\eta) log \ p(w_n|z_n=k,\varphi) Eq[log p(wz,φ)]=n=1Nk=1Kq(zn=kη)log p(wnzn=k,φ)
η n k \eta_{nk} ηnk表示文档第 n n n个位置的单词由第 k k k个话题产生的概率。若当前单词 w n w_n wn是单词集合的第 v v v个单词,则有 l o g   p ( w n = v ∣ z n = k , φ ) = l o g   φ k v log \ p(w_n=v|z_n=k,\varphi) = log \ \varphi_{kv} log p(wn=vzn=k,φ)=log φkv φ k v \varphi_{kv} φkv表示第 k k k个话题生成单词集合中第 v v v个单词的概率。于是,上式可以写成
E q [ l o g   p ( w ∣ z , φ ) ] = ∑ n = 1 N ∑ k = 1 K η n k ∑ v = 1 V w n v l o g   φ k v E_q \big[ log \ p(\textbf{w}|\textbf{z},\varphi) \big] = \sum_{n=1}^N \sum_{k=1}^K \eta_{nk} \sum_{v=1}^V w^v_n log \ \varphi_{kv} Eq[log p(wz,φ)]=n=1Nk=1Kηnkv=1Vwnvlog φkv
其中 w n v w^v_n wnv在第 n n n个位置的单词是单词集合的第 v v v​​个单词时取值为1,否则取值为0。

【补充说明】“2. 变分参数 γ \gamma γ η \eta η的估计”即算法20.5中的E步。算法20.4是在通过证据下界最优化某一个文本的估计参数 γ m \gamma_m γm η m \eta_m ηm,所以在算法20.5中,算法20.4需要对每一个文本分别求估计参数。

式20.58的推导

令对 η n k \eta_{nk} ηnk的偏导数 ∂ L ∂ η n k \frac{\partial L}{\partial \eta_{nk}} ηnkL为零,得
Ψ ( γ k ) − Ψ ( ∑ l = 1 K γ l ) + l o g   φ k v − l o g   η n k − 1 + λ n = 0 (C.22) \Psi(\gamma_k) - \Psi(\sum_{l=1}^K \gamma_l) + log \ \varphi_{kv} - log \ \eta_{nk} - 1 + \lambda_n = 0 \tag{C.22} Ψ(γk)Ψ(l=1Kγl)+log φkvlog ηnk1+λn=0(C.22)
整理上式(C.22)得
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \eta_{nk} & =…
上式中包含拉格朗日乘子的项 e x p ( λ n − 1 ) exp ( \lambda_n - 1 ) exp(λn1),考虑利用约束条件 ∑ l = 1 K η n l = 1 \sum_{l=1}^K \eta_{nl} = 1 l=1Kηnl=1​​求解。整理式(C.22)得
Ψ ( γ k ) − Ψ ( ∑ l = 1 K γ l ) + l o g   φ k v − l o g   η n k = − ( λ n − 1 ) \Psi(\gamma_k) - \Psi(\sum_{l=1}^K \gamma_l) + log \ \varphi_{kv} - log \ \eta_{nk} = - (\lambda_n - 1) \\ Ψ(γk)Ψ(l=1Kγl)+log φkvlog ηnk=(λn1)
等式两边同时做 e e e的指数,有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ exp \Big\{ \la…
等式两边同时对 k k k就和,有
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \sum_{k=1}^K e…
解得
e x p { λ n − 1 } = ∑ k = 1 K e x p { Ψ ( γ k ) − Ψ ( ∑ l = 1 K γ l ) } φ k v K (C.24) exp \Big\{ \lambda_n - 1 \Big\} = \frac{\sum_{k=1}^K exp \Big\{ \Psi(\gamma_k) - \Psi(\sum_{l=1}^K \gamma_l) \Big\} \varphi_{kv}}{K} \tag{C.24} exp{λn1}=Kk=1Kexp{Ψ(γk)Ψ(l=1Kγl)}φkv(C.24)
显然,当上式(C.24)中的 n n n相同时, e x p { λ n − 1 } exp \Big\{ \lambda_n - 1 \Big\} exp{λn1}​​为常数。于是,当取得定值 n n n时,式(C.23)可以写成
η n k ∝ φ k v e x p { Ψ ( γ k ) − Ψ ( ∑ l = 1 K γ l ) } \eta_{nk} \varpropto \varphi_{kv} exp \bigg \{ \Psi(\gamma_k) - \Psi(\sum_{l=1}^K \gamma_l) \bigg \} ηnkφkvexp{Ψ(γk)Ψ(l=1Kγl)}

式20.61的推导

首先注意 Ψ \Psi Ψ是Digamma函数,即对数伽马函数的一阶导数,于是式(20.60)对 γ k \gamma_k γk的偏导数为
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \frac{\partial…
【补充说明】Digamma函数的图像,详见Digamma函数的导数在有理点的函数值如何计算? - 宮非的回答 - 知乎

【补充说明】式(20.62)中, γ k \gamma_k γk​和 α k \alpha_k αk​​都是第 k k k个话题的狄利克雷分布参数,是常数。​

【补充说明】“3.模型参数 α \alpha α φ \varphi φ的估计”即算法20.5中的M步。将式(20.47)扩展到所有文本,只需要将式(20.47)对M求和即可。

【勘误补充】式(20.63)中,“ L [ β ] L_{[\beta]} L[β]”应写作“ L [ φ k v ] ) L_{[\varphi_{kv}]}) L[φkv])​”。

【勘误补充】式(20.64)似应写作“ φ k v ∝ ∑ m = 1 M ∑ n = 1 N m η m n k w m n v \varphi_{kv} \varpropto \sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk} w_{mn}^v φkvm=1Mn=1Nmηmnkwmnv”。

式20.64的推导

求式(20.63)对 φ k v \varphi_{kv} φkv的偏导数
∂ L ∂ φ k v = ∑ m = 1 M ∑ n = 1 N m η m n k w m n v 1 φ k v + λ k \frac{\partial L}{\partial \varphi_{kv}} = \sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk} w_{mn}^v \frac{1}{\varphi_{kv}} +\lambda_k φkvL=m=1Mn=1Nmηmnkwmnvφkv1+λk
令偏导数为零,有
∑ m = 1 M ∑ n = 1 N m η m n k w m n v 1 φ k v + λ k = 0 (C.25) \sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk} w_{mn}^v \frac{1}{\varphi_{kv}} + \lambda_k = 0 \tag{C.25} m=1Mn=1Nmηmnkwmnvφkv1+λk=0(C.25)
整理得
∑ m = 1 M ∑ n = 1 N m η m n k w m n v 1 λ k = − φ k v \sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk} w_{mn}^v \frac{1}{\lambda_k} = - \varphi_{kv} m=1Mn=1Nmηmnkwmnvλk1=φkv
等式两边同时对V求和,因为有约束条件 ∑ v = 1 V φ k v = 1 \sum_{v=1}^V \varphi_{kv} = 1 v=1Vφkv=1,得
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \lambda_k & =…
将上式(C.26)代入式(C.25),得
∑ m = 1 M ∑ n = 1 N m η m n k w m n v 1 φ k v = ∑ m = 1 M ∑ n = 1 N m η m n k \sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk} w_{mn}^v \frac{1}{\varphi_{kv}} = \sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk} m=1Mn=1Nmηmnkwmnvφkv1=m=1Mn=1Nmηmnk
解得
φ k v = ∑ m = 1 M ∑ n = 1 N m η m n k w m n v ∑ m = 1 M ∑ n = 1 N m η m n k (C.27) \varphi_{kv} = \frac{\sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk} w_{mn}^v}{\sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk}} \tag{C.27} φkv=m=1Mn=1Nmηmnkm=1Mn=1Nmηmnkwmnv(C.27)
显然,当上式(C.27)中的 k k k相同时, ∑ m = 1 M ∑ n = 1 N m η m n k \sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk} m=1Mn=1Nmηmnk为常数。于是,当取得定值 v v v时,式(C.27)可以写成
φ k v ∝ ∑ m = 1 M ∑ n = 1 N m η m n k w m n v \varphi_{kv} \varpropto \sum_{m=1}^M \sum_{n=1}^{N_m} \eta_{mnk} w_{mn}^v φkvm=1Mn=1Nmηmnkwmnv
【勘误补充】P. 410的“式(20.65)和式(20.66)分别是函数(20.64)对变量 α \alpha α的梯度 g ( α ) g(\alpha) g(α)和Hessian矩阵 H ( α ) H(\alpha) H(α)”应写作“式(20.66)和式(20.67)分别是函数(20.65)对变量 α \alpha α的梯度 g ( α ) g(\alpha) g(α)和Hessian矩阵 H ( α ) H(\alpha) H(α)​”。

【补充说明】 δ ( k , l ) \delta(k,l) δ(k,l)是delta函数。当且仅当 k = = l k==l k==l时, δ ( k , l ) = 1 \delta(k,l)=1 δ(k,l)=1​;否则 δ ( k , l ) = 0 \delta(k,l)=0 δ(k,l)=0

20.4.4 算法总结

【补充说明】图20.4中完整LDA模型的变分EM算法参考:文本主题模型之LDA(三) LDA求解之变分推断EM算法 - 刘建平Pinard的文章 - 博客园

【详细说明】算法20.5(LDA的变分EM算法)

输入:文本额单词序列 w = { w 1 , ⋯   , w m , ⋯   , w M } \textbf{w} = \{\textbf{w}_1,\cdots,\textbf{w}_m,\cdots,\textbf{w}_M\} w={w1,,wm,,wM}​, w m = ( w m 1 , ⋯   , w m n , ⋯   , w m N m ) \textbf{w}_m = (w_{m1},\cdots,w_{mn},\cdots,w_{m N_m}) wm=(wm1,,wmn,,wmNm)​;

输出:变分参数 γ \gamma γ​, η \eta η​,模型参数 α \alpha α​, φ φ φ​。

参数:话题个数K。

[1] 初始化模型参数 α \alpha α φ \varphi φ

[2] 开始EM算法迭代循环,交替E步和M步,直至收敛

[2.1] E步(固定模型参数 α \alpha α φ \varphi φ,估计变分参数 γ \gamma γ η \eta η):开始E步迭代循环,重复以下步骤直至 η \eta η γ \gamma γ收敛

[2.1.1] 遍历所有文本: m = 1 , 2 , ⋯   , M m=1,2,\cdots,M m=1,2,,M

[2.1.1.1] 遍历所有单词: n = 1 , 2 , ⋯   , N m n = 1,2,\cdots,N_m n=1,2,,Nm

[2.1.1.1.1] 遍历所有话题: k = 1 , 2 , ⋯   , K k=1,2,\cdots,K k=1,2,,K

[2.1.1.1.1.1] 更新 η m n k \eta_{mnk} ηmnk η m n k ( t + 1 ) = φ k v   e x p [ Ψ ( γ m k ( t ) ) − Ψ ( ∑ l = 1 K γ m l ( t ) ) ] \eta_{mnk}^{(t+1)} = \varphi_{kv} \ exp \Big[ \Psi(\gamma_{mk}^{(t)}) - \Psi(\sum_{l=1}^K \gamma_{ml}^{(t)}) \Big] ηmnk(t+1)=φkv exp[Ψ(γmk(t))Ψ(l=1Kγml(t))]

[2.1.1.1.2] 规范化 η m n k ( t + 1 ) \eta_{mnk}^{(t+1)} ηmnk(t+1),使得 ∑ k = 1 K η m n k ( t + 1 ) = 1 \sum_{k=1}^K \eta_{mnk}^{(t+1)} = 1 k=1Kηmnk(t+1)=1

[2.1.1.2] 遍历所有话题: k = 1 , 2 , ⋯   , K k=1,2,\cdots,K k=1,2,,K

[2.1.1.2.1] 更新 γ m k \gamma_{mk} γmk γ m k ( t + 1 ) = α m k + ∑ n = 1 N η m n k \gamma_{mk}^{(t+1)} = \alpha_{mk} + \sum_{n=1}^N \eta_{mnk} γmk(t+1)=αmk+n=1Nηmnk

[2.2] M步-Part1(固定变分参数 γ \gamma γ η \eta η,估计模型参数 φ \varphi φ

[2.2.1] 遍历所有话题: k = 1 , 2 , ⋯   , K k=1,2,\cdots,K k=1,2,,K

[2.2.1.1] 遍历所有单词: v = 1 , 2 , ⋯   , V v=1,2,\cdots,V v=1,2,,V

[2.2.1.1.1] 更新 φ k v \varphi_{kv} φkv φ k v ( t + 1 ) = ∑ m = 1 ∑ n = 1 η n m k w m n v \varphi_{kv}^{(t+1)} = \sum_{m=1} \sum_{n=1} \eta_{nmk} w_{mn}^v φkv(t+1)=m=1n=1ηnmkwmnv

[2.2.1.2] 规范化 φ k v ( t + 1 ) \varphi_{kv}^{(t+1)} φkv(t+1),使得 ∑ v = 1 V φ k v = 1 \sum_{v=1}^V \varphi_{kv} = 1 v=1Vφkv=1

[2.3] M步-Part2(固定变分参数 γ \gamma γ η \eta η,估计模型参数 α \alpha α):使用牛顿法迭代求最大化 L [ α ] L_{[\alpha]} L[α],重复以下步骤直至 α \alpha α收敛

[2.3.1] α ( t + 1 ) = α ( t ) − H ( α ( t ) ) − 1 g ( α ( t ) ) \alpha^{(t+1)} = \alpha^{(t)} - H(\alpha^{(t)})^{-1} g(\alpha^{(t)}) α(t+1)=α(t)H(α(t))1g(α(t));其中 H ( α ) H(\alpha) H(α) α \alpha α的黑塞矩阵; g ( α ) g(\alpha) g(α) α \alpha α的梯度

[3] 根据变分参数 γ \gamma γ η \eta η,估计模型参数 θ = ( θ 1 , ⋯   , θ m , ⋯   , θ M ) \theta=(\theta_1,\cdots,\theta_m,\cdots,\theta_M) θ=(θ1,,θm,,θM) z = ( z 1 , ⋯   , z m , ⋯   , z M ) \textbf{z} = (\textbf{z}_1,\cdots,\textbf{z}_m,\cdots,\textbf{z}_M) z=(z1,,zm,,zM)

LDA的变分EM算法(sklearn实现)

【测试】例17.2.2

import numpy as np
from sklearn.decomposition import LatentDirichletAllocation
from sklearn.feature_extraction.text import CountVectorizer

if __name__ == "__main__":
    np.set_printoptions(precision=2, suppress=True)

    example = [["guide", "investing", "market", "stock"],
               ["dummies", "investing"],
               ["book", "investing", "market", "stock"],
               ["book", "investing", "value"],
               ["investing", "value"],
               ["dads", "guide", "investing", "rich", "rich"],
               ["estate", "investing", "real"],
               ["dummies", "investing", "stock"],
               ["dads", "estate", "investing", "real", "rich"]]

    # 将文档转换为词频向量:(文本集合中的第m个文本,单词集合中的第v个单词) = 第v个单词在第m个文本中的出现频数
    count_vector = CountVectorizer()
    tf = count_vector.fit_transform([" ".join(doc) for doc in example])

    # 训练LDA主题模型:n_components = 话题数量
    lda = LatentDirichletAllocation(n_components=3,  # 话题个数K
                                    learning_method="batch",  # 学习方法:batch=变分推断EM算法(默认);online=在线变分推断EM算法
                                    random_state=0)
    doc_topic_distr = lda.fit_transform(tf)

    print("【文本-话题计数矩阵】doc_topic_distr[i] = 第i个文本的话题分布")
    print(doc_topic_distr)
    # [[0.07 0.86 0.07]
    #  [0.12 0.76 0.12]
    #  [0.07 0.86 0.07]
    #  [0.82 0.09 0.09]
    #  [0.76 0.12 0.12]
    #  [0.88 0.06 0.06]
    #  [0.09 0.09 0.82]
    #  [0.09 0.83 0.09]
    #  [0.07 0.06 0.88]]

    print("【单词-话题非规范化概率矩阵】components_[i][j] = 第i个话题生成第j个单词的未规范化的概率")
    print(lda.components_)
    # [[1.33 1.33 0.33 0.33 1.34 3.33 0.33 0.33 2.35 0.33 2.33]
    #  [1.33 0.33 2.33 0.33 1.32 4.33 2.33 0.33 0.33 3.33 0.33]
    #  [0.34 1.34 0.33 2.33 0.34 2.34 0.33 2.33 1.32 0.33 0.33]]

    print("【单词-话题概率矩阵】components_[i][j] = 第i个话题生成第j个单词的概率")
    print(lda.components_ / lda.components_.sum(axis=1)[:, np.newaxis])
    # [[0.1  0.1  0.02 0.02 0.1  0.24 0.02 0.02 0.17 0.02 0.17]
    #  [0.08 0.02 0.14 0.02 0.08 0.26 0.14 0.02 0.02 0.2  0.02]
    #  [0.03 0.11 0.03 0.2  0.03 0.2  0.03 0.2  0.11 0.03 0.03]]

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号