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

写在前面:

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

一. PlSA模型

1. 概念

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

2.概率图模型

PLSA的概率图模型如下所示:
在这里插入图片描述

  • 其中 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( d i d_i di) 的概率选择一个文档 d i d_i di
以 p( z k z_k zk| d i d_i di) 的概率选择一个主题 z k z_k zk
以 p( w j w_j wj| z k z_k zk) 的概率生成一个单词 w j w_j wj

  • 根据图模型,可以得到观测数据的联合分布:
    在这里插入图片描述
    第一个等式是对三者的联合概率分布对其中的隐藏变量 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
  • 从主题的多项式分布 θ i \theta_i θi 中取样生成文档i第 j 个词的主题 z i , j z_{i,j} zi,j
  • 从狄利克雷分布 β \beta β中取样生成主题 z i , j z_{i,j} zi,j对应的词语分布 Φ z i , j \Phi_{z{i,j}} Φzi,j
  • 从词语的多项式分布 Φ z i , j \Phi_{z{i,j}} Φzi,j中采样最终生成词语 w i , j w_{i,j} wi,j
    其中,类似Beta分布是二项式分布的共轭先验概率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验概率分布

LDA的图模型结构如下图所示(类似贝叶斯网络结构):
在这里插入图片描述

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.csdn.net/v_july_v/article/details/41209515
https://zhuanlan.zhihu.com/p/31470216
https://www.cnblogs.com/pinard/p/6831308.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值