27[NLP训练营]collapsed gibbs sampling

2023-10-29 15:40

本文主要是介绍27[NLP训练营]collapsed gibbs sampling,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 回顾
  • 第一步
  • 第二步 看分子
    • 第一项
    • 第二项
    • 联合第一、第二项
  • 第二步 看分母
  • 分子分母同时看
  • 化简
    • 小栗子
  • 小结

公式输入请参考: 在线Latex公式

回顾

下图是LDA生成的过程。
在这里插入图片描述
为了更好描述collapsed gibbs sampling。把里面的标识换一下,问题的描述变成:
计算 P ( Z t s ∣ Z − t s , w , α , β ) P(Z_{ts}|Z_{-ts},w,\alpha,\beta) P(ZtsZts,w,α,β)
t t t代表第 t t t个文档
s s s代表第 t t t个文档的第 s s s个单词


假设有一个集合
x = { x 1 , x 2 , . . . x n } x=\{x_1,x_2,...x_n\} x={x1,x2,...xn}
那么它可以表示为:
x = x i ∪ x − i x=x_i\cup x_{-i} x=xixi
同样的,问题描述中的 Z = Z t s ∪ Z − t s Z=Z_{ts}\cup Z_{-ts} Z=ZtsZts


第一步

可以看到,问题描述中是没有 ϕ , θ \phi,\theta ϕ,θ的,我们就是要用collapsed 的方式把这两个变量进行边缘化,
P ( Z t s ∣ Z − t s , w , α , β ) = P ( Z , w ∣ α , β ) P ( Z − t s , w ∣ α , β ) P(Z_{ts}|Z_{-ts},w,\alpha,\beta)=\cfrac{P(Z,w|\alpha,\beta)}{P(Z_{-ts},w|\alpha,\beta)} P(ZtsZts,w,α,β)=P(Zts,wα,β)P(Z,wα,β)
变成这个形式是有点原因的, w w w是观测到的结果,把它挪到概率的前面部分,就相对于利用观测值来推断参数,可以走likelihood的套路。


上面的式子为什么会相等呢?
P ( Z , w ∣ α , β ) P ( Z − t s , w ∣ α , β ) ∗ P ( α , β ) P ( α , β ) = P ( Z , w , α , β ) P ( Z − t s , w , α , β ) (1) \begin{aligned}&\cfrac{P(Z,w|\alpha,\beta)}{P(Z_{-ts},w|\alpha,\beta)}*\cfrac{P(\alpha,\beta)}{P(\alpha,\beta)}\\ &=\cfrac{P(Z,w,\alpha,\beta)}{P(Z_{-ts},w,\alpha,\beta)}\tag1\end{aligned} P(Zts,wα,β)P(Z,wα,β)P(α,β)P(α,β)=P(Zts,w,α,β)P(Z,w,α,β)(1)
P ( Z t s ∣ Z − t s , w , α , β ) × P ( Z − t s , w , α , β ) = P ( Z t s , Z − t s , w , α , β ) = P ( Z , w , α , β ) (2) \begin{aligned}&P(Z_{ts}|Z_{-ts},w,\alpha,\beta)\times P(Z_{-ts},w,\alpha,\beta)\\ &=P(Z_{ts},Z_{-ts},w,\alpha,\beta)\\&=P(Z,w,\alpha,\beta)\tag2\end{aligned} P(ZtsZts,w,α,β)×P(Zts,w,α,β)=P(Zts,Zts,w,α,β)=P(Z,w,α,β)(2)
把公式2代入1就得到上面的等式了。


第二步 看分子

把第一步中的分子分母分开看,先看分子
P ( Z , w ∣ α , β ) P(Z,w|\alpha,\beta) P(Z,wα,β)
如果要把 ϕ , θ \phi,\theta ϕ,θ边缘化就是要写成下面的积分:
P ( Z , w ∣ α , β ) = P ( Z ∣ α ) ⋅ P ( w ∣ Z , β ) = ∫ P ( Z ∣ θ ) ⋅ P ( θ ∣ α ) d θ ∫ P ( w ∣ Z , ϕ ) ⋅ P ( ϕ ∣ β ) d ϕ \begin{aligned}P(Z,w|\alpha,\beta)&=P(Z|\alpha)\cdot P(w|Z,\beta)\\ &=\int P(Z|\theta)\cdot P(\theta|\alpha)d\theta\int P(w|Z,\phi)\cdot P(\phi|\beta)d\phi\end{aligned} P(Z,wα,β)=P(Zα)P(wZ,β)=P(Zθ)P(θα)dθP(wZ,ϕ)P(ϕβ)dϕ
上面第一个等号实际上是根据LDA那个图进行拆分了一下,用依赖关系把联合概率拆分成对应的条件概率。上面的联合概率是有条件的,就是已知的超参数 α , β \alpha,\beta α,β
在这里插入图片描述
按上面的图本来第一个等号后面应该是写: P ( Z ∣ θ ) ⋅ P ( w ∣ Z , ϕ ) P(Z|\theta)\cdot P(w|Z,\phi) P(Zθ)P(wZ,ϕ),但是为了要把 θ , ϕ \theta,\phi θ,ϕ进行边缘化,我们就把这个路径直接取到 α , β \alpha,\beta α,β那里了。
在这里插入图片描述
所以就写成了: P ( Z ∣ α ) ⋅ P ( w ∣ Z , β ) P(Z|\alpha)\cdot P(w|Z,\beta) P(Zα)P(wZ,β)

分别看上面的两项积分:

第一项

第一项中 P ( Z ∣ θ ) P(Z|\theta) P(Zθ)相当于multinomial分布, P ( θ ∣ α ) P(\theta|\alpha) P(θα)相当于狄利克雷分布,因此根据分布的性质可以展开(上面用ts来代表新下标,这里又回到原来的ij了。。。):
∫ P ( Z ∣ θ ) ⋅ P ( θ ∣ α ) d θ = ∫ ∏ i = 1 N ∏ j = 1 N i ∏ k = 1 K θ i k I ( Z i j = k ) ⋅ ∏ i = 1 N 1 B ( α ) ∏ k = 1 K θ i k α k − 1 d θ k = ∏ i = 1 N ∫ ∏ j = 1 N i ∏ k = 1 K θ i k I ( Z i j = k ) ⋅ 1 B ( α ) ∏ k = 1 K θ i k α k − 1 d θ k \begin{aligned}&\int P(Z|\theta)\cdot P(\theta|\alpha)d\theta\\&=\int\prod_{i=1}^N\prod_{j=1}^{N_i}\prod_{k=1}^K\theta^{I(Z_{ij}=k)}_{ik}\cdot\prod_{i=1}^N\cfrac{1}{\Beta(\alpha)}\prod_{k=1}^K\theta_{ik}^{\alpha_{k}-1}d\theta_k\\ &=\prod_{i=1}^N\int\prod_{j=1}^{N_i}\prod_{k=1}^K\theta^{I(Z_{ij}=k)}_{ik}\cdot\cfrac{1}{\Beta(\alpha)}\prod_{k=1}^K\theta_{ik}^{\alpha_{k}-1}d\theta_k\end{aligned} P(Zθ)P(θα)dθ=i=1Nj=1Nik=1KθikI(Zij=k)i=1NB(α)1k=1Kθikαk1dθk=i=1Nj=1Nik=1KθikI(Zij=k)B(α)1k=1Kθikαk1dθk
先解释一下第一个等号的第一项: ∏ i = 1 N ∏ j = 1 N i \prod_{i=1}^N\prod_{j=1}^{N_i} i=1Nj=1Ni表示两层循环,每个文章,每个文章中的单词,第三个虽然是连乘,但是由于indicator函数的存在,每次只会有一个 θ i k \theta_{ik} θik出现。
第二项是把所有文档的主题分布拆分单个文档主题分布的累加,所以第一个 ∏ i = 1 N \prod_{i=1}^N i=1N表示所有文章的狄利克雷分布的累加。

这里把连乘 ∏ j = 1 N i \prod_{j=1}^{N_i} j=1Ni放到指数变成累加 ∑ j = 1 N i \sum_{j=1}^{N_i} j=1Ni,然后和后面的 θ i k α k − 1 \theta_{ik}^{\alpha_{k}-1} θikαk1的指数进行相加,上式变为:
= ∏ i = 1 N 1 B ( α ) ∫ ∏ k = 1 K θ i k ∑ j = 1 N i I ( Z i j = k ) + α k − 1 d θ k (3) =\prod_{i=1}^N\cfrac{1}{\Beta(\alpha)}\int\prod_{k=1}^K\theta^{\sum_{j=1}^{N_i}I(Z_{ij}=k)+\alpha_{k}-1}_{ik}d\theta_k\tag3 =i=1NB(α)1k=1Kθikj=1NiI(Zij=k)+αk1dθk(3)
根据狄利克雷分布的概念:
D i r ( θ ∣ α ) = 1 B ( α ) ∏ k = 1 K θ i k α k − 1 Dir(\theta|\alpha)=\cfrac{1}{\Beta(\alpha)}\prod_{k=1}^K\theta_{ik}^{\alpha_{k}-1} Dir(θα)=B(α)1k=1Kθikαk1
可以看到公式3积分那个部分其实可以凑成狄利克雷分布,最后变成:
( 3 ) = ∏ i = 1 N B ( α + ∑ j = 1 N i I k ( Z i j ) ) B ( α ) (4) (3)=\prod_{i=1}^N\cfrac{\Beta(\alpha+\sum_{j=1}^{N_i}I_k(Z_{ij}))}{\Beta(\alpha)}\tag4 (3)=i=1NB(α)B(α+j=1NiIk(Zij))(4)
这里给个例子看看 ∑ j = 1 N i I k ( Z i j ) \sum_{j=1}^{N_i}I_k(Z_{ij}) j=1NiIk(Zij)是怎么算(i是文章编号,j是第i篇文章中的单词编号),例如一个文档里面有六个词,每个词对应的主题 Z i j Z_{ij} Zij如下

w i 1 w_{i1} wi1 w i 2 w_{i2} wi2 w i 3 w_{i3} wi3 w i 4 w_{i4} wi4 w i 5 w_{i5} wi5 w i 6 w_{i6} wi6
z i 1 z_{i1} zi1 z i 2 z_{i2} zi2 z i 3 z_{i3} zi3 z i 4 z_{i4} zi4 z i 5 z_{i5} zi5 z i 6 z_{i6} zi6
112322

也就是主题为1的有2个词,为2的有3个词,为3的有1个词,因此 ∑ j = 1 N i I k ( Z i j ) = ( 2 , 3 , 1 ) \sum_{j=1}^{N_i}I_k(Z_{ij})=(2,3,1) j=1NiIk(Zij)=(2,3,1)
公式4中 α \alpha α通常是一个向量,可以写作: ( α 1 , α 2 , α 3 , . . . ) (\alpha_1,\alpha_2,\alpha_3,...) (α1,α2,α3,...)
因此, 公式4中的分子就变成了 B ( α 1 + 2 , α 2 + 3 , α 3 + 1 ) \Beta(\alpha_1+2,\alpha_2+3,\alpha_3+1) B(α1+2,α2+3,α3+1),分母变成了 B ( α 1 , α 2 , α 3 ) \Beta(\alpha_1,\alpha_2,\alpha_3) B(α1,α2,α3)
通俗理解就是有一个初始的 α \alpha α,然后根据主题词的个数对 α \alpha α进行调整,这里其实和上面的吉布斯采样中的 θ i \theta_i θi的采样结果一样样的。

第二项

∫ P ( w ∣ Z , ϕ ) ⋅ P ( ϕ ∣ β ) d ϕ \int P(w|Z,\phi)\cdot P(\phi|\beta)d\phi P(wZ,ϕ)P(ϕβ)dϕ
跟第一项类似的,是一个multinomial和dirichlet分布相乘,经过上面的证明我们知道这两个东西相乘结果还是一个dirichlet分布。上式:
= ∫ ∏ k = 1 K ∏ i : Z i = k ∏ v = 1 V ϕ k , v I ( w i = v ) ⋅ ∏ k = 1 K 1 B ( β ) ∏ v = 1 V ϕ k , v β v − 1 d ϕ k =\int\prod_{k=1}^K\prod_{i:Z_i=k}\prod_{v=1}^V\phi_{k,v}^{I(w_i=v)}\cdot\prod_{k=1}^K\cfrac{1}{\Beta(\beta)}\prod_{v=1}^V\phi_{k,v}^{\beta_v-1}d\phi_k =k=1Ki:Zi=kv=1Vϕk,vI(wi=v)k=1KB(β)1v=1Vϕk,vβv1dϕk
P ( ϕ ∣ β ) P(\phi|\beta) P(ϕβ)对应上面的第二项,第二项的第一个连乘 ∏ k = 1 K \prod_{k=1}^K k=1K意思是 P ( ϕ ∣ β ) P(\phi|\beta) P(ϕβ)有K个主题,每个主题都是从狄利克雷分布采样得来的。第二个连乘代表这个主题下的单词,由于考虑所有单词的情况,因此其单词数量记为 V V V
为了和第一项一样的思路,这里要把 P ( w ∣ Z , ϕ ) P(w|Z,\phi) P(wZ,ϕ)也要凑出来主题和所有单词的嵌套连乘,那么就从主题的角度来考虑,每个单词必定是属于某个主题的,因此先循环所有主题: ∏ k = 1 K \prod_{k=1}^K k=1K
这里的 i : Z i = k i:Z_i=k i:Zi=k意思是所有的单词i是属于主题k的(相当于,从所有单词里面把满足 Z i = k Z_i=k Zi=k这个条件的单词i,取出来),另外也可以把连乘变成指数上的累加:
= ∏ k = 1 K 1 B ( β ) ∫ ∏ v = 1 V ϕ k , v ∑ i : Z i = k I ( w i = v ) + β v − 1 d ϕ k = ∏ k = 1 K B ( β + ∑ i : Z i = k I v ( w i ) ) B ( β ) \begin{aligned}&=\prod_{k=1}^K\cfrac{1}{\Beta(\beta)}\int\prod_{v=1}^V\phi_{k,v}^{\sum_{i:Z_i=k}I(w_i=v)+\beta_v-1}d\phi_k\\ &=\prod_{k=1}^K\cfrac{\Beta(\beta+\sum_{i:Z_i=k}I_v(w_i))}{\Beta(\beta)}\end{aligned} =k=1KB(β)1v=1Vϕk,vi:Zi=kI(wi=v)+βv1dϕk=k=1KB(β)B(β+i:Zi=kIv(wi))

联合第一、第二项

P ( Z , w ∣ α , β ) = 第 一 项 ⋅ 第 二 项 = ∏ i = 1 N B ( α + ∑ j = 1 N i I k ( Z i j ) ) B ( α ) ⋅ ∏ k = 1 K B ( β + ∑ i : Z i = k I v ( w i ) ) B ( β ) \begin{aligned}P(Z,w|\alpha,\beta)&=第一项\cdot 第二项\\ &=\prod_{i=1}^N\cfrac{\Beta(\alpha+\sum_{j=1}^{N_i}I_k(Z_{ij}))}{\Beta(\alpha)}\cdot \prod_{k=1}^K\cfrac{\Beta(\beta+\sum_{i:Z_i=k}I_v(w_i))}{\Beta(\beta)}\end{aligned} P(Z,wα,β)==i=1NB(α)B(α+j=1NiIk(Zij))k=1KB(β)B(β+i:Zi=kIv(wi))

第二步 看分母

P ( Z − t s , w ∣ α , β ) P(Z_{-ts},w|\alpha,\beta) P(Zts,wα,β)
也就是不考虑 Z t s Z_{ts} Zts
P ( Z − t s , w ∣ α , β ) = ∏ i = 1 N B ( α + ∑ j = 1 , δ j ≠ ( t , s ) N i I k ( Z i j ) ) B ( α ) ⋅ ∏ k = 1 K B ( β + ∑ i : Z i = k , δ j ≠ ( t , s ) I v ( w i ) ) B ( β ) \begin{aligned}&P(Z_{-ts},w|\alpha,\beta)\\&=\prod_{i=1}^N\cfrac{\Beta(\alpha+\sum_{j=1,\delta_j\neq(t,s)}^{N_i}I_k(Z_{ij}))}{\Beta(\alpha)}\cdot \prod_{k=1}^K\cfrac{\Beta(\beta+\sum_{i:Z_i=k,\delta_j\neq(t,s)}I_v(w_i))}{\Beta(\beta)}\end{aligned} P(Zts,wα,β)=i=1NB(α)B(α+j=1,δj=(t,s)NiIk(Zij))k=1KB(β)B(β+i:Zi=k,δj=(t,s)Iv(wi))
δ j \delta_j δj代表当前单词所在的位置

分子分母同时看

P ( Z t s ∣ Z − t s , w , α , β ) = 分 子 分 母 P(Z_{ts}|Z_{-ts},w,\alpha,\beta)=\cfrac{分子}{分母} P(ZtsZts,w,α,β)=
可以看到分子和分母除了第t个文档,其他项是一样的,由于最外面是连乘,所以可以都消掉(这里的下标又把i换成了t,有点乱。。。):
P ( Z t s ∣ Z − t s , w , α , β ) = B ( α + ∑ j = 1 N t I k ( Z t j ) ) B ( α + ∑ j = 1 , j ≠ s N t I k ( Z t j ) ) B ( β + ∑ i : Z i = k I v ( w i ) ) B ( β + ∑ i : Z i = k , δ j ≠ ( t , s ) I v ( w i ) ) P(Z_{ts}|Z_{-ts},w,\alpha,\beta)=\cfrac{\Beta(\alpha+\sum_{j=1}^{N_t}I_k(Z_{tj}))}{\Beta(\alpha+\sum_{j=1,j\neq s}^{N_t}I_k(Z_{tj}))}\cfrac{\Beta(\beta+\sum_{i:Z_i=k}I_v(w_i))}{\Beta(\beta+\sum_{i:Z_i=k,\delta_j\neq(t,s)}I_v(w_i))} P(ZtsZts,w,α,β)=B(α+j=1,j=sNtIk(Ztj))B(α+j=1NtIk(Ztj))B(β+i:Zi=k,δj=(t,s)Iv(wi))B(β+i:Zi=kIv(wi))
下面就是利用 B \Beta B函数来进行简化。

化简

用例子来看上面的
B ( α + ∑ j = 1 N i I k ( Z i j ) ) B ( α + ∑ j = 1 , j ≠ s N i I k ( Z i j ) ) \cfrac{\Beta(\alpha+\sum_{j=1}^{N_i}I_k(Z_{ij}))}{\Beta(\alpha+\sum_{j=1,j\neq s}^{N_i}I_k(Z_{ij}))} B(α+j=1,j=sNiIk(Zij))B(α+j=1NiIk(Zij))
的分子和分母
先看分子 ∑ j = 1 N i I k ( Z i j ) \sum_{j=1}^{N_i}I_k(Z_{ij}) j=1NiIk(Zij)是怎么算,这个在上节有讲过,这里再详细写下,例如一个文档里面有六个词,每个词对应的主题 Z i j Z_{ij} Zij如下

w i 1 w_{i1} wi1 w i 2 w_{i2} wi2 w i 3 w_{i3} wi3 w i 4 w_{i4} wi4 w i 5 w_{i5} wi5 w i 6 w_{i6} wi6
z i 1 z_{i1} zi1 z i 2 z_{i2} zi2 z i 3 z_{i3} zi3 z i 4 z_{i4} zi4 z i 5 z_{i5} zi5 z i 6 z_{i6} zi6
111232

也就是主题为1的有3个词,为2的有2个词,为3的有1个词,因此 ∑ j = 1 N i I k ( Z i j ) = ( 3 , 2 , 1 ) \sum_{j=1}^{N_i}I_k(Z_{ij})=(3,2,1) j=1NiIk(Zij)=(3,2,1)
上式中 α \alpha α通常是一个向量,可以写作: ( α 1 , α 2 , α 3 , . . . , α k ) (\alpha_1,\alpha_2,\alpha_3,...,\alpha_k) (α1,α2,α3,...,αk)
因此上式的分子就变成了 B ( α 1 + 3 , α 2 + 2 , α 3 + 1 ) \Beta(\alpha_1+3,\alpha_2+2,\alpha_3+1) B(α1+3,α2+2,α3+1)
由于分母不包含当前词的主题,当当前词是 w i 1 w_{i1} wi1的时候,分母变成了 B ( α 1 + 2 , α 2 + 2 , α 3 + 1 ) \Beta(\alpha_1+2,\alpha_2+2,\alpha_3+1) B(α1+2,α2+2,α3+1)
因此:
B ( α + ∑ j = 1 N i I k ( Z i j ) ) B ( α + ∑ j = 1 , j ≠ s N i I k ( Z i j ) ) = B ( α 1 + n t 1 , α 2 + n t 2 + . . . + α k + n k t 1 ) B ( α 1 + n t 1 ′ , α 2 + n t 2 ′ + . . . + α k + n k t 1 ′ ) (5) \cfrac{\Beta(\alpha+\sum_{j=1}^{N_i}I_k(Z_{ij}))}{\Beta(\alpha+\sum_{j=1,j\neq s}^{N_i}I_k(Z_{ij}))}=\cfrac{\Beta(\alpha_1+n_{t1},\alpha_2+n_{t2}+...+\alpha_k+n_{kt1})}{\Beta(\alpha_1+n'_{t1},\alpha_2+n'_{t2}+...+\alpha_k+n'_{kt1})}\tag5 B(α+j=1,j=sNiIk(Zij))B(α+j=1NiIk(Zij))=B(α1+nt1,α2+nt2+...+αk+nkt1)B(α1+nt1,α2+nt2+...+αk+nkt1)(5)
n t i n_{ti} nti表示第 t t t个文档有多少单词被分配主题 i i i
n t i ′ n'_{ti} nti表示去掉 Z t s Z_{ts} Zts后,第 t t t个文档有多少单词被分配主题 i i i
这里的分子分母都有 k k k项,而且只有一项不一样。
继续化简前先给出 B \Beta B函数的形式:
在这里插入图片描述
因此: B ( α 1 , α 2 , α 3 , . . . , α k ) = ∏ k = 1 K ( Γ ( α k ) Γ ( ∑ k = 1 K α k ) \Beta(\alpha_1,\alpha_2,\alpha_3,...,\alpha_k)=\cfrac{\prod_{k=1}^K(\Gamma(\alpha_k)}{\Gamma(\sum_{k=1}^K\alpha_k)} B(α1,α2,α3,...,αk)=Γ(k=1Kαk)k=1K(Γ(αk)
( 5 ) = ∏ k = 1 K ( Γ ( α k + n t k ) ) Γ ( ∑ k = 1 K ( α k + n t k ) ) ⋅ Γ ( ∑ k = 1 K ( α k + n t k ′ ) ) ∏ k = 1 K ( Γ ( α k + n t k ′ ) ) (5)=\cfrac{\prod_{k=1}^K(\Gamma(\alpha_k+n_{tk}))}{\Gamma(\sum_{k=1}^K(\alpha_k+n_{tk}))}\cdot\cfrac{\Gamma(\sum_{k=1}^K(\alpha_k+n'_{tk}))}{\prod_{k=1}^K(\Gamma(\alpha_k+n'_{tk}))} (5)=Γ(k=1K(αk+ntk))k=1K(Γ(αk+ntk))k=1K(Γ(αk+ntk))Γ(k=1K(αk+ntk))
伽玛函数: Γ ( n ) = ( n − 1 ) ! \Gamma(n)=(n-1)! Γ(n)=(n1)!,而且上面提到过 α k + n t k \alpha_k+n_{tk} αk+ntk α k + n t k ′ \alpha_k+n'_{tk} αk+ntk都有k项,而且只有一项不一样,且不一样的项相差1。例如:
Z t s = 2 Z_{ts}=2 Zts=2,则 n t 2 − n t 2 ′ = 1 n_{t2}-n'_{t2}=1 nt2nt2=1 n t i = n t i ′ , i ≠ 2 n_{ti}=n'_{ti},i\neq2 nti=nti,i=2,因此:
( 5 ) = ∏ k = 1 K ( Γ ( α k + n t k ) ) ∏ k = 1 K ( Γ ( α k + n t k ′ ) ) ⋅ Γ ( ∑ k = 1 K ( α k + n t k ′ ) ) Γ ( ∑ k = 1 K ( α k + n t k ) ) = α k + n t u n e w ∑ k = 1 K α k + n t n e w ⋅ β w i + n u w i n e w ∑ v = 1 V β v + n u n e w (5)=\cfrac{\prod_{k=1}^K(\Gamma(\alpha_k+n_{tk}))}{\prod_{k=1}^K(\Gamma(\alpha_k+n'_{tk}))}\cdot\cfrac{\Gamma(\sum_{k=1}^K(\alpha_k+n'_{tk}))}{\Gamma(\sum_{k=1}^K(\alpha_k+n_{tk}))}\\ =\cfrac{\alpha_k+n_{tu}^{new}}{\sum_{k=1}^K\alpha_k+n_t^{new}}\cdot \cfrac{\beta_{w_i}+n_{uw_i}^{new}}{\sum_{v=1}^V\beta_v+n_u^{new}} (5)=k=1K(Γ(αk+ntk))k=1K(Γ(αk+ntk))Γ(k=1K(αk+ntk))Γ(k=1K(αk+ntk))=k=1Kαk+ntnewαk+ntunewv=1Vβv+nunewβwi+nuwinew
n t u n e w n_{tu}^{new} ntunew表示当前第t个文档有多少个单词被分配到主题u(丢掉 Z t s Z_{ts} Zts,不考虑当前词)
n t n e w n_t^{new} ntnew表示当前第t个文档的单词数量(丢掉 Z t s Z_{ts} Zts,不考虑当前词)
n u w i n e w n_{uw_i}^{new} nuwinew表示对于单词 w i w_i wi有多少次被分配到了主题u(丢掉 Z t s Z_{ts} Zts,不考虑当前词)
n u n e w n_u^{new} nunew表示所有文档中有多少单词分配到了主题u(丢掉 Z t s Z_{ts} Zts,不考虑当前词)

小栗子

假设有两个文档:
在这里插入图片描述
主题数量k为3,词库大小为4.
先随机初始化每个单词的主题。
在这里插入图片描述
超参数 α = ( 0.1 , 0.1 , 0.1 ) , β = ( 0.1 , 0.1 , 0.1 , 0.1 ) \alpha=(0.1,0.1,0.1),\beta=(0.1,0.1,0.1,0.1) α=(0.1,0.1,0.1),β=(0.1,0.1,0.1,0.1)
下面按化简后的公式来进行计算第一个文档的第一个单词:
在这里插入图片描述
这个时候把第一个单词【今天】从文档1中去掉,可以看到 n 1 , 1 n e w = 2 n_{1,1}^{new}=2 n1,1new=2(就是还有2个单词分配到主题1), n 1 n e w = 6 n_1^{new}=6 n1new=6(还剩下6个单词)
因为每一个单词在不同文档可以有不同的主题,也就是有不同的主题概率分布,因此:把第一个单词【今天】从文档1中去掉,没有【今天】分配到主题1,因此 n 1 , w 1 n e w = 0 n_{1,w_1}^{new}=0 n1,w1new=0,但是除了第一个单词【今天】外,分配到主题1的单词有3个,因此 n 1 n e w = 3 n_1^{new}=3 n1new=3
P ( Z 1 , 1 = 1 ∣ Z − ( 1 , 1 ) , w , α , β ) = 0.1 + 2 0.1 + 0.1 + 0.1 + 6 ⋅ 0.1 + 0 0.1 + 0.1 + 0.1 + 0.1 + 3 P(Z_{1,1}=1|Z_{-(1,1)},w,\alpha,\beta)=\cfrac{0.1+2}{0.1+0.1+0.1+6}\cdot \cfrac{0.1+0}{0.1+0.1+0.1+0.1+3} P(Z1,1=1Z(1,1),w,α,β)=0.1+0.1+0.1+60.1+20.1+0.1+0.1+0.1+30.1+0
同理:
P ( Z 1 , 1 = 2 ∣ Z − ( 1 , 1 ) , w , α , β ) = 0.1 + 2 0.1 + 0.1 + 0.1 + 6 ⋅ 0.1 + 1 0.1 + 0.1 + 0.1 + 0.1 + 5 P(Z_{1,1}=2|Z_{-(1,1)},w,\alpha,\beta)=\cfrac{0.1+2}{0.1+0.1+0.1+6}\cdot \cfrac{0.1+1}{0.1+0.1+0.1+0.1+5} P(Z1,1=2Z(1,1),w,α,β)=0.1+0.1+0.1+60.1+20.1+0.1+0.1+0.1+50.1+1
P ( Z 1 , 1 = 3 ∣ Z − ( 1 , 1 ) , w , α , β ) = 0.1 + 2 0.1 + 0.1 + 0.1 + 6 ⋅ 0.1 + 2 0.1 + 0.1 + 0.1 + 0.1 + 4 P(Z_{1,1}=3|Z_{-(1,1)},w,\alpha,\beta)=\cfrac{0.1+2}{0.1+0.1+0.1+6}\cdot \cfrac{0.1+2}{0.1+0.1+0.1+0.1+4} P(Z1,1=3Z(1,1),w,α,β)=0.1+0.1+0.1+60.1+20.1+0.1+0.1+0.1+40.1+2
计算完毕后,进行归一化得到(使得累加等于1):
在这里插入图片描述
然后就可以进行multinomial采样。

小结

P ( Z t s ∣ Z − t s , w , α , β ) = α k + n t u n e w ∑ k = 1 K α k + n t n e w ⋅ β w i + n u w i n e w ∑ v = 1 V β v + n u n e w P(Z_{ts}|Z_{-ts},w,\alpha,\beta)=\cfrac{\alpha_k+n_{tu}^{new}}{\sum_{k=1}^K\alpha_k+n_t^{new}}\cdot \cfrac{\beta_{w_i}+n_{uw_i}^{new}}{\sum_{v=1}^V\beta_v+n_u^{new}} P(ZtsZts,w,α,β)=k=1Kαk+ntnewαk+ntunewv=1Vβv+nunewβwi+nuwinew
右边的第一项代表一个文档中的单词的主题分类,当一个文档中的单词分类越集中,主题也越集中,例如一个文档中的有10个单词,前面9个都是主题1,那么第十个单词也会倾向于采样为第1个主题。
第二项是所有文档中某个单词的主题分类影响,例如所有文章中某个单词出现100次,80次是主题1,那么该单词被抽样为主题1的概率越大。

这篇关于27[NLP训练营]collapsed gibbs sampling的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/301631

相关文章

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt

【代码随想录训练营第42期 续Day52打卡 - 图论Part3 - 卡码网 103. 水流问题 104. 建造最大岛屿

目录 一、做题心得 二、题目与题解 题目一:卡码网 103. 水流问题 题目链接 题解:DFS 题目二:卡码网 104. 建造最大岛屿 题目链接 题解:DFS  三、小结 一、做题心得 也是成功补上昨天的打卡了。 这里继续图论章节,还是选择使用 DFS 来解决这类搜索问题(单纯因为我更熟悉 DFS 一点),今天补卡的是水流问题和岛屿问题。个人感觉这一章节题对于刚

代码随想录八股训练营第三十七天| C++

前言 一、map和unorder_map的区别? 1.1.内部实现: 1.2.排序: 1.3.查找效率: 1.4.内存使用: 1.5.迭代器: 1.6.键的唯一性: 1.7.使用场景: 二、C++11 新特性有哪些? 2.1.std::map: 总结 前言 在现代软件开发中,选择合适的数据结构如 C++ 标准库中的 std::map 和 std::unordered_

27. Remove Elements

题目: 解答: 类似题26,注意下删除后的元素的移动方式即可 代码: class Solution {public:int removeElement(vector<int>& nums, int val) {if(nums.empty()) return 0;int len = nums.size();int lenafter = 0, head = 0;for(int i

【VB6|第27期】如何在VB6中使用Shell函数实现同步执行

日期:2024年9月1日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083;0.98365 = 0.0006 文

【python 走进NLP】两两求相似度,得到一条文本和其他文本最大的相似度

应用场景: 一个数据框里面文本,两两求相似度,得到一条文本和其他文本最大的相似度。 content source_id0 丰华股份军阀割据发生的故事大概多少w 11 丰华股份军阀割据发生的故事大概多少 22 丰华股份军阀割据发生的故事大概多少 33 丰华股份军阀割据发生的故事大概多少

【Python 走进NLP】NLP词频统计和处理停用词,可视化

# coding=utf-8import requestsimport sysreload(sys)sys.setdefaultencoding('utf-8')from lxml import etreeimport timetime1=time.time()import bs4import nltkfrom bs4 import BeautifulSoupfrom