上一节详细介绍了什么是LDA,详细讲解了他的原理,大家应该好好理解,如果不理解,这一节就别看了,你是看不懂的,这里我在简单的叙述LDA的算法思想:

首先我们只拥有很多篇文本和一个词典,那么我们就可以在此基础上建立基于基于文本和词向量联合概率(也可以理解为基于文本和词向量的矩阵,大家暂且这样理解),我们只知道这么多了,虽然知道了联合概率密度了,但是还是无法计算,因为我们的隐分类或者主题不知道啊,在LSA中使用SVD进行寻找隐分类的,在PLSA中使用概率进行找隐分类的,而在LDA中是如何做的呢?他是这样做的,首先我为每个文本赋值一个服从Dirichlet分布的

lda文本匹配 lda文本分析_条件概率

,他的作用就是寻找文本中对应词的主题(隐分类),或者从本篇文本的角度来说确定这篇文本有哪几个隐分类,而隐分类的确定是根据

lda文本匹配 lda文本分析_词向量_02

进行确定的,首先我们根据

lda文本匹配 lda文本分析_条件概率

确定了这个这篇文章的某一个位置的词了即

lda文本匹配 lda文本分析_词向量_04

,那么我通过词典,在通过

lda文本匹配 lda文本分析_词向量_02

去寻找这个词对应的隐分类(主题),这样我就确定了这篇文章的隐分类,同时都可以计算了所有的相关概率,后面就可以通过隐分类和相关概率进行判断文本的相似性等等就和前面几节一样了,这就是LDA的深层工作原理,我们一起看看下图,在分析一下,看看是不是这样的:

lda文本匹配 lda文本分析_lda文本匹配_06

首先我通过文本和词向量建立联合概率密度,但是这个联合概率密度需要知道隐分类,要不然后面无法进一步计算,首先我们现在需要确定这个文本有多少个隐分类(隐分类和词的多少有关),而隐分类的和词相关,上图的                                                       

lda文本匹配 lda文本分析_lda文本匹配_07

 ,就是这个意思了,那么我们怎么知道这个文本有多少隐分类呢?这里是通过词典或者说是通过词典对应的隐分类,去寻找文本的对应的隐分类,这时我们根据词典就可以寻找文本对应词的隐分类,这样就可可以确定文本中词对应的隐分类了,这也是

lda文本匹配 lda文本分析_概率密度_08

的意思了,这里大家应该可以理解了,当然这需要大家知道前面的知识如LSA、PLSA,不懂的请自行查阅我的前两篇文章,下面开始今天的内容即LDA是如何训练的:

LDA训练算法

通过上一篇的文章我们知道了什么是LDA模型,那么这个模型有两个目标,如下:

  • 估计模型的参数和;
  • 对于新来的一篇文档,我们能够计算这篇文档的主题(隐分类、topic)分布

根据前面的算法即LSA,PLSA我们知道只要知道隐分类(主题、topic)那么文本其他计算就简单了,因此这里我们第二个目标就不详细的讲解,本节详细介绍LDA的训练算法,当然,我只是把训练算法的思路讲一下,具体细节大家看原始论文吧,这一节我想想就头大的,我尽力写,你们也尽力看,等这一节过了,后面的就很简单了。下面开始:

总体思路:

首先给出联合分布公式(但由于topic是隐变量,所以实际上并能进行计算)

  • 从联合分布推导出条件概率公式(用于Gibbs抽样)
  • 通过Gibbs抽样过程推算出每个词所属topic
  • Topic算出来后,分布中已经没有隐变量,通过推导公式倒推出分布参数

这里我们参考的论文是《Parameter estimation for text analysis》,大家可以找一下这篇文章参考看一下:

lda文本匹配 lda文本分析_lda文本匹配_09

 这里先从这个概率说起,为什么是这个形式呢?这里大家先搞明白上面的符号代表的什么意思,

lda文本匹配 lda文本分析_条件概率_10

就是我们需要求的词向量和隐分类,而

lda文本匹配 lda文本分析_条件概率_11

就是已知的分布,即这个条件概率的意思就是在服从Dirichlet分布的条件下的词向量对应的隐分类的概率,那么为什么可以写成上式等号右侧的式子呢?这里我推一下:这就是根据条件概率来回变换而已:

lda文本匹配 lda文本分析_lda文本匹配_12

,大家要很清楚这个条件概率的转换,下面我们开始:                                     

lda文本匹配 lda文本分析_词向量_13

                                                                 

lda文本匹配 lda文本分析_词向量_14

                                                                 

lda文本匹配 lda文本分析_词向量_15

这里需要理由概率图模型,不懂的看这篇文章,因为w是是直接受到

lda文本匹配 lda文本分析_lda文本匹配_16

的影响,而和

lda文本匹配 lda文本分析_条件概率_17

是间接关系,因此可以修改为

lda文本匹配 lda文本分析_lda文本匹配_18

,同理z只和

lda文本匹配 lda文本分析_条件概率_17

是直接关系和

lda文本匹配 lda文本分析_词向量_20

是间接关系,所有可以改为

lda文本匹配 lda文本分析_条件概率_21

,因此上式可以写为如下:                                                                  

lda文本匹配 lda文本分析_词向量_22

就是原始的定义了,大家明白了吧,继续往下:

lda文本匹配 lda文本分析_概率密度_23

上式的

lda文本匹配 lda文本分析_概率密度_24


lda文本匹配 lda文本分析_概率密度_25

的向量形式,大家别晕了,

lda文本匹配 lda文本分析_词向量_26

 上式是根据Dirichlet分布展开的,继续往下

lda文本匹配 lda文本分析_词向量_27

   

lda文本匹配 lda文本分析_条件概率_28

是Dirichlet delta函数,可以看做是Beta函数拓展到K维的情况,但是在有的文献中也直接写成。根据Dirichlet分布在上的积分为1(概率的基本性质),同理我们可以求得:

lda文本匹配 lda文本分析_条件概率_29

由此我们刚开始的联合概率密度可以写为如下:

lda文本匹配 lda文本分析_lda文本匹配_30

由此我们继续引出条件概率:

lda文本匹配 lda文本分析_条件概率_31

 上式大概是什么意思呢?就是说,这里其实就是我们上一篇提到的Gibbs采样形式了,这里我们令

lda文本匹配 lda文本分析_词向量_32

为待采样的点,其他的z为已知的,这样就就可以得到样本,由此可以得到隐分类或者是topic,后面就可以计算

lda文本匹配 lda文本分析_条件概率_33

大家参考原始论文和下面的博客会有更大的收获的,尤其伪代码:

lda文本匹配 lda文本分析_lda文本匹配_34

 

大家参考这篇文章吧,我目前理解也不算很深,以后实战也许会理解的更深,到时候再补一下,抱歉大家,本人能力就这些,只能从大体上理解他是如何工作和训练的,请多包涵。