发布于 

【笔记】生成模型基础与应用 - 第3章

C3 主题模型:主题模型是一类用于文本分析的非监督学习方法,旨在从文本数据中发现隐藏的主题结构…

C3 主题模型

Topic models:以非监督学习的方式对文本的隐含结构进行发现或生成的模型

主题模型是一类用于文本分析的非监督学习方法,旨在从文本数据中发现隐藏的主题结构。这些主题模型的目标是识别文本集合中的主题,而无需事先标记的主题标签或监督信息。主题模型最常见的应用之一是用于文本数据的主题建模,其中文档被看作是多个主题的混合,而每个主题又由一组词汇表示。

主题模型的发展:

  • LSA
  • PLSA
  • LDA 2003
  • HDP 2005

单词向量空间

  • 将文档中每个单词的出现的频数(或加权的频数)表示为向量
    • 可以事先定义 有效单词语料库,只提取文档中有效单词的出现频率生成向量(也可以视为不在语料库中的单词其权值为0),所有的语料库中的有效单词用集合W表示
    • 一个文档就表示成:d=(fw1,fw2,....,fwN)d=(f_{w_1},f_{w_2},....,f_{w_N}),每个fif_i都是有效单词ii出现的次数
  • 一个文档集中的所有文档(设一共有N个文档组成了集合D)组成了一个向量集合,即 单词向量空间
  • 对于两个不同的文档di, djd_i,\ d_j,可以使用它们之间的数学度量,来表示文本之间的语义相似度:
    • 计算方法可以为 文档向量的 内积标准化内积
  • 单词向量空间的表示方法:
    • 1、单词-文本矩阵:将单词在每个文档的出现频率向量作为列向量,组成的矩阵。通常为稀疏矩阵

单词-文本矩阵的例子:

  - 计算机处理稀疏矩阵,非常浪费算力,因此,需要一个等价的数据结构来表示相同给信息,于是提出了下面这种表示方法。
  • 2、单词频率-逆文本频率(TF-IDF): 统计单词wiw_i在文本dkd_k中出现的权值 :

TFIDF(wi,dk)=f(wi,dk)len(dk)logNdf(wi)TF-IDF(w_i,d_k) = \frac{f(w_i,d_k)}{len(d_k)}log\frac{N}{df(w_i)}

     - tf(w,b):单词w在文本b中的出现频数
     - len(b):文本b中的单词总数
     - df(w):整个文本集合中,含有单词w的文本数
     - N:整个文本集合的大小(含有的文本数量)

单词向量空间的优缺点优点:模型简单、计算效率高缺点:内积计算的相似度不一定能准确表达两个文档间的相似度

话题向量空间

  • 定义话题:假设所有的文本中一共含有K个话题
  • 假设每个话题都是一个M维度的向量tttt由语料库(集合W)中的M个单词组成。

t=(w1,w2,...,wM)Tt = (w_1,w_2,...,w_M)^T

  • 这样,一共K个话题就组成了一个话题向量空间,记为T=[t1,t2,...,tk]=[w11 w12... wMK]T = [t_1,t_2,...,t_k]=[w_{11}\ w_{12} ... \ w_{MK}]【单词-话题矩阵】
  • 根据单词向量空间的定义,可以推导出:
    • 假设一篇文本xx在单词向量空间中被表示为:x=(fw1,fw2,....,fwN)x = (f_{w_1},f_{w_2},....,f_{w_N}),而在话题空间中被表示为:$$y = g(x) = (f_{t_1},f_{t_2},…,f_{t_k})$$
    • 为了方便,我们将话题的出现频率 记为ft1=y1,ft2=y2...f_{t_1} = y_1, f_{t_2} = y_2...这样,一个文档x,它可以表示为所有话题和单词的线性组合:

x=t1y1+t2y2+...tkykx = t_1y_1 + t_2y_2 + ... t_ky_k

  • 如果我们定义话题-文本矩阵Y,即将每个话题表示的文本yy组合起来,则由上述的线性组合关系,对整个文档集合D,即可由话题向量空间的 话题矩阵T 来表示。
  • 因此,单词-文本矩阵单词-话题矩阵话题-文本矩阵具有如下的关系:

XMN=TMKYKNX_{MN} = T_{MK}Y_{KN}

潜在语义分析即是 将文本在 单词向量空间的表示 通过 线性变换 转换为** 在话题向量空间中的表示**的方法

期望最大化算法

在讲潜在语义分析之前,必须要了解一下什么是贝叶斯概率模型的潜变量,以及对潜变量模型的估计算法。期望最大化算法(Exception Maximization Algorithm,简称EM算法)是一种启发式的迭代算法,用于对含有隐变量的概率模型 的参数做 极大似然估计

假设我们有这样一个概率模型:

  • 有三枚硬币A,B,CA,B,C,抛掷它们正面朝上的概率不同,记为r,p,qr,p,q
  • 重复执行以下试验(Ex(X)表示对事件X做一次实验,1表示正面向上,0表示反面向上):

Ex(Y)=Ex(B) if Ex(A)==1 else Ex(C)Ex(Y)= Ex(B) \ if \ Ex(A)==1 \ else \ Ex(C)

  • 即抛硬币A,如果是正面抛硬币B,否则抛硬币C,你只能观测到最后一次抛掷硬币的结果
  • 那么如何估计三个参数r,p,qr,p,q呢?
  • 因为这个随机事件包含两个概率模型的 复合。因此我们无法直接对结果建模,数学家们由此提出,能否加入“隐变量ZZ
    • 用它来表示试验中抛掷A硬币的中间结果(虽然我们并不能直接观测到),假设共抛了n次,第i次观测结果的值记作ziz_i
      -假设我们只看最终结果Y,将参数表示为向量θ=(r,p,q)\theta = (r,p,q),则实际要观测的事件Y的似然可以表示为:

P(Yθ)=P(Y,Zθ)=i=1nP(yi,ziθ)=i=1nP(ziθ)P(yizi,θ)=rp(yi=1)(1p)(yi=0)+(1r)q(yi=1)(1q)(yi=0)P(Y|\theta) = P(Y,Z|\theta)= \sum_{i=1}^{n}P(y_i,z_i|\theta) = \sum_{i=1}^{n}P(z_i|\theta)P(y_i|z_i,\theta) \\= rp^{\sum(y_i=1)}(1-p)^{\sum(y_i=0)}+(1-r)q^{\sum(y_i=1)}(1-q)^{\sum(y_i=0)}

直接使用MLE估计这个似然函数?不行,包含三个未知变量,且需要求log和的极大值,算不出解析解。

既然没有准确的解析解,数学家于是提出了用迭代法逼近最大值的求解办法,这就是EM算法。我们先定义好两种情况的似然函数,既然要求极大似然,我们对似然函数直接取log,定义对数似然函数

  • 不将隐变量Z视为随机变量的情况【称为:不完全数据】

LY(θ)=log[i=1nP(yiθ)]=i=1nlog[zi Ex(Z)P(yi,ziθ)]L_Y(\theta) = log[\prod_{i=1}^nP(y_i|\theta)] = \sum_{i=1}^nlog[\sum_{z_i \in \ Ex(Z)}P(y_i,z_i|\theta)]

  • 将隐变量Z视为随机变量的情况【称为:完全数据】

LY,Z(θ)=log[i=1nP(yi,ziθ)]=i=1nlog[P(yi,ziθ)]L_{Y,Z}(\theta) = log[\prod_{i=1}^nP(y_i,z_i|\theta)] = \sum_{i=1}^nlog[P(y_i,z_i|\theta)]

我们假设θ\theta从一个初始值θ0\theta_0开始,每次迭代的时候更新(下标+1),那么我们希望 在已知观测结果Y的情况下,让完全数据的对数似然函数LY,Z(θ)L_{Y,Z}(\theta)尽可能取得最大的期望,由此定义Q函数:

Q(θ,θt)=E[LY,Z(θ)Y,θt]=zi Ex(Z)P(ZY,θt)log[P(Y,Zθ)]Q(\theta,\theta_t) = E[L_{Y,Z}(\theta)|Y,\theta_t] = \sum_{z_i \in \ Ex(Z)}{P(Z|Y,\theta_t)log[P(Y,Z|\theta)]}

其中,θt\theta_t是第t步更新的参数,Q是关于θ\theta的函数,让它最大,则需要对θ\theta求偏导,并取导数为0。此时θt\theta_t取一个新值,即:

\theta_{t+1} = argmax_\theta{Q(\theta,\theta_t)} $$【MLE】 这是采用极大似然估计的方法,如果你说要考虑先验概率(即MAP方法),那么每次更新是需要加上先验函数的对数值:

\theta_{t+1} = argmax_\theta{Q(\theta,\theta_t)} + logP(\theta)

【MAP】 > 现在我们试着对刚才的问题应用EM算法: > - 先假设$\theta^{(0)} = (0.5,0.5,0.5)$(为了下标不打架,我们用上括号标记步数t) > - 则$P(Z|Y,\theta_t)$表示: > - 假设第$i$次的最终**观测结果是**$y_i(=1 \ or\ 0)$**,这个结果是由 抛硬币B**$(z_i=1)$** 还是 抛硬币C**$(z_i=0)$** 得到的概率,将其记为**$p_i$**,**我们可用直接以伯努利实验的结果计算: > $p_i = \frac{P(y_i,z_i=1)}{P(y_i,z_i=0)+P(y_i,z_i=1)}=\frac{rp}{rp+(1-r)q}(y_i=1) \ or \ \frac{r(1-p)}{r(1-p)+(1-r)(1-q)}(y_i=0)$**【对于每一步i】** > - **然后求其关于Z的期望,即:** > $$Q(\theta) = \sum_{i=1}^{n}p_i\log[P(y_i=1,Z|\theta)] + (1-p_i)\log[P(y_i=0,Z|\theta)]

  • 注意:pip_i与每一步要更新的θt\theta_t有关,因此其表示为的r,p,qr,p,q**也需要每一步更新。**而log[P(Y,Zθ)]log[P(Y,Z|\theta)]则直接表示为上述的似然函数,注意它与要逼近的θt\theta_t无关,可以直接表示为r,p,qr,p,q的式子,故:

Q(θ,θt)=i=1npi(t1)log[rpyi(1p)1yi]+(1pi(t1))log[(1r)qyi(1q)1yi]Q(\theta,\theta_t)=\sum_{i=1}^{n}p_i^{(t-1)}\log[rp^{y_i}(1-p)^{1-y_i}] + (1-p_i^{(t-1)})\log[(1-r)q^{y_i}(1-q)^{1-y_i}]

  • 对该函数的r,p,qr,p,q分别求偏导,即可得到:

r(t+1)=i=1npi(t)nr^{(t+1)} = \frac{\sum_{i=1}^{n}p_i^{(t)}}{n}

p(t+1)=i=1npi(t)yii=1npi(t)p^{(t+1)} = \frac{\sum_{i=1}^{n}p_i^{(t)}y_i}{\sum_{i=1}^{n}p_i^{(t)}}

q(t+1)=i=1n(1pi(t))yii=1n(1pi(t))q^{(t+1)} = \frac{\sum_{i=1}^{n}(1-p_i^{(t)})y_i}{\sum_{i=1}^{n}(1-p_i^{(t)})}

问题: 为什么EM算法能近似实现对观测数据 的极大似然估计? 答:可以通过数学证明:可以通过L(θ)L(\theta)函数构造Q函数,当作为中间函数时,可以证明在迭代过程中极大对数似然函数L(θ)L(\theta)的下界单调增加,即:L(θt+1)L(θt)L(\theta_{t+1}) \geq L(\theta_t)

证明就省略啦~

概率潜在语义分析(PLSA)

是一种利用概率生成模型 对 文本集合进行话题分析的 无监督学习方法 假设:

  • 每个文本由一个话题的分布决定
  • 每个话题由一个单词的分布决定
  • 因此,从给定文本的表示到生成单词,就是一个概率模型,其中话题是隐变量

举个例子:假设一个离散空间中,【话题】和其对应的单词的概率分布如下:
【教育】 = {大学:0.5,老师:0.3,课程:0.2 }
【经济】 = {市场:0.4,企业:0.2,金融:0.4}
【交通】 = {高铁:0.5,汽车:0.2,飞机:0.3}
而对于一个挖了空位的文本,其每个位置对应话题的概率分布如下:
D(xx场景下如何看待xx和xx的关系) = {教育:0.5,经济:0.3,交通:0.2}
那么,生成 “大学场景下如何看待大学企业的关系”的概率 是:
[P(t=教育)P(w=大学t=教育)]2×P(t=经济)P(w=企业t=经济)=0.00375[P( t = 教育 )P(w = 大学|t = 教育) ]^2× \\P(t = 经济) P(w = 企业 |t = 经济 ) =0.00375

假设文本的集合是D={d1,d2,...,dN}D=\{d_1,d_2,...,d_N\}单词的集合是:W={w1,w2,...,wM}W=\{w_1,w_2,...,w_M\}话题的集合是:Z={z1,z2,...,zK}Z=\{z_1,z_2,...,z_K\}我们可以看到,在求文本的生成分布时,涉及到以下的条件概率:P(zd)P(z|d): 已知文本d,生成话题z的概率,是一个多项分布P(wz)P(w|z): 已知话题z,生成单词w的概率,也是一个多项分布P(d)P(d)表示从所有文本集合中,随机选取一个文本的d的概率

现在我们希望知道,给定(单词,文本)对,它在这个空间中的生成的概率,即:

P(X)=(w,d)  W×DP(w,d)cnt(w,d)P(X) = \prod_{(w,d)\ \in \ W×D} P(w,d)^{cnt(w,d)}

,其中所有的(w,d)(w,d)对应该有N×L(文本数×每个文本中要填空的单词数)个根据上面例子的思想,对于每个(w,d)(w,d)对,其生成概率又可以用隐变量写为:

P(w,d)=P(d)P(wd)=P(d)z  ZP(w,zd)=P(d)z  ZP(zd)P(wz)P(w,d) = P(d)P(w|d) = P(d) \sum_{z\ \in \ Z}P(w,z|d) = P(d) \sum_{z \ \in \ Z}P(z|d)P(w|z)

于是我们可以建立模型,对P(zd)P(z|d)P(wz)P(w|z)分别进行估计,得到了这样的单层隐变量网络,即PLSA:

其中左侧的参数量是 NK,右侧为MK

现实中K远小于M,所以PLSA通过话题 对数据进行了更简洁地表示,减少了学习过程中过拟合的可能性

继续使用极大似然估计的方法,试图求出让P(X)最大时的参数,取对数似然(下面的公式推导中,我们省略了长度是O(NK+MK)O(NK+MK)的参数向量θ,不然就太长了太难读了QAQ):

LW,Z,D=log(w,d)  W×DP(w,d)cnt(w,d)=logi=1Mj=1NP(wi,dj)cnt(wi,dj)=i=1Mj=1Ncnt(wi,dj)logP(wi,dj)=i=1Mj=1Ncnt(wi,dj)[logP(dj)+logk=1KP(wizk)P(zkdj)]L_{W,Z,D} = log\prod_{(w,d)\ \in \ W×D} P(w,d)^{cnt(w,d)} \\ = log \prod_{i=1}^M \prod_{j=1}^NP(w_i,d_j)^{cnt(w_i,d_j)} \\ = \sum_{i=1}^M\sum_{j=1}^Ncnt(w_i,d_j)logP(w_i,d_j) \\ = \sum_{i=1}^M\sum_{j=1}^Ncnt(w_i,d_j)[logP(d_j) + log \sum_{k=1}^KP(w_i|z_k)P(z_k|d_j)]

仍然是非常难计算,因此要使用上一节介绍的EM估计算法,为此我们计算Q函数。上面的似然函数LW,Z,DL_{W,Z,D}已经是一个【完全数据】,隐藏变量Z被视为与W,D并列的随机变量。因此Q函数是每个(w,d)(w,d)对为条件下,LW,Z,DL_{W,Z,D}的期望,即:

Q=P(zkwi,dj)[k=1Ki=1Mj=1Ncnt(wi,dj)logP(wi,dj,zk)]Q = P(z_k|w_i,d_j)[\sum_{k=1}^K\sum_{i=1}^M\sum_{j=1}^Ncnt(w_i,d_j)logP(w_i,d_j,z_k)]

其中,$$P(w_i,d_j,z_k) = P(d_j)P(w_i|z_k)P(z_k|d_j)$$
就是按照“链式法则”生成一堆单词文本的联合概率,而P(zkwi,dj)P(z_k|w_i,d_j)则是隐藏变量Z不被视为条件的分布概率【不完全数据】,即:

P(zkwi,dj)=P(wizk)P(zkdj)k=1KP(wizk)P(zkdj)P(z_k|w_i,d_j) = \frac{P(w_i|z_k)P(z_k|d_j)}{\sum_{k=1}^KP(w_i|z_k)P(z_k|d_j)}

这样,我们可以发现,要每一步更新的参数其实是P(wizk)P(w_i|z_k)P(zkdj)P(z_k|d_j)
因为我们已经有一个数据集,P(dj)P(d_j)的值(即先验)可以直接由统计方法估计出来,cnt函数(即哪些对实际在数据集中同时出现了也是可以统计的已知量)。因此,EM近似的步骤为:

  • 对于每个下标对(i,k)和(k,j),分别求P(wizk)P(w_i|z_k)P(zkdj)P(z_k|d_j)的偏导数(第一步时为每个概率取初始值(如均匀分布),只要满足概率和为1即可)
  • 然后将导数为0的值求出来,更新(i,k)和(k,j)对应参数向量的元素
  • 取 k=k+1,求下一步的不完全数据,直到收敛

在用统计估计P(dj)P(d_j)后,局部最优解的结果经过推导是:

PLSA的方法仍然胜在离散空间,计算复杂度低,可以快速迭代,但存在一个很重要的缺点:因为所学习的参数不仅依赖于单词库W,还依赖于文档数据集D,所有其可以生成其所在数据集的文档的模型,但却不能生成新文档的模型

潜在狄利克雷分布(LDA)

在对PLSA建模时,我们发现一个规律: 文本由话题的一个多项分布表示话题也由单词的一个多项分布表示

以防你忘了我们在C1中介绍的多项分布,补充一下完整定义:

这不巧了嘛,我们在C2中提到,多项分布的贝叶斯生成模型,可以用 狄利克雷分布 作为先验。因此,可以假设 话题分布 和 单词分布 的先验都是 狄利克雷分布:

  • 对于每个文本dmd_m,假设d中包含的单词组成了向量dm=wm (m=1,2,...,M)d_m = \bold w_m \ (m=1,2,...,M),认为生成该文本话题的概率P(zwm)=θmDir(α)P(z|\bold w_m) = \theta_m \sim Dir(\alpha)
    • θm\theta_m参数向量有K个值,每个值表示文本dmd_m能生成对应话题z1,z2,...,zkz_1,z_2,...,z_k的概率
    • 因此,超参数α\alpha也是一个K维向量
  • 注意,在这里我们为了对每个单词写出一个话题分布,将文本的定义改成了单词组成的向量。因此代表文本集中的文本数量的常量不再是NN,而是MM。用Ni(i=1,2,...,M)N_i(i=1,2,...,M)来表示一个文本中的单词总数。而下面的部分中,我们假设整个单词库中的单词总数是VV
  • 对于每个话题zk (k=1,2,...,K)z_k\ (k=1,2,...,K),认为生成相应单词的概率P(wzk)=ϕkDir(β)P(w|z_k) = \phi_k \sim Dir(\beta)
  • 而对于每个单词wm[n]wm (n=1,2,...,Nm)w_m[n] \in \bold w_m \ (n=1,2,...,N_m),其对应的话题和单词都链式地服从多项分布:
    • zm[n]Mult(θm)z_m[n] \sim Mult(\theta_m):先随机根据概率生成一个话题序列
    • wm[n]Mult(ϕzm[n])w_m[n] \sim Mult(\phi_{z_m[n]}),再对每个话题,随机生成一个单词序列,共生成m个

在这个定义下,我们可以直接得到所有先验的表示,因此,可以使用最大后验概率估计MAP来求解参数,记住在这里w是观测量,z是隐变量,因此后验是已知观测量算隐变量的概率:文本w的后验=P(θ,zw,α,β)=P(w,z,θ,ϕα,β)P(wα,β)文本w的后验=P(\bold{\theta}, \bold z|\bold w, \alpha,\beta) = \frac{P(\bold w,\bold z,\theta,\phi|\alpha,\beta)}{P(\bold w|\alpha,\beta)}然后,就像PLSA方法一样,根据向量的嵌套定义把概率计算拆成每个元素概率的乘积,式子很长,直接贴一下结果吧:

自然,想对这种玩意求解析最大值,和自杀没什么区别。不过,既然这次我们估计的是后验概率分布,概率论中可以以 变分推断 的方法来处理

变分推断

所谓变分推断,是取一个用隐变量z的分布q(z)q(z)来近似后验概率的条件分布p(zx)p(z|x)的方法。为了比较二者的分布相似度,使用KL散度来计量:

  • 如果能找到与p(zx)p(z|x)在KL散度意义下最近的分布 q^(z)\hat q(z),则可以用这个分布近似后验概率分布

带入KL散度的公式:

则,如果想要KL散度更小,必有

log p(x)Eq[log p(x,z)]Eq[log q(z)]log\ p(x) \geq E_q[log\ p(x,z)] - E_q[log\ q(z)]

因为先验x的分布log p(x)log\ p(x)可以被视为常量,因此右侧关于q分布的期望式越大,KL散度就越小。数学上把右侧称为证据下界。因此,下面问题就变为求证据下界的最大化。还有一个假设,是对于隐变量z(向量),假设分布q(z)q(z)对 z 的所有分量都是独立的,即:

q(z)=q(z1)q(z2),...,q(zm)q(z) = q(z_1)q(z_2),...,q(z_m)

称其为平均场。

现在让我们回到LDA模型的最大后验概率估计,现在我们有了变分推断算法,可以定义“文本w的后验” 的证据下界:

L(r,t,α,ϕ)=Eq[log p(z,w)]Eq[log q(z)]=Eq[log p(θ,z,wα,ϕ)]Eq[log q(θ,zr,t)]L(r,t,\alpha,\phi) = E_q[log\ p(\bold z, \bold w)] -E_q[log\ q(\bold z)]\\ = E_q[log\ p(\theta,\bold z, \bold w| \alpha,\phi)] -E_q[log\ q(\theta,\bold z|r,t)]

其中,向量r和t是变分参数,r来估计隐变量z在单词向量中的分布参数θ\theta,t来估计话题向量中的分布参数(z1,z2,...,zn)(z_1,z_2,...,z_n)有了平均场假设,就可以对每个文本分来计算,得到所有文本的证据下界:

L(r,t,α,ϕ)=m=1MEq[log p(θm,zm,wmαm,ϕm)]Eq[log q(θm,zmrm,tm)]L'(r,t,\alpha,\phi) =\sum_{m=1}^M{ E_q[log\ p(\theta_m,\bold z_m, \bold w_m| \alpha_m,\phi_m)] -E_q[log\ q(\theta_m,\bold z_m|r_m,t_m)]}

此时我们发现它也是一个 离散的期望最大化估计 问题了,可以使用第二节提到的 EM算法来迭代更新参数,此时有四个参数向量,两个是为了变分推断引入的,另外两个则为模型建立的狄利克雷分布参数。

注意,实际上狄利克雷分布的参数是αβ\alpha 、\beta,不过因为话题的分布参数ϕ\phi可以直接由参数β\beta根据话题数 k 得到,因此这里简化一下模型,直接估计参数向量ϕ\phi

这种方法被综合称为 **变分EM算法**

LDA和PLSA的比较

  • 相同点:都将 话题建模为单词的多项分布,文本建模为话题的多项分布
  • 不同点:
    • PLSA没有使用先验分布( 或者说假设先验分布是均匀分布 ),使用MLE估计。
    • 而LDA假设了狄利克雷分布作为先验分布,且使用MAP估计。
      • 有先验分布的好处和C2中提到的一样,可以防止过拟合问题

本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。