狄利克雷分布、采样方法、主题模型
Gamma函数
- 公式
Γ(x)=∫0+∞e−ttx−1dt\Gamma(x)=\int_0^{+\infty} e^{-t} t^{x-1}dtΓ(x)=∫0+∞e−ttx−1dt - 性质
Γ(x+1)=xΓ(x)\Gamma(x+1)=x\Gamma(x)Γ(x+1)=xΓ(x)
Γ(n)=(n−1)!\Gamma(n)=(n-1)!Γ(n)=(n−1)!
Beta函数
- 公式
B(m,n)=∫01xm−1(1−x)n−1dx\Beta(m,n)=\int_0^1 x^{m-1}(1-x)^{n-1}dxB(m,n)=∫01xm−1(1−x)n−1dx - 性质
B(m,n)=Γ(m)Γ(n)Γ(m+n)\Beta(m,n)=\frac{\Gamma(m)\Gamma(n)}{\Gamma(m+n)}B(m,n)=Γ(m+n)Γ(m)Γ(n)
二项分布
假设在玩CS游戏,你拿着狙击枪,敌人出现你打中敌人的概率是P,打不中敌人的概率是1-P,那么敌人第一次出现你没打中,而第二次出现你打中的概率是(1-P)P。如果敌人出现了n词,而你打中了其k次,而不确定具体是哪k次,这样从n次中任取k次的次数是CnkC_n^kCnk,而这不确定k次打中敌人的概率是Cnkpk(1−p)n−kC_n^kp^k(1-p)^{n-k}Cnkpk(1−p)n−k,通过这个例子可以得知二项分布的概率:
f(k;n,p)=Cnkpk(1−p)n−kf(k;n,p)=C_n^kp^k(1-p)^{n-k}f(k;n,p)=Cnkpk(1−p)n−k
Beta分布
- 定义
f(x;a,β)=xa−1(1−x)β−1∫01ua−1(1−u)β−1duf(x;a,\beta)=\frac{x^{a-1}(1-x)^{\beta-1}}{\int_0^1 u^{a-1}(1-u)^{\beta -1} du}f(x;a,β)=∫01ua−1(1−u)β−1duxa−1(1−x)β−1
=xa−1(1−x)β−1B(a,β)=\frac{x^{a-1}(1-x)^{\beta -1}}{\Beta(a,\beta)}=B(a,β)xa−1(1−x)β−1
=Γ(a+β)Γ(a)Γ(β)xa−1(1−x)β−1=\frac{\Gamma(a+\beta)}{\Gamma(a)\Gamma(\beta)}x^{a-1}(1-x)^{\beta -1}=Γ(a)Γ(β)Γ(a+β)xa−1(1−x)β−1
- 期望
E(p)=∫01pa(1−p)β−1dpΓ(a,β)=B(a+1,β)B(a,β)E(p)=\int_0^1 \frac {p^a(1-p)^{\beta -1}dp}{\Gamma(a,\beta)}=\frac{\Beta(a+1,\beta)}{\Beta(a,\beta)}E(p)=∫01Γ(a,β)pa(1−p)β−1dp=B(a,β)B(a+1,β)
=Γ(a+1)Γ(β)Γ(a+β+1)Γ(a+β)Γ(a)Γ(β)=\frac{\Gamma(a+1)\Gamma(\beta)}{\Gamma(a+\beta+1)}\frac{\Gamma(a+\beta)}{\Gamma(a)\Gamma(\beta)}=Γ(a+β+1)Γ(a+1)Γ(β)Γ(a)Γ(β)Γ(a+β)
=aa+β=\frac{a}{a+\beta}=a+βa
相似分布
如果p⃗服从分布Dir(t⃗∣a⃗)\vec p 服从分布 Dir(\vec t | \vec a)p服从分布Dir(t∣a)则可证明,
E(p⃗)=(a1∑iai,a2∑iai,⋯)E(\vec p)=\big( \frac{a_1}{\sum_i a_i},\frac{a_2}{\sum_i a_i},\cdots \big)E(p)=(∑iaia1,∑iaia2,⋯)多项分布
设投掷n次骰子,这个骰子共有六种结果,且1点出现概率为p1p_1p1,2点出现概率为p2,⋯p_2,\cdotsp2,⋯多项分布给出了在n次实验中,骰子1点出现x1x_1x1次,2点出现x2x_2x2次,3点出现x3x_3x3次,⋯\cdots⋯,6点出现x6x_6x6次,这个结果组合的概率为:
n!x1!x2!⋯xk!p1x1p2x2⋯pkxk\frac{n!}{x_1!x_2!\cdots x_k!}p_1^{x_1}p_2^{x_2}\cdots p_k^{x_k}x1!x2!⋯xk!n!p1x1p2x2⋯pkxk
亦可表示为:
Γ(∑ixi+1)∏iΓ(xi+1)∏ipixi\frac{\Gamma(\sum_i x_i+1)}{\prod_i \Gamma(x_i+1)}\prod_i p_i^{x_i}∏iΓ(xi+1)Γ(∑ixi+1)i∏pixi
狄利克雷分布
狄利克雷分布式beta分布在多项式情况下的情况,也就是多项分布的共轭先验分布,其概率密度如下:
f(p1,p2,⋯ ,pk−1∣a1,a2,⋯ ,ak)=1Δ(a⃗)∏i=1kpai−1f(p_1,p_2,\cdots,p_{k-1}|a_1,a_2,\cdots,a_k)=\frac{1}{\Delta(\vec a)}\prod_{i=1}^kp^{a_i-1}f(p1,p2,⋯,pk−1∣a1,a2,⋯,ak)=Δ(a)1i=1∏kpai−1
其中的Δ(a⃗)\Delta(\vec a)Δ(a)计算公式如下:
Δ(a⃗)=∏i=1kΓ(ai)Γ(∑iai)\Delta(\vec a) = \frac {\prod_{i=1}^k \Gamma(a_i)}{\Gamma(\sum_i a_i)}Δ(a)=Γ(∑iai)∏i=1kΓ(ai)
共轭先验分布
所谓共轭,知识我们选取一个函数作为似然函数的先验分布,使得后验分布函数和先验分布函数形式一致。比如Beta分布是二项分布的共轭先验概率分布,而狄更斯分布式多项式分布的共轭先验概率分布。
参数估计
对于典型的离散型随机变量分布:二项分布、多项分布;典型的连续性随机变量分布:正态分布。他们都可以看作参数分布,因为他们的函数形式被一小部分参数控制,比如正态分布的均值合方差,二项分布事件发生的概率等。因此,给定一堆观测数据集,我们需要有一个解决方案来确定这些参数值的大小,以便能够利用分布模型做密度估计,这就是参数估计。
对于参数估计,一直存在两个学派的不同解决方案。一是频率学派解决方案:通过某些优化准则来选定特定参数值;二是贝叶斯学派方案:假定参数服从一个先验分布,通过观测到的数据,使用被也是理论计算对应的后验分布。先验和后验的选择满足共轭,这些分布都是指数簇分布的例子。
简而言之,假设参数θ\thetaθ也是变量而非常量,而且在做实验前已经服从某个分布,然后现在做新实验去更新这个分布假设。从二项分布到beta分布
二项分布的似然函数
L(X=s,Y=f∣p)=Cnsps(1−p)fL(X=s,Y=f|p)=C_n^sp^s(1-p)^fL(X=s,Y=f∣p)=Cnsps(1−p)f
先验分布beta分布
P(p∣a,β)=pa−1(1−p)β−1B(a,β)P(p|a,\beta)=\frac{p^{a-1}(1-p)^{\beta -1}}{\Beta(a,\beta)}P(p∣a,β)=B(a,β)pa−1(1−p)β−1
计算后验分布
P(X=s,Y=f,p∣a,β)=ps+a−1(1−p)f+β−1B(s+a,f+β)P(X=s,Y=f,p|a,\beta)=\frac{p^{s+a-1}(1-p)^{f+\beta -1}}{\Beta(s+a,f+\beta)}P(X=s,Y=f,p∣a,β)=B(s+a,f+β)ps+a−1(1−p)f+β−1多项分布到Dirichlet分布
同上可以证明多项分布与Dirichlet分布共轭
马尔科夫蒙特卡洛
一、 Inverse CDF
- cdf(累计分布函数)
F(x)=∫−∞xf(x)dxF(x)=\int_{-\infty}^xf(x)dxF(x)=∫−∞xf(x)dx
高斯的CDF图形
![]()
- 采样
- 求F(x)的反函数F−1(y)F^{-1}(y)F−1(y),进而进行采样
- 使用uniform(0,1)获取采样点s,进而获取简单计算t=F−1(s)t=F^{-1}(s)t=F−1(s)
- 上式计算结果极为采样点
- 证明
- 均匀分布的CDF函数
P(x≤a)=H(x)=x(0≤x≤1)P(x \leq a)=H(x)=x (0\leq x \leq 1)P(x≤a)=H(x)=x (0≤x≤1)
- 采样有以下性值
P(x≤s)=P(x≤F(t))=F(t)P(x\leq s)=P(x\leq F(t))=F(t)P(x≤s)=P(x≤F(t))=F(t)
总结
对概率密度函数fff进行采样可以使用以上方式进行,但是并非所有的CDF都容易求得或其逆容易求得因此使用了其它方法
二、 Reject Sampling
- 采样类比
目标分布π(x)\pi(x)π(x),分布q(x)q(x)q(x)和常数MMM,通过对q(x)q(x)q(x)的采样实现对π(x)\pi(x)π(x)采样,满足:
q(x)q(x)q(x)采样比较容易
q(x)q(x)q(x)的形状接近π(x)\pi(x)π(x),且∀x,π(x)≤Mq(x)\forall x,\pi(x)\leq Mq(x)∀x,π(x)≤Mq(x),即保证0≤π(x)Mq(x)≤10 \leq \frac{\pi(x)}{Mq(x)}\leq 10≤Mq(x)π(x)≤1
- 采样过程
- 生成样本x∽q(x)x \backsim q(x)x∽q(x)和 u∽Uniform[0,1]u \backsim Uniform[0,1]u∽Uniform[0,1]
- 若u≤π(x)Mq(x)u \leq \frac{\pi(x)}{Mq(x)}u≤Mq(x)π(x)则接受样本x
- 则接受样本服从π(x)\pi(x)π(x)分布
- 证明
等价于
产生样本X∽q(X)X \backsim q(X)X∽q(X)和U∽[0,1]U \backsim[0,1]U∽[0,1]
Y=Mq(X)UY=Mq(X)UY=Mq(X)U,若Y≤π(X)Y \leq \pi(X)Y≤π(X),则接受Xx的概率密度如下
px(x)=q(x)p_x(x)=q(x)px(x)=q(x)
y的概率密度
F(y∣x)=P(Y≤y∣x)=P(Mq(x)U≤y∣x)=P(U≤yMq(x)∣x)F(y|x)=P(Y\leq y|x)=P(Mq(x)U \leq y|x)=P(U \leq \frac{y}{Mq(x)}|x)F(y∣x)=P(Y≤y∣x)=P(Mq(x)U≤y∣x)=P(U≤Mq(x)y∣x)
上式表示在X发生的情况下y发生的情况P(U≤yMq(x))=yMq(x)P(U \leq \frac{y}{Mq(x)})=\frac{y}{Mq(x)}P(U≤Mq(x)y)=Mq(x)y
得到其概率密度函数如下:
py(y∣x)=1Mq(x)p_y(y|x)=\frac{1}{Mq(x)}py(y∣x)=Mq(x)1联合密度函数
p(x,y)=px(x)py(y∣x).=1Mp(x,y)=p_x(x)p_y(y|x).=\frac{1}{M}p(x,y)=px(x)py(y∣x).=M1
按接受-拒绝采样抽出的随机数d的概率
F(d∣accept)=P(X≤d∣Y≤π(x))=P(X≤d,Y≤π(x))P(Y≤π(x))=∫−∞dπ(x)dxF(d|accept)=P(X\leq d| Y \leq \pi(x))=\frac{P(X\leq d, Y\leq \pi(x))}{P(Y \leq \pi(x))}=\int_{-\infty}^d\pi(x)dxF(d∣accept)=P(X≤d∣Y≤π(x))=P(Y≤π(x))P(X≤d,Y≤π(x))=∫−∞dπ(x)dx
缺点
选择q(x)非常重要,当q(x)q(x)q(x)与π(x)\pi(x)π(x)相差较大时采样效率就会非常低
三、蒙特卡洛采样
细致平稳条件
π(x∗)K(x∗→x)=p(x)K(x→x∗)\pi(x^*)K(x^* \rightarrow x) = p(x)K(x \rightarrow x^*)π(x∗)K(x∗→x)=p(x)K(x→x∗)
使用的过程
以一维分布为例
initialise x0x^0x0
for i =0 to N-1
u ~ U(0,1)
x∗∽q(x∗∣xi)x^* \backsim q(x^*|x^{i})x∗∽q(x∗∣xi)
ifu<a(x∗)=min(1,π(x∗)q(x∣x∗)π(x)q(x∗∣x))xi+1=x∗if u < a(x^*)=min(1,\frac{\pi(x^*)q(x|x^*)}{\pi(x)q(x^*|x)}) x^{i+1}=x^*if u<a(x∗)=min(1,π(x)q(x∗∣x)π(x∗)q(x∣x∗)) xi+1=x∗
elsexi+1=xielse x^{i+1}=x^ielse xi+1=xi证明其满足detail balance
需要证明:π(x)K(x→x∗)=π(x∗)K(x∗→x)\pi(x)K(x\rightarrow x^*)=\pi(x^*)K(x^*\rightarrow x)π(x)K(x→x∗)=π(x∗)K(x∗→x)
K(x→x∗)=q(x∗∣x)min(1,π(x∗)q(x∗∣x)π(x)q(x∗∣x))K(x \rightarrow x^*)=q_(x^*|x)min(1,\frac{\pi(x^*)q(x^*|x)}{\pi(x)q(x^*|x)})K(x→x∗)=q(x∗∣x)min(1,π(x)q(x∗∣x)π(x∗)q(x∗∣x))原式转化为
π(x)K(x→x∗)=π(x)q(x∗∣x)min(1,π(x∗)q(x∗∣x)π(x)q(x∗∣x))\pi(x)K(x\rightarrow x^*)=\pi(x)q(x^*|x)min(1,\frac{\pi(x^*)q(x^*|x)}{\pi(x)q(x^*|x)})π(x)K(x→x∗)=π(x)q(x∗∣x)min(1,π(x)q(x∗∣x)π(x∗)q(x∗∣x))
=min(π(x)q(x∗∣x),π(x∗)q(x∗∣x))=min(\pi(x)q(x^*|x),\pi(x^*)q(x^*|x))=min(π(x)q(x∗∣x),π(x∗)q(x∗∣x))
=π(x∗)q(x∗∣x)min(1,π(x)q(x∗∣x)π(x∗)q(x∣x∗))=\pi(x^*)q(x^*|x)min(1,\frac{\pi(x)q(x^*|x)}{\pi(x^*)q(x|x^*)})=π(x∗)q(x∗∣x)min(1,π(x∗)q(x∣x∗)π(x)q(x∗∣x))
=π(x∗)K(x∗→x)=\pi(x^*)K(x^* \rightarrow x)=π(x∗)K(x∗→x)
四、Gibbs Sampling
过程
已知 x1,y1,z1x^1,y^1,z^1x1,y1,z1
x2∽P(x∣y1,z1)x^2 \backsim P(x|y^1,z^1)x2∽P(x∣y1,z1)
y2∽P(y∣x2,z1)y^2 \backsim P(y|x^2,z^1)y2∽P(y∣x2,z1)
z2∽P(z∣x2,y2)z^2 \backsim P(z|x^2,y^2)z2∽P(z∣x2,y2)
x3∽P(z∣x2,y2)x^3 \backsim P(z|x^2,y^2)x3∽P(z∣x2,y2)证明Gibbis 与 蒙特卡洛关系
- 当采样第i个样本时
π(xi∗∣X−i)=qi(x∗∣x)\pi(x_i^*| X_{-i})=q_i(x^*|x)π(xi∗∣X−i)=qi(x∗∣x)
需证明
π(x∗)qi(x∣x∗)=π(x∗)qi(x∣x∗)\pi(x^*)q_i(x|x^*)=\pi(x^*)q_i(x|x^*)π(x∗)qi(x∣x∗)=π(x∗)qi(x∣x∗)
对应的接收率为
π(x∗)q(x∣x∗)π(x)q(x∗∣x)=π(x∗)π(xi∣X−i∗)π(x)π(xi∗∣X−i)\frac{\pi(x^*)q(x|x^*)}{\pi(x)q(x^*|x)}=\frac{\pi(x^*)\pi(x_i|X^*_{-i})}{\pi(x)\pi(x_i^*|X_{-i})}π(x)q(x∗∣x)π(x∗)q(x∣x∗)=π(x)π(xi∗∣X−i)π(x∗)π(xi∣X−i∗)
采样时X−i∗=X−iX^*_{-i}=X_{-i}X−i∗=X−i因此有以下公式
π(xi∗∣X−i∗)π(xi∣X−i∗)π(xi∣X−i)π(xi∗∣X−i)=1\frac{\pi(x_i^*|X^*_{-i})\pi(x_i|X^*_{-i})}{\pi(x_i|X_{-i})\pi(x_i^*|X_{-i})}=1π(xi∣X−i)π(xi∗∣X−i)π(xi∗∣X−i∗)π(xi∣X−i∗)=1总结
吉布斯采样可以直接在π(xi∣X−i)\pi(x_i|X_{-i})π(xi∣X−i)上依次进行采样
主题模型
LDA
- LDA是一种无监督的贝叶斯模型
- 是一种主题模型,它可以将文档集中的每篇文档的主题按照概率分布的形式给出。同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量K即可。此外LDA的另一个优点则是,对于每个主题均可找出一些词语来描述它。
- 是一种典型的词袋模型,即它认为一篇文档是由一组词构成的一个集合,词与词之间没有顺序以及先后的顺序,一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。
生成词过程
例:
- a→→θ→m→zm,n\overrightarrow a \rightarrow \overrightarrow \theta_m \rightarrow z_{m,n}a→θm→zm,n,这个过程表示在生成m篇文档时,先抽取一个doc-topic骰子θ→m\overrightarrow \theta_mθm,然后投掷这个筛子生成文档第n个词topic编号zm,nz_{m,n}zm,nr
- β→→φ→k→wm,n\overrightarrow \beta \rightarrow \overrightarrow \varphi_k \rightarrow w_{m,n}β→φk→wm,n,这个过程表示如下动作生成第m篇文档中的第n个词:在K个topic-word筛子φ→k\overrightarrow \varphi_kφk中,选择编号为k=zm,nk=z_{m,n}k=zm,n这个筛子进行投掷,生成单词wm,nw_{m,n}wm,n
LDA模型理解
LDA生成模型中,M篇文档会对应于M个独立的Dirchlet-Multionmial共轭分布。K个主题会生成K个独立的Dirichlet-Multionmial共轭结构。下面将分析LDA是如何被分解为M+K个Dirichlet-Multionmial共轭结构
第一个物理过程
此过程主要时需要获取θ→m\overrightarrow \theta_mθm,我们知道P(θ→m∣z→m,a→)∝P(θ→m∣a→)P(z→m∣θ→m)P(\overrightarrow \theta_m | \overrightarrow z_m,\overrightarrow a ) \propto P(\overrightarrow \theta_m|\overrightarrow a)P(\overrightarrow z_m| \overrightarrow \theta_m)P(θm∣zm,a)∝P(θm∣a)P(zm∣θm)因此我们可以对后面的数据进行优化,操作如下:
P(z→m∣a→)=∫θ→mP(z→m∣θ→m)P(θ→m∣a→)dθ→m=Δ(n→m+a→)Δ(a→)P(\overrightarrow z_m | \overrightarrow a ) = \int _{\overrightarrow \theta_m}P(\overrightarrow z_m |\overrightarrow \theta_m )P(\overrightarrow \theta_m|\overrightarrow a )d_{\overrightarrow \theta_m}=\frac{\Delta(\overrightarrow n_m+\overrightarrow a)}{\Delta(\overrightarrow a)}P(zm∣a)=∫θmP(zm∣θm)P(θm∣a)dθm=Δ(a)Δ(nm+a)
同时θ→m∽Dir(θ→m∣n→m+a→)\overrightarrow \theta_m \backsim Dir(\overrightarrow \theta_m|\overrightarrow n_m+\overrightarrow a)θm∽Dir(θm∣nm+a)且对整个词库而言满足以下公式:
P(z→∣α→)=∏m=1MP(z→m∣α→)=∏m=1MΔ(n→m+a→)Δ(a→)P(\overrightarrow z | \overrightarrow \alpha)=\prod_{m=1}^MP(\overrightarrow z_m | \overrightarrow \alpha)=\prod_{m=1}^M \frac{\Delta(\overrightarrow n_m+\overrightarrow a)}{\Delta(\overrightarrow a)}P(z∣α)=m=1∏MP(zm∣α)=m=1∏MΔ(a)Δ(nm+a)
注:n→m\overrightarrow n_mnm表示第m个文档中对应主题所形成的分布,即[n1,n2,⋯ ,nk]m[n_1,n_2,\cdots,n_k]_m[n1,n2,⋯,nk]m第二个物理过程
此过程主要获取φ→k\overrightarrow \varphi_kφk,我们知道P(φ→k∣w→(k),β→)∝P(φ→k∣β→)P(w→(k)∣φ→k)P(\overrightarrow \varphi_k | \overrightarrow w_{(k)},\overrightarrow \beta ) \propto P(\overrightarrow \varphi_k|\overrightarrow \beta)P(\overrightarrow w_{(k)}| \overrightarrow \varphi_k)P(φk∣w(k),β)∝P(φk∣β)P(w(k)∣φk),因此我们需要对后面的数据进行优化,操作如下:
P(w→(k)∣β→)=Δ(n→k+β→)Δ(β→)P(\overrightarrow w_{(k)}|\overrightarrow \beta)=\frac{\Delta(\overrightarrow n_k + \overrightarrow \beta)}{\Delta(\overrightarrow \beta)}P(w(k)∣β)=Δ(β)Δ(nk+β)
同时φ→k∽Dir(φ→k∣n→k+β→)\overrightarrow \varphi_k \backsim Dir(\overrightarrow \varphi_k|\overrightarrow n_k+\overrightarrow \beta)φk∽Dir(φk∣nk+β)对整个语料而言:
P(w→∣z→,β→)=∏k=1KΔ(n→k+β→)Δ(β→)P(\overrightarrow w | \overrightarrow z ,\overrightarrow \beta)= \prod_{k=1}^K\frac{\Delta(\overrightarrow n_k + \overrightarrow \beta)}{\Delta(\overrightarrow \beta)}P(w∣z,β)=k=1∏KΔ(β)Δ(nk+β)
注:n→k\overrightarrow n_knk表示第k个主题中word形成的分布,即[n1,n2,⋯ ,nN]k[n_1,n_2,\cdots,n_N]_k[n1,n2,⋯,nN]k综合有整个词库中主题、词的联合分布如下:
P(w→,z→∣α→,β→)=∏k=1KΔ(n→k+β→)Δ(β→)∏m=1MΔ(n→m+a→)Δ(a→)P(\overrightarrow w ,\overrightarrow z | \overrightarrow \alpha ,\overrightarrow \beta)=\prod_{k=1}^K\frac{\Delta(\overrightarrow n_k + \overrightarrow \beta)}{\Delta(\overrightarrow \beta)}\prod_{m=1}^M \frac{\Delta(\overrightarrow n_m+\overrightarrow a)}{\Delta(\overrightarrow a)}P(w,z∣α,β)=k=1∏KΔ(β)Δ(nk+β)m=1∏MΔ(a)Δ(nm+a)
使用Gibbs Sampling法求解P(z→∣w→)P(\overrightarrow z| \overrightarrow w)P(z∣w)
Gibbs采样需要进行用到P(zi=k,wi=t∣z→−i,w→−i)P(z_i=k,w_i=t|\overrightarrow z_{-i},\overrightarrow w_{-i})P(zi=k,wi=t∣z−i,w−i),因此需要以下推导:
有了联合分布p(w→,z→)p(\overrightarrow w, \overrightarrow z)p(w,z),则Gibbs Sampling就可以发挥作用了,语料库z→\overrightarrow zz中的第i个词对应的topic我们记为ziz_izi,其中i=(m,n)i=(m,n)i=(m,n)表示第m个文本的第n个词,其采样的分布如下:
P(zi=k,wi=t∣z→−i,w→−i)P(z_i=k,w_i=t|\overrightarrow z_{-i},\overrightarrow w_{-i})P(zi=k,wi=t∣z−i,w−i)
由于zi=k,wi=tz_i =k,w_i=tzi=k,wi=t只涉及到第m篇文档第k个topic,所以只会涉及到两个Dirichlet-Multinomial共轭结构:- a→→θ→m→z→m\overrightarrow a \rightarrow \overrightarrow \theta_m \rightarrow \overrightarrow z_ma→θm→zm
- β→→φ→k→w→(k)\overrightarrow \beta \rightarrow \overrightarrow \varphi_k \rightarrow \overrightarrow w_{(k)}β→φk→w(k)
减少了词的后验分布变为如下公式:
P(θ→m∣z→−i,w→−i)=Dir(θ→m∣n→m,−i+α→)P(\overrightarrow \theta_m|\overrightarrow z_{-i},\overrightarrow w_{-i}) = Dir(\overrightarrow \theta_m | \overrightarrow n_{m,-i}+\overrightarrow \alpha)P(θm∣z−i,w−i)=Dir(θm∣nm,−i+α)
P(φ→k∣z→−i,w→−i)=Dir(φ→k∣n→k,−i+β→)P(\overrightarrow \varphi_k|\overrightarrow z_{-i},\overrightarrow w_{-i}) = Dir(\overrightarrow \varphi_k | \overrightarrow n_{k,-i}+\overrightarrow \beta)P(φk∣z−i,w−i)=Dir(φk∣nk,−i+β)
则可以推导出:
P(zi=k∣z→−i,w→)∝∫p(zi=k,wi=t,θ→m,φ→k∣z→−i,w→−i)dθ→mdφ→k=nm,−ik+ak∑k=1K(nm,−ik+ak)nk,−it+βt∑t−1V(nk,−it+βt)P(z_i=k|\overrightarrow z_{-i},\overrightarrow w)\propto \int p(z_i=k,w_i=t,\overrightarrow \theta_m,\overrightarrow \varphi_k| \overrightarrow z_{-i},\overrightarrow w_{-i})d_{\overrightarrow \theta_m} d_{\overrightarrow \varphi_k}=\frac{n_{m,-i}^k+a_k}{\sum_{k=1}^K(n_{m,-i}^k+a_k)} \frac{n_{k,-i}^t+\beta_t}{\sum_{t-1}^V(n_{k,-i}^t+\beta_t)}P(zi=k∣z−i,w)∝∫p(zi=k,wi=t,θm,φk∣z−i,w−i)dθmdφk=∑k=1K(nm,−ik+ak)nm,−ik+ak∑t−1V(nk,−it+βt)nk,−it+βt采样过程
我们的目标如下:
- 估计模型中的参数φ→1,⋯ ,φ→K\overrightarrow \varphi_1,\cdots,\overrightarrow \varphi_Kφ1,⋯,φK和θ→1,⋯ ,θ→M\overrightarrow \theta_1,\cdots,\overrightarrow \theta_Mθ1,⋯,θM
- 对于新来的一篇文档d_{new},我们能够计算这篇文档的topic分布θ→new\overrightarrow \theta_{new}θnew
第一步需要训练LDA以估计参数φ→1,⋯ ,φ→K\overrightarrow \varphi_1,\cdots,\overrightarrow \varphi_Kφ1,⋯,φK和θ→1,⋯ ,θ→M\overrightarrow \theta_1,\cdots,\overrightarrow \theta_Mθ1,⋯,θM
- 随机初始化:对语料中每篇文档中的每个词www,随机的赋一个topci编号为zzz
- 重新扫描语料库,对每个词w,按照Gibbs Sampling公式重新采样它的topic,在语料库中重新更新;
- 重复以上语料库的重新采样过程直到Gibbs Sampling收敛
- 统计语料库的topic-word共现频率矩阵,该矩阵就是LDA的模型了
第二步为估计新文档的topic分布,此时我们认为Gibbs Sampling公式中的φ^kt\hat \varphi_{kt}φ^kt部分时稳定不变的,是由训练语料得到的模型提供的,所以采样过程中我们只需要估计该文档的topic部分的θ→new\overrightarrow \theta_{new}θnew
- 随机初始化:对当前文档中的每个词w,随机的赋值一个topic编号z
- 重新扫描当前文档,按照Gibbs Sampling公式,对每个词w,重新采样它的topic
- 重复以上过程直到Gibbs Sampling收敛
- 统计文档中的topic分布,该分配就是θ→new\overrightarrow \theta_{new}θnew
使用sklearn实现一个LDA算法
获取数据
from sklearn.datasets import fetch_20newsgroupsdataset = fetch_20newsgroups(shuffle=True,random_state=1,remove=('headers','footers','quotes'))n_samples = 2000data_samples = dataset.data[:n_samples]
文本处理
import nltkimport stringfrom nltk.corpus import stopwordsfrom nltk.stem.porter import PorterStemmerdef textPrecessing(text):#小写text = text.lower()#去除特殊标点for c in string.punctuation:text = text.replace(c,' ')#分词wordList = nltk.word_tokenize(text)#去除停用词filtered = [w for w in wordList if w not in stopwords.words('english')]#保留名词与特定POSrefiltered = nltk.pos_tag(filtered)filtered = [w for w,pos in refiltered if pos.startswith('NN')]#词干化ps = PorterStemmer()filtered = [ps.stem(w) for w in filtered]return ' '.join(filtered)docLst = []for desc in data_samples:docLst.append(textPrecessing(desc))
将数据存入文档
with open('./data.txt','w') as f:for line in docLst:f.write(line+'\n')
词频统计
from sklearn.feature_extraction.text import CountVectorizerfrom sklearn.externals import joblibtf_vectorizer = CountVectorizer(max_df=0.95,min_df=2,max_features=500,stop_words='english')tf = tf_vectorizer.fit_transform(docLst)joblib.dump(tf_vectorizer,'.\model.pck')
LDA训练
from sklearn.decomposition import LatentDirichletAllocationn_topics = 30lda = LatentDirichletAllocation(n_topics=n_topics,max_iter=50,learning_method='batch')lda.fit(tf)
结果展示
def print_top_words(model,feature_names,n_top_words):for topic_idx,topic in enumerate(model.components_):print('Topic #%d'%topic_idx)print(' '.join([feature_names[i] for i in topic.argsort()[: -n_top_words -1:-1]]))print(model.components_)n_top_words=20 tf_feature_names = tf_vectorizer.get_feature_names() print_top_words(lda,tf_feature_names,n_top_words)
狄利克雷分布、采样方法、主题模型相关推荐
- 【LDA】LDA主题模型笔记—主要是狄利克雷
d表示文章,z表示主题,w表示单词 这里意思是,狄利克雷先验分布 产生 一组 多项式分布集合 也就是说 狄利克雷分布 产生 主题分布 (也就是doc-topic分布)(超参数 α \alpha α情况 ...
- 主题模型综述:短文本、细粒度、加入先验知识、作者写作偏好、主题内涵随时间的变迁、融入词嵌入特性、语言模型加持
原文链接:https://www.zhihu.com/question/34801598/answer/765580727 主题模型当然有用咯,谁用谁知道!这次我来展示下它的7个"变种&qu ...
- 图示LDA主题模型(酒店评论数据演示)
LDA(Latent Dirichlet Allocation)主题建模是NLP确定文档主题方法,为无监督学习方法,当面对多个文档,能挖掘潜在的主题,类似于聚类方法,但又何聚类实质不一样,LDA从概率 ...
- 主题模型TopicModel:隐含狄利克雷分布LDA
http://blog.csdn.net/pipisorry/article/details/42649657 主题模型LDA简介 隐含狄利克雷分布简称LDA(Latent Dirichlet all ...
- 狄利克雷分布主题模型LDA
狄利克雷分布主题模型LDA 文章目录 狄利克雷分布主题模型LDA 1.整体把握LDA 2.前提知识 2.1 gamma函数 2.2 四个分布 2.2.1 二项分布 2.2.2 多项分布 2.2.3 B ...
- 无监督-主题模型(TM)/隐语义模型(LFM)(四):LDA(隐狄利克雷分布)【 数据(似然)(多项分布)+先验分布(狄雷分布)-> 后验分布(狄雷分布),后验分布作为下一轮的先验分布】【广泛使用】
一.LDA简介 1.概述01 LDA(Latent Dirichlet Allocation)模型是一种引入全概率模型的文本主题表示方法,其核心是:根据文本主题分布和主题词语分布的狄利克雷先验假设,结 ...
- 主题模型——隐含狄利克雷分布总结
LDA 1.主题模型LDA简介 2.基础知识 2.1贝叶公式 2.2 Gamma函数 2.3 四个分布 2.3.1 二项分布 2.3.2 多项分布 2.3.3 beta分布 2.3.4 Dirichl ...
- 自然语言处理之LDA:文本主题模型之隐含狄利克雷分布(LDA)
自然语言处理之LDA:文本主题模型之隐含狄利克雷分布(LDA) 一.朴素贝叶斯分析 二.PLSA模型 三. 基本函数知识 3.1 词袋模型 3.2 二项分布 3.3 多项分布 3.4 Gamma函数 ...
- 主题模型 LDA,Dirichlet分布 和朴素贝叶斯算法
主题模型 主题模型(topic model)是以非监督学习的方式对文集的隐含语义结构(latent semantic structure)进行聚类(clustering)的统计模型. 主题模型主要被用 ...
最新文章
- Unity Pro builder创建模块化仓库建筑学习教程
- 为什么使用单页应用_为什么我讨厌您的单页应用
- 学历高和学历低的眼界差距有多大?
- [中英对照]How PCI Works | PCI工作原理
- NGUI 3.5教程(二)Label 标签 (Hello world)、多行文本
- office word 开发
- 看懂堆排序——堆与堆排序(三)
- 实用程序类的OOP替代
- 高级程序员如何面对职场压力?(2)--受伤的总是我
- DDD领域模型自动生成?
- POJ-2456.Aggressivecows.(二分求解最大化最小值)
- Yii --Command 任务处理
- 8.5 输入输出重定向
- IDEA Tomcat控制台中文乱码
- C#控制台应用程序执行结果一闪而过的解决方法
- linux安装eclipse教程,Linux下的Eclipse安装
- 苹果公司发布iPhone 5s和iPhone 5c
- Android 9.0 蓝牙电话BluetoothHeadsetClient
- 什么是根服务器?我国的根服务器发展如何?
- 判断是否为Debug模式
热门文章
- 控件注册失败解决方案
- 俞敏洪:给参与新东方年会上diss老板节目的员工奖励12万
- web程序员的正确表白方式 制作粉色少女系列 生日快乐祝福网页(HTML+CSS+JS)
- Windows 2012 Server VMtools安装过程
- 操作系统的分类(科普)
- linux下 文件排序,如何在Linux中对文件进行排序 (GUI和Shell)
- 解决 element ui 本地使用 引入 图标不显示 .ttf和.woff 报错问题
- 自动化测试脚本的编写规范
- 网络层 ARP地址解析协议
- TC8:IPv4_FRAGMENTS_01-05