• 机器学习笔记19-----LDA主题模型(重点理解LDA的建模过程)


    1.主题模型主要内容及其应用

    (1)主要内容

    (2)主要应用

    2.共轭先验分布

    3.Dirichlet分布(狄利克雷分布)

    4.LDA的介绍

     LDA 在主题模型中占有非常重要的地位,常用来文本分类。LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,用来推测文档的主题分布。它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题分布后,便可以根据主题分布进行主题聚类或文本分类。

    主题模型,它称作为:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),是一种概率主题模型。 

    主题模型 就是一种自动分析每个文档,统计文档中的词语,根据统计的信息判断当前文档包含哪些主题以及各个主题所占比例各为多少

    LDA 主题模型要干的事就是:根据给定的一篇文档,反推其主题分布

    主题模型 是对文本中 隐含主题 的一种建模方法,每个主题其实是词表上单词的概率分布;主题模型是一种生成模型,一篇文章中每个词都是通过“以一定概率选择某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的

    LDA运行完会得到主题分布(θ)、词分布(Φ)

    (1)LDA是一个生成模型,下面介绍LDA生成文档的过程

    LDA 主题模型的生成过程图模型结构如下图所示:

    5.PLSA模型

    PLSA模型 是最接近 LDA模型,所以理解PLSA模型有助于我们理解 LDA模型

    (1)pLSA模型下生成文档过程

    第一步:

      假设你每写一篇文档会制作一颗K面的“文档-主题”骰子(扔此骰子能得到K个主题中的任意一个),和K个V面的“主题-词项” 骰子(每个骰子对应一个主题,K个骰子对应之前的K个主题,且骰子的每一面对应要选择的词项,V个面对应着V个可选的词)。

    例子:

      比如可令K=3,即制作1个含有3个主题的“文档-主题”骰子,这3个主题可以是:教育、经济、交通。然后令V = 3,制作3个有着3面的“主题-词项”骰子,其中,教育主题骰子的3个面上的词可以是:大学、老师、课程,经济主题骰子的3个面上的词可以是:市场、企业、金融,交通主题骰子的3个面上的词可以是:高铁、汽车、飞机。

    第二步:

       每写一个词,先扔该“文档-主题”骰子选择主题,得到主题的结果后,使用和主题结果对应的那颗“主题-词项”骰子,扔该骰子选择要写的词。

      先扔“文档-主题”的骰子,假设(以一定的概率)得到的主题是 “教育”,所以下一步便是扔 "教育" 主题筛子,(以一定的概率)得到教育主题筛子对应的某个词:"大学"。
      上面这个投骰子产生词的过程简化下便是:“先以一定的概率选取主题,再以一定的概率选取词”。事实上,一开始可供选择的主题有3个:教育、经济、交通,那为何偏偏选取教育这个主题呢?其实是随机选取的,只是这个随机遵循一定的概率分布。比如可能选取教育主题的概率是0.5,选取经济主题的概率是0.3,选取交通主题的概率是0.2,那么这3个主题的概率分布便是 {教育:0.5,经济:0.3,交通:0.2},我们把各个主题z在文档d中出现的概率分布称之为 主题分布,且是一个多项分布。
      同样的,从主题分布中随机抽取出教育主题后,依然面对着3个词:大学、老师、课程,这3个词都可能被选中,但它们被选中的概率也是不一样的。比如大学这个词被选中的概率是0.5,老师这个词被选中的概率是0.3,课程被选中的概率是0.2,那么这3个词的概率分布便是 {大学:0.5,老师:0.3,课程:0.2},我们把各个词语w在主题z下出现的概率分布称之为 词分布,这个词分布也是一个多项分布。
      所以,选主题和选词都是两个随机的过程,先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该教育主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。
    第三步:

      最后,你不停的重复扔“文档-主题”骰子和”主题-词项“骰子,重复N次(产生N个词),完成一篇文档,重复这产生一篇文档的方法M次,则完成M篇文档。

    总结:pLSA中生成文档的整个过程便是选定文档生成主题,确定主题生成词。
    (2)根据文档反推其主题分布

      反过来,既然文档已经产生,那么如何根据已经产生好的文档反推其主题呢?这个利用看到的文档推断其隐藏的主题(分布)的过程(其实也就是产生文档的逆过程),便是主题建模的目的:自动地发现文档集中的主题(分布)。

      换言之,人类根据文档生成模型写成了各类文章,然后丢给了计算机,相当于计算机看到的是一篇篇已经写好的文章。现在计算机需要根据一篇篇文章中看到的一系列词归纳出当篇文章的主题,进而得出各个主题各自不同的出现概率:主题分布。即文档 d 和单词 w 是可被观察到的,但主题 z却是隐藏的

    如下图所示(图中被涂色的d、w表示可观测变量,未被涂色的z表示未知的隐变量,N表示一篇文档中总共N个单词,M表示M篇文档):

    上图中,文档d和词w是我们得到的样本(样本随机,参数虽未知但固定,所以pLSA属于频率派思想。区别于下文要介绍的LDA中:样本固定,参数未知但不固定,是个随机变量,服从一定的分布,所以 LDA 属于贝叶斯派思想

    6.LDA模型

    事实上,理解了pLSA模型,也就差不多快理解了LDA模型,因为LDA就是在pLSA的基础上加层贝叶斯框架,即 LDA 就是 pLSA 的贝叶斯版本(正因为LDA被贝叶斯化了,所以才需要考虑历史先验知识,才加的两个先验参数)

    (1)pLSA跟LDA的对比:生成文档与参数估计

    对比下本文开头所述的LDA模型中一篇文档生成的方式:

    (2)PLSA跟LDA的区别

      PLSA中,主题分布和词分布是唯一确定的,能明确的指出主题分布可能就是{教育:0.5,经济:0.3,交通:0.2},词分布可能就是{大学:0.5,老师:0.3,课程:0.2}。
      但在LDA中,主题分布和词分布不再唯一确定不变,即无法确切给出。例如主题分布可能是{教育:0.5,经济:0.3,交通:0.2},也可能是{教育:0.6,经济:0.2,交通:0.2},到底是哪个我们不再确定(即不知道),因为它是随机的可变化的。但再怎么变化,也依然服从一定的分布,即主题分布跟词分布由Dirichlet先验随机确定。
    (3)LDA生成文档过程的进一步理解

    上面说,LDA中,主题分布 —— 比如

    是由dirichlet先验给定的,不是根据文档产生的。所以,LDA生成文档的过程中,先从dirichlet先验中“随机”抽取出主题分布,然后从主题分布中“随机”抽取出主题,最后从确定后的主题对应的词分布中“随机”抽取出词

    7.Gibbs采样

      类似于 pLSA,LDA 的原始论文中是用的 变分-EM算法估计 未知参数,后来发现另一种估计 LDA 未知参数的方法更好,这种方法就是:Gibbs Sampling,有时叫Gibbs采样或Gibbs抽样,都一个意思。Gibbs抽样 是马尔可夫链蒙特卡尔理论(MCMC)中用来获取一系列近似等于指定多维概率分布(比如2个或者多个随机变量的联合概率分布)观察样本的算法。
    Gibbs采样算法流程如下:

    (1)LDA参数学习-Gibbs采样

      给定一个文档集合,w 是可以观察到的已知变量,α和 β 是根据经验给定的先验参数,其他的变量 z,θ 和 ϕ都是未知的隐含变量,需要根据观察到的变量来学习估计的。

      具体来讲,所有文档联合起来形成的词向量 w 是已知数据,但是不知道语料库的主题 z 的分布。假设可以先求解出 w、z 的联合分布 p(w,z),进而就可以求出某个词 w 对应主题特征 z的条件概率分布:

    其中 zi表示去掉下标为 i后的主题分布,有了条件概率,那么就可以使用 Gibbs采样,最终可以得到第 i个词的主题。

    如果通过采样得到所有词的主题,那么可以通过统计所有词的主题数,从而得到各个主题的词分布。接着统计各个文档对应词的主题数,从而可以得到各个文档的主题分布。

    (2)Gibbs采样总结
    <1>Gibbs采样训练流程

    选择合适的主题数 K ,选择合适的超参数 α,β
    对于语料库中每一篇文档的每一个词,随机的赋予一个主题编号 z
    重新扫描语料库,对于每一个词,利用 Gibbs采样 公式更新它的 topic 的编号,并更新语料库中该词的编号
    重复第三步中基于坐标轴轮换的Gibbs采样,直到 Gibbs采样 收敛。
    统计语料库中各个文档各个词的主题,得到文档主题分布;然后统计语料库中各个主题词的分布,得到主题与词的分布。

    <2>Gibbs采样预测流程

    对当前文档的每一个词,随机的赋予一个主题编号 z
    重新扫描当前文档,对于每一个词,利用 Gibbs采样 算法更新它的 topictopictopic 编号
    重复第二步的基于坐标轴轮换的Gibbs采样,直到Gibbs采样收敛
    统计文档中各个词的主题,得到该文档主题分布。
    8.LDA总结

    参考文献:

    https://blog.csdn.net/daycym/article/details/88876460

    https://zhuanlan.zhihu.com/p/31470216   (推荐)

  • 相关阅读:
    Java User Thread and Daemon Thread
    BFS 和 DFS
    fail-fast vs fail-safe iterator in Java
    通过先序遍历和中序遍历后的序列还原二叉树
    单例模式总结
    TCP性能陷阱
    数据库事务的四大特性和事务隔离级别
    深入理解Java虚拟机- 学习笔记
    字符串,引用变量与常量池
    深入理解Java虚拟机- 学习笔记
  • 原文地址:https://www.cnblogs.com/luckyplj/p/12718922.html
Copyright © 2020-2023  润新知