专栏首页程序生活NLP系列(二)LDA主题模型

NLP系列(二)LDA主题模型

LDA模型是NLP中很基础也是大家广为熟知的模型,在面试过程也经常遇到。本文简单讲述下其大致流程。

1 LDA 简介

首先,我们来感受下LDA是什么,

什么是LDA模型?

看来,不同人在不同场景下对LDA的认识,那我们看下百科的解释:

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。

看到这里我们只需要先记住:LDA的目的就是要识别主题,即把文档—词汇矩阵变成文档—主题矩阵(分布)和主题—词汇矩阵(分布)

2 LDA模型构建过程

2.1 LDA生成流程

对于语料库中的每篇文档,LDA定义了如下生成过程(generativeprocess): 1.对每一篇文档,从主题分布中抽取一个主题; 2.从上述被抽到的主题所对应的单词分布中抽取一个单词; 3.重复上述过程直至遍历文档中的每一个单词。

语料库中的每一篇文档与T(通过反复试验等方法事先给定)个主题的一个多项分布 (multinomialdistribution)相对应,将该多项分布记为θ。每个主题又与词汇表(vocabulary)中的V个单词的一个多项分布相对应,将这个多项分布记为φ。

2.2 LDA 整体流程

  • 2.2.1 相关定义
  1. 先定义一些字母的含义:文档集合D,主题(topic)集合T

D中每个文档d看作一个单词序列<w1,w2,...,wn>,wi表示第i个单词,设d有n个单词。(LDA里面称之为wordbag,实际上每个单词的出现位置对LDA算法无影响)

  1. D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC),LDA以文档集合D作为输入,希望训练出的两个结果向量(设聚成k个topic,VOC中共包含m个词)
  2. 对每个D中的文档d,对应到不同Topic的概率θd<pt1,...,ptk>,其中,pti表示d对应T中第i个topic的概率。计算方法是直观的,pti=nti/n,其中nti表示d中对应第i个topic的词的数目,n是d中所有词的总数。
  3. 对每个T中的topict,生成不同单词的概率φt<pw1,...,pwm>,其中,pwi表示t生成VOC中第i个单词的概率。计算方法同样很直观,pwi=Nwi/N,其中Nwi表示对应到topict的VOC中第i个单词的数目,N表示所有对应到topic的单词总数。

LDA的核心公式如下: p(w|d)=p(w|t)*p(t|d) 直观的看这个公式,就是以Topic作为中间层,可以通过当前的θd和φt给出了文档d中出现单词w的概率。其中p(t|d)利用θd计算得到,p(w|t)利用φt计算得到。 实际上,利用当前的θd和φt,我们可以为一个文档中的一个单词计算它对应任意一个Topic时的p(w|d),然后根据这些结果来更新这个词应该对应的topic。然后,如果这个更新改变了这个单词所对应的Topic,就会反过来影响θd和φt。

  • 2.2.2 学习过程

LDA算法开始时,先随机地给θd和φt赋值(对所有的d和t)。然后上述过程不断重复,最终收敛到的结果就是LDA的输出。再详细说一下这个迭代的学习过程: 1.针对一个特定的文档ds中的第i单词wi,如果令该单词对应的topic为tj,可以把上述公式改写为: pj(wi|ds)=p(wi|tj)*p(tj|ds) 2.现在我们可以枚举T中的topic,得到所有的pj(wi|ds),其中j取值1~k。然后可以根据这些概率值结果为ds中的第i个单词wi选择一个topic。最简单的想法是取令pj(wi|ds)最大的tj(注意,这个式子里只有j是变量),即argmax[j]pj(wi|ds) 3.然后,如果ds中的第i个单词wi在这里选择了一个与原先不同的topic,就会对θd和φt有影响了(根据前面提到过的这两个向量的计算公式可以很容易知道)。它们的影响又会反过来影响对上面提到的p(w|d)的计算。对D中所有的d中的所有w进行一次p(w|d)的计算并重新选择topic看作一次迭代。这样进行n次循环迭代之后,就会收敛到LDA所需要的结果了。

3 实例

3.1 计算文档-词汇矩阵

N个文档组成的语料库(?1,?2,"……" ,??),由V个词组成的词汇表。矩阵中的值表示了词?? 〖在文档?〗? 中出现的频率,主题用Z表示,下面对语料库中的每一个word随机指派一个主题编号??,统计每个?_?下出现的word次数,可得一个主题—词汇矩阵。

3.2 计算主题-词汇矩阵

3.3 计算文档主题矩阵

统计每个词代表的主题在每一个文档中出现的次数,可得出以下矩阵文档—主题矩阵

以上讲了大致LDA的感性认识,如果进行严格的数学推导请看这篇文章(https://www.jianshu.com/p/74ec7d5f6821),本人认为是看到的不错的文章。

4 参考资料

LDA(LDA文档主题生成模型)_百度百科

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 代码实现 递归实现 # ...

    致Great
  • Leetcode-Easy 412. Fizz Buzz

    728. Self Dividing Numbers 描述: 给定一个整数n,判断1-n之间的数字,输出字符串。如果一个数是3的倍数,输出“FIzz”;如果...

    致Great
  • Leetcode-Easy 806. Number of Lines To Write String

    给一个字符串S,从左到右将它们排列行,每行最大长度为100,,同时给定一个数组withds,widths[0]对应着 a的宽度, widths[1]对应着b的宽...

    致Great
  • 【算法】LDA算法及应用

    Latent Dirichlet Allocation是Blei等人于2003年提出的基于概率模型的主题模型算法,LDA是一种非监督机器学习技术,可以用来识别大...

    陆勤_数据人网
  • 【LDA数学八卦-5】LDA 文本建模

    5. LDA 文本建模 5.1 游戏规则 对于上述的 PLSA 模型,贝叶斯学派显然是有意见的,doc-topic 骰子θ→m和 topic-word 骰子φ→...

    机器学习AI算法工程
  • 如何在 asp.net core 的中间件中返回具体的页面

    在 asp.net core 中,存在着中间件这一概念,在中间件中,我们可以比过滤器更早的介入到 http 请求管道,从而实现对每一次的 http 请求、响应做...

    程序员宇说
  • 互联网术语大全(一)

    PM:Product Manager「产品经理」或 Project Manager 「项目经理」

    宇相
  • Bayesian Personalized Ranking 算法解析及Python实现

    最早主要是利用词频、逆文档频率和文档长度这几个因子来人工拟合排序公式。因为考虑因素不多,由人工进行公式拟合是完全可行的,此时机器学习并不能派上很大用场,因为机器...

    Bo_hemian
  • 安卓开发_分享功能

    听着music睡
  • SDK开发经验之Demo

    子勰

扫码关注云+社区

领取腾讯云代金券