白话LDA隐式狄里克雷分布模型

今天应学弟要求,又回顾了下LDA模型,陡然发现之前弄懂弄通的一些地方竟然开始有些生疏,果然还是得记录总结。

好记性不如烂笔头,于是将LDA模型又从头梳理了一下,有些体会,记录下来

以下尽可能不用代码也不用公式还原LDA模型的思想原貌

白话LDA隐式狄里克雷分布模型
LDA全景图

1.LDA解决的问题:

如何自动的从一批文档中,找出文档表达的n个主题思想?

2.LDA的假设:

任何模型都是对现实世界的一种假设,所以想要掌握一个模型,先了解它的假设是什么

LDA模型的假设基础就是:关键词在文档中出现的概率 = 关键词在主题中出现的概率 * 主题在文档中出现的概率

本质上还是贝叶斯统计推断

3.解决问题的思路:

不管是数学公式还是伪代码,本质上都是对解决问题思路的描述,搞学术的容易陷入纯数学的表达,搞工程的容易陷入纯代码的表达,

所以要进一步理解模型,就必须透过公式或代码,理解其解决问题的思路

LDA模型的思路又是什么呢?

3.1. 问题分解:

1.如何找到一篇文档中的主题思想?

2.如何求解所有文档主题思想的个数n?

3.2. 问题分析:

所以,LDA模型实际上是一口气解决了两个问题

对于 问题1,这个好办,我们可以挖掘出频率高有意义的关键词来指代文档的主题;

但这也就意味着一篇文章可能同时会有多个主题

对于 问题2,如果一篇文章只有一个主题,这事就好办了,我们可以用kmeans聚类的方式从1,2,3……n逐个尝试,找到匹配度最高的n

现在我们需要考虑一对多问题

我们就再假设,在这堆文档中主题的数量应该也是服从某种分布的,可能是正态分布,可能是伽马分布,暂时不知道

于是我们同样可以将这些分布逐一尝试,看看哪种分布的匹配度最高?

3.3. 解决方案:

于是解决方案就出来了

第一步 先找出每篇文档的所有主题(用关键词组表示)

第二步 再从分布函数中随机选择一个分布去匹配现有文档的主题数量,算出一个匹配度

第三步 不断尝试新的分布函数,直到匹配度最大为止

4.回到数学:

回到数学上,我们就会发现有很多博主苦口婆心的写了一堆公式,但大家还是看不懂,主要原因就是主次不分,总是过分强调细节

其实整体原理很简单,不是吗?接下来我们再对该模型中使用的关键技术对号入座,细节就不展开了,有兴趣大家可以自行搜索

4.1 对号入座

狄里克雷(Dirichlet)分布 就是对应 3.3 第二步中的分布函数,这个Dirichlet可以通过调参的方式模拟任意分布
白话LDA隐式狄里克雷分布模型

Gibbs采样 简单来说,重复的按一定规则从数据中随机选取k个样本的过程就叫Gibbs采样,对应到 3.3 不断尝试新的分布函数,就是需要不断试验,不断采样
白话LDA隐式狄里克雷分布模型

变分推断EM 对应到 3.3 第二步中计算匹配度 及 第三步使得匹配度最大
白话LDA隐式狄里克雷分布模型

4.2 技术质疑

为什么是狄里克雷分布? 因为这是目前为止数学家发明的最好的分布函数模拟工具

为什么要用Gibbs采样? 因为这是目前为止最科学使用最广泛的采样手段

为什么要用变分推断EM? 因为客观事物不可能完美的服从某种分布,只能做近似推断,而变分法同样是目前最好的近似推断工具

5.总结

所以LDA,顾名思义,也就是挖掘隐含的狄里克雷分布的一个过程

5.1. 优点:

通过非常直观的思维逻辑,解决了看似复杂的文本主题聚类的问题

5.2. 缺点:

非常依赖于数据,数据量如果太小,可能不会太凑效

5.3. 发散:

这种分布推理机器,未来是否可以与神经网络有很好的结合点呢?我们拭目以待

上一篇:dialog element-ui vue


下一篇:我看JAVA 之 基本数据类型与封装类型