一)简介
1.主题模型是对文本中隐含主题的一种建模方法;每个主题其实是词表上单词的概率分布;
2.主题模型是一种生成模型,一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的;
3.常见的主题模型有3种:
(1)PLSA(Probabilistic Latent Semantic Analysis)
(2)LDA(Latent Dirichlet Allocation)
(3)L-LDA(Label Latent Dirichlet Allocation)
(二)PLSA模型
1.生成过程:
(1)M个doc,N个word;
(2)doc选择topic服从多项式分布,topic选择word也服从多项式分布;
(3)生成模型如下:
其中p(topic|doc)与p(word|topic)属于模型参数;
2.训练过程:由于存在隐藏变量topic,因此选择EM算法;
(三)LDA模型
1.原理:LDA模型是在PLSA模型的基础上引入了参数的先验知识,也就是假设doc到topic的多项分布参数以及topic到word的多项分布参数服从狄利克雷分布;
(1)m个doc,k个topic;
(2)α和β属于超参数;
(3)数学解释:
1)贝叶斯公式(后验正比于似然乘以先验)
2)在贝叶斯概率理论中,如果后验概率P(θ|x)和先验概率p(θ)满足同样的分布律,那么,先验分布和后验分布被叫做共轭分布,同时,先验分布叫做似然函数的共轭先验分布;
3)Dirichlet分布是多项分布的共轭先验分布:
二项分布:
多项分布:
Beta分布:
Dirichlet分布:
4)选择共轭先验分布可以带来计算上的方便;
2.生成过程:
(1)M个doc,N个word;
(2)生成模型如下:
3.训练过程:GibbsSampling
(1)图示:
初始时,随机给文本中的每个单词w分配主题z;然后统计每个主题z下出现term t的数量分布以及每个文档m下主题z 的数量分布;然后排除当前词的主题分配,根据其他所有词的主题分配估计当前词的主题;用同样的方法不断更新下一个词的主题,直至每个文档下主题的分布以及每个主题下词的分布收敛,算法停止;这里的核心是如何根据其他所有词的主题分配估计当前词的主题,也就是gibbs 采样公式;
(2)gibbs采样公式:
其中zi=k表示第i个词的主题为k,i的形式为(m,n),表示第m篇第n个;¬i 表示去除下标为i的词;
(3)理解
1)概率计算:
对每个D中的文档d,对应到不同Topic的概率θd<pt1,...,ptk>,其中,pti表示d对应T中第i个topic的概率。计算方法是直观的,pti=nti/n,其中nti表示d中对应第i个topic的词的数目,n是d中所有词的总数;
对每个T中的topict,生成不同单词的概率φt<pw1,...,pwm>,其中,pwi表示t生成VOC中第i个单词的概率。计算方法同样很直观,pwi=Nwi/N,其中Nwi表示对应到topic t的VOC中第i个单词的数目,N表示所有对应到topic t的单词总数。
2)训练过程:
步骤1:先随机地给θd和φt赋值(对所有的d和t)
步骤2:pj(wi|ds)=p(wi|tj)*p(tj|ds)
枚举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所需要的结果了;
4.推理过程:训练与推理的步骤几乎一样,都需要gibbs采样,但是由于推理时,已知topic下word的分布,因此每次迭代只更新文档下topic的分布,迭代速度是比训练快很多的;
5.效果评估(越小越好)
(四)Label LDA
1. Label LDA的label指的是事先给定每个文档的主题类别;
2. Label LDA从topic到word的生成过程与LDA一样,不同的是从doc到topic的生成过程;LDA中从doc到topic的生成服从多项分布θd,而θd又服从Dirichlet分布,每个doc的θd都是包括全部topic,而在label LDA中,每个doc的θd只包括其label中对应的topic,与此同时,θd也服从Dirichlet分布;
3. 生成过程如下:
(1) 第1,2步是从topic到word的生成,与LDA一样;
(2) 第4,5步是生成每个doc的label(监督训练中其实就是样本自带的label);
(3) 第6步是对Dirichlet分布的参数α进行降维,从而约束在每个doc的label下;
下面将从下述的五个方面继续阐述,希望读者看完本文后,能对LDA有个尽量清晰完整的了解。
- 一个函数:gamma函数
- 四个分布:二项分布、多项分布、beta分布、Dirichlet分布
- 一个概念和一个理念:共轭先验和贝叶斯框架
- 两个模型:pLSA、LDA
- 一个采样:Gibbs采样
1.0 整体把握LDA
关于LDA有两种含义,一种是线性判别分析(Linear Discriminant Analysis),一种是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),本文讲后者。
另外,我先简单说下LDA的整体思想,不然我怕你看了半天,铺了太长的前奏,却依然因没见到LDA的影子而显得“心浮气躁”,导致不想再继续看下去。所以,先给你吃一颗定心丸,明白整体框架后,咱们再一步步抽丝剥茧,展开来论述。
按照wiki上的介绍,LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,是一种主题模型,它可以将文档集 中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题(分布)出来后,便可以根据主题(分布)进行主题聚类或文本分类。同时,它是一种典型的词袋模型,即一篇文档是由一组词构成,词与词之间没有先后顺序的关系。
此外,一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。
人类是怎么生成文档的呢?LDA的这三位作者在原始论文中给了一个简单的例子。比如假设事先给定了这几个主题:Arts、Budgets、Children、Education,然后通过学习训练,获取每个主题Topic对应的词语。如下图所示:
然后以一定的概率选取上述某个主题,再以一定的概率选取那个主题下的某个单词,不断的重复这两步,最终生成如下图所示的一篇文章(其中不同颜色的词语分别对应上图中不同主题下的词):
而当我们看到一篇文章后,往往喜欢推测这篇文章是如何生成的,我们可能会认为作者先确定这篇文章的几个主题,然后围绕这几个主题遣词造句,表达成文。
LDA就是要干这事:根据给定的一篇文档,反推其主题分布。
通俗来说,可以假定认为人类是根据上述文档生成过程写成了各种各样的文章,现在某小撮人想让计算机利用LDA干一件事:你计算机给我推测分析网络上各篇文章分别都写了些啥主题,且各篇文章中各个主题出现的概率大小(主题分布)是啥。
然,就是这么一个看似普通的LDA,一度吓退了不少想深入探究其内部原理的初学者。难在哪呢,难就难在LDA内部涉及到的数学知识点太多了。
在LDA模型中,一篇文档生成的方式如下:
- 从狄利克雷分布
中取样生成文档 i 的主题分布
- 从主题的多项式分布
中取样生成文档i第 j 个词的主题
- 从狄利克雷分布
中取样生成主题
对应的词语分布
- 从词语的多项式分布
中采样最终生成词语
其中,类似Beta分布是二项式分布的共轭先验概率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验概率分布。
此外,LDA的图模型结构如下图所示(类似贝叶斯网络结构):
恩,不错,短短6句话整体概括了整个LDA的主体思想!但也就是上面短短6句话,却接连不断或重复出现了二项分布、多项式分布、beta分布、狄利克雷分布(Dirichlet分布)、共轭先验概率分布、取样,那么请问,这些都是啥呢?
这里先简单解释下二项分布、多项分布、beta分布、Dirichlet 分布这4个分布。
- 二项分布(Binomial distribution)。
二项分布是从伯努利分布推进的。伯努利分布,又称两点分布或0-1分布,是一个离散型的随机分布,其中的随机变量只有两类取值,非正即负{+,-}。而二项分布即重复n次的伯努利试验,记为 。简言之,只做一次实验,是伯努利分布,重复做了n次,是二项分布。二项分布的概率密度函数为:
对于k = 0, 1, 2, ..., n,其中的是二项式系数(这就是二项分布的名称的由来),又记为
。回想起高中所学的那丁点概率知识了么:想必你当年一定死记过这个二项式系数
就是
。
- 多项分布,是二项分布扩展到多维的情况。
多项分布是指单次试验中的随机变量的取值不再是0-1的,而是有多种离散值可能(1,2,3...,k)。比如投掷6个面的骰子实验,N次实验结果服从K=6的多项分布。其中
多项分布的概率密度函数为:
- Beta分布,二项分布的共轭先验分布。
给定参数和
,取值范围为[0,1]的随机变量 x 的概率密度函数:
其中:
,
。
注:便是所谓的gamma函数,下文会具体阐述。
- Dirichlet分布,是beta分布在高维度上的推广。
Dirichlet分布的的密度函数形式跟beta分布的密度函数如出一辙:
其中
至此,我们可以看到二项分布和多项分布很相似,Beta分布和Dirichlet 分布很相似,而至于“Beta分布是二项式分布的共轭先验概率分布,而狄利克雷分布(Dirichlet分布)是多项式分布的共轭先验概率分布”这点在下文中说明。
OK,接下来,咱们就按照本文开头所说的思路:“一个函数:gamma函数,四个分布:二项分布、多项分布、beta分布、Dirichlet分布,外加一个概念和一个理念:共轭先验和贝叶斯框架,两个模型:pLSA、LDA(文档-主题,主题-词语),一个采样:Gibbs采样”一步步详细阐述,争取给读者一个尽量清晰完整的LDA。
(当然,如果你不想深究背后的细节原理,只想整体把握LDA的主体思想,可直接跳到本文第4 部分,看完第4部分后,若还是想深究背后的细节原理,可再回到此处开始看)
1.1 gamma函数
咱们先来考虑一个问题(此问题1包括下文的问题2-问题4皆取材自LDA数学八卦):
- 问题1 随机变量
- 把这n 个随机变量排序后得到顺序统计量
- 然后请问
的分布是什么。
为解决这个问题,可以尝试计算落在区间[x,x+Δx]的概率。即求下述式子的值:
首先,把 [0,1] 区间分成三段 [0,x),[x,x+Δx],(x+Δx,1],然后考虑下简单的情形:即假设n 个数中只有1个落在了区间 [x,x+Δx]内,由于这个区间内的数X(k)是第k大的,所以[0,x)中应该有 k−1 个数,(x+Δx,1] 这个区间中应该有n−k 个数。如下图所示:
从而问题转换为下述事件E:
对于上述事件E,有:
其中,o(Δx)表示Δx的高阶无穷小。显然,由于不同的排列组合,即n个数中有一个落在 [x,x+Δx]区间的有n种取法,余下n−1个数中有k−1个落在[0,x)的有种组合,所以和事件E等价的事件一共有
个。
如果有2个数落在区间[x,x+Δx]呢?如下图所示:
类似于事件E,对于2个数落在区间[x,x+Δx]的事件E’:
有:
从上述的事件E、事件E‘中,可以看出,只要落在[x,x+Δx]内的数字超过一个,则对应的事件的概率就是 o(Δx)。于是乎有:
从而得到的概率密度函数
为:
至此,本节开头提出的问题得到解决。然仔细观察的概率密度函数,发现式子的最终结果有阶乘,联想到阶乘在实数上的推广
函数:
两者结合是否会产生奇妙的效果呢?考虑到具有如下性质:
故将代入到的概率密度函数
中,可得:
然后取,
,转换
得到:
如果熟悉beta分布的朋友,可能会惊呼:哇,竟然推出了beta分布!
2 beta分布
2.1 beta分布
在概率论中,beta是指一组定义在区间的连续概率分布,有两个参数
和
,且
。
beta分布的概率密度函数是:
其中的便是
函数:
随机变量X服从参数为的beta分布通常写作: