Datawhale | 自然语言处理(7)——主题模型

写在前面:

本文只是简要的介绍了一下LDA模型的概念和一些整体上的认识,没有涉及到具体的公式推导,目前只是按照助教的建议大致梳理一下,后期肯定还要花大时间推导公式仔细理解该模型,感兴趣的可以参考后面的博客,总结的很详细,看完后受益匪浅。

一. PlSA模型

1. 概念

  • pLSA 模型是有向图模型,将主题作为隐变量,构建了一个简单的贝叶斯网,采用EM算法估计模型参数
  • 在语义分析问题中,存在同义词和一词多义这两个严峻的问题,LSA可以很好的解决同义词问题,却无法妥善处理一词多义问题。PLSA则可以同时解决这两个问题

2.概率图模型

PLSA的概率图模型如下所示:
Datawhale | 自然语言处理(7)——主题模型

  • 其中 D 表示文档(document),Z 表示主题(topic), W 表示单词(word),其中箭头表示了变量间的依赖关系,比如 D 指向 Z,表示一篇文档决定了该文档的主题,Z 指向 W 表示由该主题生成一个单词,方框右下角的字母表示该方框执行的次数,N 表示共生成了 N 篇文档,M 表示一篇文档按照document-topic分布生成了 M 次主题,每一次按照生成的主题的topic-word分布生成单词。每个文档的单词数可以不同。
  • PLSA引入了隐藏变量 Z,认为 {D,W,Z} 表示完整的数据集(the complete data set), 而原始的真实数据集 {D,W} 是不完整的数据集(incomplete data)。
  • 假设 Z 的取值共有 K 个。PLSA模型假设的文档生成过程如下:

以 p(did_i) 的概率选择一个文档did_i
以 p(zkz_k|did_i) 的概率选择一个主题 zkz_k
以 p(wjw_j|zkz_k) 的概率生成一个单词 wjw_j

  • 根据图模型,可以得到观测数据的联合分布:
    Datawhale | 自然语言处理(7)——主题模型
    第一个等式是对三者的联合概率分布对其中的隐藏变量 Z 的所有取值累加,第二个等式根据图模型的依赖关系将联合概率展开为条件概率,第三个等式只是简单的乘法结合律。这样就计算出了第 i 篇文档与第 j 个单词的联合概率分布。

二. 共轭先验分布

1. 基本概率分布

  • 概率论中有两大学派,分别是频率学派和贝叶斯学派。先验概率,后验概率,共轭分布和共轭先验是贝叶斯学派中的几个概念。二者的区别是贝叶斯学派认为分布存在先验分布和后验分布的不同,而频率学派则认为一个事件的概率只有一个。
  • 基本概率分布主要有以下几种:

先验分布(prior probability)
后验分布(posterior probability)
似然函数(likelyhood function)
共轭分布(conjugacy)

2. 共轭分布

  • 共轭分布就是后验概率分布函数与先验概率分布函数具有相同形式
  • 采用共轭先验的原因是可以使得先验分布和后验分布的形式相同,这样一方面合符人的直观(它们应该是相同形式的)另外一方面是可以形成一个先验链,即现在的后验分布可以作为下一次计算的先验分布,如果形式相同,就可以形成一个链条。
  • 如果先验分布和似然函数可以使得先验分布和后验分布(posterior distributions)有相同的形式,那么就称先验分布与似然函数是共轭的。所以,共轭是指的先验分布(prior probability distribution)和似然函数(likelihood function)。如果某个随机变量Θ的后验概率 p(θ|x)和气先验概率p(θ)属于同一个分布簇的,那么称p(θ|x)和p(θ)为共轭分布,同时,也称p(θ)为似然函数p(x|θ)的共轭先验。

三. LDA主题模型

1.原理

在LDA模型中,一篇文档生成的方式如下:

  • 从狄利克雷分布中α\alpha 取样生成文档 i 的主题分布θi\theta_i
  • 从主题的多项式分布θi\theta_i 中取样生成文档i第 j 个词的主题zi,jz_{i,j}
  • 从狄利克雷分布β\beta中取样生成主题zi,jz_{i,j}对应的词语分布Φzi,j\Phi_{z{i,j}}
  • 从词语的多项式分布Φzi,j\Phi_{z{i,j}}中采样最终生成词语wi,jw_{i,j}
    其中,类似Beta分布是二项式分布的共轭先验概率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验概率分布

LDA的图模型结构如下图所示(类似贝叶斯网络结构):
Datawhale | 自然语言处理(7)——主题模型

2.学习步骤

  • 一个函数:gamma函数
  • 四个分布:二项分布、多项分布、beta分布、Dirichlet分布
  • 一个概念和一个理念:共轭先验和贝叶斯框架
  • 两个模型:pLSA、LDA
  • 一个采样:Gibbs采样

3.应用场景

  • 特征生成:LDA可以生成特征供其他机器学习算法使用。
  • 在推荐系统中的应用
  • 降维:每篇文章在主题上的分布提供了一个文章的简洁总结。
  • 在关键词提取的应用
  • 中文标签/话题提取/推荐
  • LDA相似文章聚类
  • 文本挖掘中主题追踪的可视化呈现
  • 高效的主题模型的建立
  • 排序

4.优缺点

4.1 优点

  • 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识
  • LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

4.2 缺点

  • LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
  • LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。
  • LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。
  • LDA可能过度拟合数据

5.参数学习

LDA在sklearn中,sklearn.decomposition.LatentDirichletAllocation()
主要参数:

n_components : int, optional (default=10)
    主题数

doc_topic_prior : float, optional (default=None)
    文档主题先验Dirichlet分布θd的参数α

topic_word_prior : float, optional (default=None)
    主题词先验Dirichlet分布βk的参数η

learning_method : 'batch' | 'online', default='online'
    LDA的求解算法。有 ‘batch’ 和 ‘online’两种选择

learning_decay : float, optional (default=0.7)
   控制"online"算法的学习率,默认是0.7

learning_offset : float, optional (default=10.)
    仅在算法使用"online"时有意义,取值要大于1。用来减小前面训练样本批次对最终模型的影响
    
max_iter : integer, optional (default=10)
    EM算法的最大迭代次数

batch_size : int, optional (default=128)
   仅在算法使用"online"时有意义, 即每次EM算法迭代时使用的文档样本的数量。

evaluate_every : int, optional (default=0)
    多久评估一次perplexity。仅用于`fit`方法。将其设置为0或负数以不评估perplexity
     训练。
     
total_samples : int, optional (default=1e6)
    仅在算法使用"online"时有意义, 即分步训练时每一批文档样本的数量。在使用partial_fit函数时需要。

perp_tol : float, optional (default=1e-1)
    batch的perplexity容忍度。

mean_change_tol : float, optional (default=1e-3)
    即E步更新变分参数的阈值,所有变分参数更新小于阈值则E步结束,转入M步。

max_doc_update_iter : int (default=100)
    即E步更新变分参数的最大迭代次数,如果E步迭代次数达到阈值,则转入M步。

n_jobs : int, optional (default=1)
   在E步中使用的资源数量。 如果为-1,则使用所有CPU。
     ``n_jobs``低于-1,(n_cpus + 1 + n_jobs)被使用。

verbose : int, optional (default=0)
    详细程度。

总结的比较好的博客:
https://blog.****.net/v_july_v/article/details/41209515
https://zhuanlan.zhihu.com/p/31470216
https://www.cnblogs.com/pinard/p/6831308.html