LDA主题模型(算法详解)
LDA主题模型(算法详解)
http://blog.csdn.net/weixin_41090915/article/details/79058768?%3E
一、LDA主题模型简介
LDA(Latent Dirichlet Allocation)中文翻译为:潜在狄利克雷分布。LDA主题模型是一种文档生成模型,是一种非监督机器学习技术。它认为一篇文档是有多个主题的,而每个主题又对应着不同的词。一篇文档的构造过程,首先是以一定的概率选择某个主题,然后再在这个主题下以一定的概率选出某一个词,这样就生成了这篇文档的第一个词。不断重复这个过程,就生成了整篇文章(当然这里假定词与词之间是没有顺序的,即所有词无序的堆放在一个大袋子中,称之为词袋,这种方式可以使算法相对简化一些)。
LDA的使用是上述文档生成过程的逆过程,即根据一篇得到的文档,去寻找出这篇文档的主题,以及这些主题所对应的词。
白话解释:比如document1的内容为:[自从乔布斯去世之后,iPhone再难以产生革命性的创新了]
通过上述的方法,document1将对应两个主题topic1,topic2,进而,主题topic1会对应一些词:[苹果创始人][苹果手机],主题topic2会对应一些词:[重大革新][技术突破]。于是LDA模型的好处显而易见,就是可以挖掘文档中的潜在词或者找到两篇没有相同词的文档之间的联系。
二、算法流程
(超详细,超通俗易懂,逻辑脉络超清晰)
我们以文档集合D中的文档d为例,文档d中包含单词序列<w1,w2,...wn>,wi表示第i个单词,设d中有n个单词;
文档集合D中出现的全部词组成Vocabulary;
首先将文档d作为算法的输入,并输入主题数K,此时d对应到各个主题的概率为θd=(pt1,pt2,...ptk),pti为d对应第i个主题的概率;
此时输入到算法中的只有文档d和主题数K,那么pt1,pt2...ptk的数值从何而来?
我们首先人为设置文档d中对应主题t1,t2,...tk的词的个数,比如文档d中5个词对应主题t1,7个词对应主题t2,…,4个词对应主题tk,那么此时,我们就人为确定了一个参数向量(5,7,…4),将这个向量记作α⃗ ,这个我们人为设置的参数向量称为超参数。
那么如何将超参数α⃗ 转化为概率分布θd=(pt1,pt2,...ptk)呢?
这里我们引入狄利克雷分布函数:
它所表达的含义简单来说就是,已知α1,α2,α3的条件下,概率p1,p2,p3的概率分布,也就是概率的概率,分布的分布。再直观点说就是:比如在已知α1,α2,α3为(5,7,4)的条件下,样本点p1,p2,p3为(0.4,0.5,0.1)的概率是多少。
那么我们将上述的三维Dirichlet函数扩展为K维,即在已知α⃗ 的条件下,得到p⃗ 的分布(α⃗ ,p⃗ 分别为K维向量)。K维Dirichlet公式如下:
至此,我们通过输入超参数α⃗ 得到了文档d的关于K个主题的狄利克雷分布:
其含义显然, Dirichlet 的输入参数为 α⃗ ,得到的输出为可以理解为一个矩阵:
(pt1,pt2,...ptk)
......
......
(pt1,pt2,....ptk)
即文档d对应各个主题 tk 的概率分布的分布。
同理,我们可以将任一主题tk产生各个词的概率表示出来。人为设置主题tk产生的各个词的数量,即设置超参数,用向量η⃗ 来表示。同上所述,将η⃗ 作为Dirichlet函数的输入参数,得到主题tk产生各个词的狄利克雷分布:
此时我们已经得到了文档d对应各个主题的概率分布的分布(即狄利克雷分布)θd,以及文档tk产生各个词的概率分布的分布βk,那么接下来,我们要从文档d中取出第i个词,求这个词对应各个主题的分布;
换句大家熟悉的话来说就是:已知第i个词wi在文档d中出现n次,且已知它对应各个主题的概率(这里每个词对应各个主题的概率就是文档d对应各个主题的概率,二者同分布),求该词被各个主题产生的次数;
这就等同于我们熟知的一共有n个球,且已知红球、黄球、绿球的概率分别为p1,p2,p3,求这n个求当中红球、黄球、绿球的个数。
那么如何通过文档d对应各个主题的分布θd得到文档中的每个词被各个主题产生的次数,进而重新得到文档d中对应各个主题的词的个数呢?
首先我们引入十分熟悉的多项式分布:
这个公式的意义总所周知:已知一共n个球,且知道每种颜色球的概率,就可以得到有 m1 个红球, m2 个黄球, m3 个绿球的概率。
那么同样将其扩展为K维,将θd作为参数,就可以得到文档d中第i个词wi对应的各个主题的多项式分布zdn=multi(θd)
于是,非常值得庆幸,我们通过文档d对应各个主题的概率θd,进而得知文档d中各个词对应各个主题的概率,且知道这个词在文档d中的出现次数,于是求得这个词被各个主题的产生次数,遍历文档d中的每一个词,就可以得到新的文档d中对应各个主题的词的个数。
白话举例:文档d对应主题t1,t2的概率分别为pt1,pt2,,于是文档d中词w1对应的主题t1,t2,的概率也分别为pt1,pt2,又得知词w1在文档d中出现了15次,于是得到词w1由主题t1,t2产生的次数分别为10次、5次(这个是假设的);
对文档d中的每个词都执行此操作,(假设文档中只有两个词)词w2由主题t1,t2产生的次数分别为13次、2次,于是就能重新得到文档d中对应各个主题的词的数量,即对应主题t1,t2的词的数量分别为2个、0个(初始的d中对应各个主题的词的数量是人为设定的超参数α⃗ )。
于是,我们最终得到了文档d对应各个主题的词的个数的更新值:记作向量n⃗ ,我们将更新后的向量n⃗ 再次作为狄利克雷分布的输入向量,即Dirichlet(θd|n⃗ ),就会又会得到文档d对应各个主题的概率的更新值,即更新的θd,如此反复迭代,最终得到收敛的θd,即为我们要的结果。
有了以上的经验,主题tk产生各个词的概率βk可以同样处理,对于产生文档d中的第i个词wi的各个主题的分布为:
multi(βi),于是用同上面相同的方法,可以得到更新后的各个主题产生各个单词的数量:记作向量m⃗ ,将向量m⃗ 作为新的参数再次带入狄利克雷分布Dirichlet(βk|m⃗ ),就又会得到每个主题产生各个词的概率,即更新的βk,如此反复迭代,最终得到收敛的βk,即所求结果。
得到了收敛的θd和βk,算法就大功告成了,这时,该算法就会根据输入的文档d,找到潜在主题下的相关词啦!!!!
++++++++++++++++++++++++++++++++++++++++
个人整理,水平有限,可能存在很多错误,希望大家一起探讨研究,还有关于为什么选用狄利克雷分布以及狄利克雷分布和多项式分布之间的关系、先验概率后验概率等内容并没有仔细探讨,作者现在已经生不如死了,先休息休息,过几天再补充吧!!
++++++++++++++++++++++++++++++++++++++++
LDA主题模型(算法详解)相关推荐
- 自然语言处理NLP星空智能对话机器人系列:第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解
自然语言处理NLP星空智能对话机器人系列: 第21章:基于Bayesian Theory的MRC文本理解基础经典模型算法详解 1,Bayesian prior在模型训练时候对Weight控制.训练速度 ...
- 机器学习之LDA主题模型算法
文章目录 1.知道LDA的特点和应用方向 1.1.特点 1.2.应用方向 2.知道Beta分布和Dirichlet分布数学含义 3.了解共轭先验分布 4.知道先验概率和后验概率 5.知道参数α值的大小 ...
- Spark机器学习(8):LDA主题模型算法
1. LDA基础知识 LDA(Latent Dirichlet Allocation)是一种主题模型.LDA一个三层贝叶斯概率模型,包含词.主题和文档三层结构. LDA是一个生成模型,可以用来生成一篇 ...
- 文本聚类(一)—— LDA 主题模型
目录 文本聚类 一.LDA 主题模型 1.1 加载数据集 1.2 数据清洗.分词 1.3 构建词典.语料向量化表示 1.4 构建 LDA 模型 1.5 模型的保存.加载以及预测 1.6 小结 Upda ...
- 一文详解LDA主题模型
[本文作者]达观数据 夏琦 [作者简介]夏琦,达观数据NLP组实习生,就读于东南大学和 Monash University,自然语言处理方向二年级研究生,师从知识图谱专家漆桂林教授.曾获第五届&quo ...
- 【NLP】LDA主题模型详解
前言 本人在开始学习LDA主题模型时,一开始看上去感觉挺简单.挺容易理解的.但是,要想真正理解它不是那么容易,大概是因为里面的数学知识点比较多,让一些数学基础不好的人望而生畏.不过好在,如果不想深 ...
- ChatGPT模型采样算法详解
ChatGPT模型采样算法详解 ChatGPT所使用的模型--GPT(Generative Pre-trained Transformer)模型有几个参数,理解它们对文本生成任务至关重要.其中最重要的 ...
- 【机器学习】【隐马尔可夫模型-3】后向算法:算法详解+示例讲解+Python实现
0.前排提示 csdn有些数学公式编辑不出来,所以本博用容易书写的表达式来表示专业数学公式,如: (1) 在本博客中用α<T>(i)来表示 (2)在本博客中用[i=1, N]∑来表示 注 ...
- 隐马尔可夫模型之Baum-Welch算法详解
隐马尔可夫模型之Baum-Welch算法详解 前言 在上篇博文中,我们学习了隐马尔可夫模型的概率计算问题和预测问题,但正当要准备理解学习问题时,发现学习问题中需要EM算法的相关知识,因此,上一周转而学 ...
最新文章
- python学习干货教程(11):元组
- 用node搭一个静态服务
- 问题 I: 成对最小公倍数(数学)
- NOIP2017提高组比赛总结
- 来自一位家长的肺腑之言,句句在理!!!
- leelen可视对讲怎么接线_楼宇对讲系统怎么布线 楼宇对讲系统布线方式【介绍】...
- WSSv3 Technical Articles_Windows SharePoint Services 3.0编码开发工具和技巧(Part 2 of 2)
- 怎么让同网络计算机强制关机,知道局域网ip怎么关机
- Windows下IIS搭建Ftp服务器
- 妖怪,你可认得这32个关键字?
- 掌门教育市值再创新低:集体诉讼风险未解,近万名教师“无证”
- 1.数组简介:什么是数组???数组有哪四要素???
- Revit二次开发-创建IURibbon中使用相对地址
- mysql 周_MySQL的跨年周统计问题
- 十二小时制与二十四小时制详解
- 如何用stc单片机内部ad采集多路交流信号
- PMP的考试费用是多少啊?大概需要多少钱?
- IBinder转换为BpBinder
- 成功创业者的十大素质
- 我是一个新手,各位多多包涵啦
热门文章
- 链式延迟执行DOME
- GZip、Deflate压缩算法对应的C#压缩解压函数
- android webview 弹出浏览器,android – 防止WebView打开浏览器
- linux中有关于dhcp的选择题,未指定试题(2014-11-18):DHCP协议的功能是(1)。在Linux中提供DHCP服务的...
- 自动化测试——unittest编写接口测试用例
- Fiddler-半自动构造少量数据
- 推荐一款接口自动化测试数据提取神器 JSonPath
- python21天打卡day4
- 朋友圈如何测试(思维导图)
- 用Python强制子类重写父类,如此简单就能做到