一、简介

https://cloud.tencent.com/developer/article/1058777

1、LDA是一种主题模型

作用:可以将每篇文档的主题以概率分布的形式给出【给定一篇文档,推测其主题分布】。我们的目标是找到每一篇文档的主题分布和每一个主题中词的分布。

  从而通过分析一些文档抽取出它们的主题(分布)出来后,便可以根据主题(分布)进行主题聚类或文本分类。

2、同时,它是一种典型的词袋模型

即一篇文档是由一组词构成,词与词之间没有先后顺序的关系。

此外,一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。

3、理解LDA,可以分为下述5个步骤:

  1. 一个函数:gamma函数
  2. 四个分布:二项分布、多项分布、beta分布、Dirichlet分布
  3. 一个概念和一个理念:共轭先验和贝叶斯框架
  4. 两个模型:pLSA、LDA(在本文第4 部分阐述)
  5. 一个采样:Gibbs采样

二、LDA模型

比如假设事先给定了这几个主题:Arts、Budgets、Children、Education,然后通过学习的方式,获取每个主题Topic对应的词语。如下图所示:

然后以一定的概率选取上述某个主题,再以一定的概率选取那个主题下的某个单词,不断的重复这两步,最终生成如下图所示的一篇文章(其中不同颜色的词语分别对应上图中不同主题下的词):

而当我们看到一篇文章后,往往喜欢推测这篇文章是如何生成的,我们可能会认为作者先确定这篇文章的几个主题,然后围绕这几个主题遣词造句,表达成文。LDA就是要干这事:根据给定的一篇文档,推测其主题分布。

LDA的图模型:

共有M篇文档,每个文档有Nm个单词,一共涉及到K个主题;

每篇文档都有各自的主题,主题分布是多项式分布,该多项式分布的参数服从Dirichlet分布,该Dirichlet分布的参数为α;

每个主题都有各自的词分布,词分布为为多项式分布,该多项式分布的参数服从Dirichlet分布,该Dirichlet分布的参数为β;

对于某篇文档d中的第n个词,首先从该文档的主题分布中采用一个主题,然后再这个主题对应的词分布中采用一个词,不断重复该操作,直到m篇文档全部完成上述过程。

LDA用生成式模型的角度来看待文档和主题。

  假设每篇文档包含了多个主题,

  用θd表示文档t每个话题所占比例,

  θd,k表示文档t中包含主题d所占用的比例,继而通过如下过程生成文档d。

  (1)根据参数为α的狄利克雷分布,随机采样一个话题分布θd

  (2)按照如下步骤生成文中的N个词:

      根据θd进行话指派,得到文档d中词n的话题

      根据指派话题所对应的词频βk进行采样随机生成词

三、两个模型:PLSA、LDA

我们来看一个例子,如图所示:

上图中有三个主题,在PLSA中,我们会以固定的概率来抽取一个主题词,比如0.5的概率抽取教育这个主题词,然后根据抽取出来的主题词,找其对应的词分布,再根据词分布,抽取一个词汇。由此,可以看出PLSA中,主题分布和词分布都是唯一确定的。但是,在LDA中,主题分布和词分布是不确定的,LDA的作者们采用的是贝叶斯派的思想,认为它们应该服从一个分布,主题分布和词分布都是多项式分布,因为多项式分布和狄利克雷分布是共轭结构,在LDA中主题分布和词分布使用了Dirichlet分布作为它们的共轭先验分布。所以,也就有了一句广为流传的话 -- LDA 就是 PLSA 的贝叶斯化版本。下面两张图片很好的体现了两者的区别:

四、模型生成过程:

https://www.cnblogs.com/pinard/p/6831308.html

https://blog.csdn.net/liuy9803/article/details/81091022
LDA从生成式模型的角度看待文档和主题,认为语料库中所有文档是隐含主题的随机混合,每个主题是由所有单词分布体现的。文档m的生成过程为:

(1)根据参数为α的Dirichlet分布选择一个主题分布,\theta _{m}\sim Dir(\alpha );

(2)根据参数为η的Dirichlet分布选择一个单词分布,\beta _{k}\sim Dir(\eta );

(3)按照下列步骤生成文档m中的N_{m}个单词:

a、根据\theta _{m} 指派主题,得到文档m中单词n的主题 z_{mn}\sim Multinomial(\theta _{m});

b、根据指派的主题z_{mn} 所对应的单词分布\beta _{k} 生成单词 w_{mn}\sim Multinomial(\beta _{z_{mn}})。

NLP传统基础(2)---LDA主题模型---学习文档主题的概率分布(文本分类/聚类)的更多相关文章

  1. LDA主题模型学习笔记5:C源代码理解

    1.说明 本文对LDA原始论文的作者所提供的C代码中LDA的主要逻辑部分做凝视,原代码可在这里下载到:https://github.com/Blei-Lab/lda-c 这份代码实现论文<Lat ...

  2. LDA主题模型学习笔记3.5:变分參数推导

    如今来推导一下得到变分參数更新式的过程.这一部分是在论文的附录中,为避免陷入过多细节而影响总体理解.能够在刚開始学习LDA的时候先不关注求解细节.首先要把L写成关于γ,ϕ\gamma,\phi函数.依 ...

  3. 用scikit-learn学习LDA主题模型

    在LDA模型原理篇我们总结了LDA主题模型的原理,这里我们就从应用的角度来使用scikit-learn来学习LDA主题模型.除了scikit-learn,  还有spark MLlib和gensim库 ...

  4. NLP︱LDA主题模型的应用难题、使用心得及从多元统计角度剖析

    将LDA跟多元统计分析结合起来看,那么LDA中的主题就像词主成分,其把主成分-样本之间的关系说清楚了.多元学的时候聚类分为Q型聚类.R型聚类以及主成分分析.R型聚类.主成分分析针对变量,Q型聚类针对样 ...

  5. LDA主题模型三连击-入门/理论/代码

    目录 概况 为什么需要 LDA是什么 LDA的应用 gensim应用 数学原理 预备知识 抽取模型 样本生成 代码编写 本文将从三个方面介绍LDA主题模型--整体概况.数学推导.动手实现. 关于LDA ...

  6. R语言︱LDA主题模型——最优主题数选取(topicmodels)+LDAvis可视化(lda+LDAvis)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:在自己学LDA主题模型时候,发现该模 ...

  7. Spark:聚类算法之LDA主题模型算法

    http://blog.csdn.net/pipisorry/article/details/52912179 Spark上实现LDA原理 LDA主题模型算法 [主题模型TopicModel:隐含狄利 ...

  8. 理解 LDA 主题模型

    前言 gamma函数 0 整体把握LDA 1 gamma函数 beta分布 1 beta分布 2 Beta-Binomial 共轭 3 共轭先验分布 4 从beta分布推广到Dirichlet 分布 ...

  9. 通俗理解LDA主题模型

    通俗理解LDA主题模型 0 前言 印象中,最開始听说"LDA"这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印 ...

随机推荐

  1. SQL 创建表

    SQL 创建表是通过SQL CREATE TABLE 语句来实现,该语句是DDL SQL语句.CREATE TABLE语句用于创建用于存储数据的表.在创建表时,可以为列定义主键.惟一键和外键等完整性约 ...

  2. Andrew Ng机器学习课程16

    Andrew Ng机器学习课程16 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:主要介绍了ICA算法,并利用最大似然估计和随机梯度上升算法进行求解, ...

  3. 乐字节Java变量与数据结构之二:Java常量与变量

    大家好,小乐又来给大家讲述Java基础知识.上次说了乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符,这次将接着往下说,谈谈Java常量与变量. 1.常量 1).定义 在程序执行的过 ...

  4. Selenium问题集锦

    此文章用于记录使用Selenium遇见的问题~ 问题1:sendkeys直接报错如下: 解决方案:selenium 驱动和Chrome浏览器的版本必须对应,不然会报此错.驱动地址:点此跳转 下载前先看 ...

  5. 如何保持人际关系zz

    作者:Faaany链接:https://www.zhihu.com/question/35590289/answer/63675007来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  6. sql server 日期函数

    一.sql server日期时间函数Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基 ...

  7. Hadoop学习(6)-HBASE的安装和命令行操作和java操作

    使用HABSE之前,要先安装一个zookeeper 我以前写的有https://www.cnblogs.com/wpbing/p/11309761.html 先简单介绍一下HBASE HBASE是一个 ...

  8. PAT甲级 图的遍历 相关题_C++题解

    图的遍历 PAT (Advanced Level) Practice 图的遍历 相关题 目录 <算法笔记>重点摘要 1021 Deepest Root (25) 1076 Forwards ...

  9. 【Python基础】01_Python中的变量

    1.定义和运算: 变量名 = 值 定义变量举例: # 定义一个变量 myCar = "比亚迪F0" # 输出一个变量 print(myCar) 变量之间的简单运算举例: price ...

  10. Java中数据存储分配

    (1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给 ...