LDA简介

在老师讲主题模型的时候看到这个LDA,刹时觉得很熟悉,在机器学习中,其实有两个LDA,一个是平时接触比较多的Linear Discriminant Analysis即线性判别分析,另一个便是这篇文章的主角Latent Dirichlet Allocation即隐含狄利克雷分布。

提出目的

用于推测文档(document)的主题分布,以及主题(topic)的词(word)分布;换个角度来说其实这个模型解决了文档和词汇的软聚类,即文档的主题分布概率可以当作文档聚类的指标,而词汇则归属于其隶属的主题而达到软聚类的效果。
从而用于大量文档没有人力分类的情况。

LDA模型的核心思想

引入

人们在写一篇文章时,肯定不是随意单词或语句的堆砌,而是有一个或多个核心主题,这也是主题模型的基本思想,即一个document并不是直接和word相关,而是一篇document有一个或多个topic,每个topic具有对应的主题单词分布(如凸优化topic,凸函数、凸集等单词分布较多),然后从这些分布中抽取单词形成一篇document,也就是说是这么的一个过程:
topic->word->document

生成文档

下面详细解释下LDA模型生成文档的过程:假设m篇文档,对应单词数n,主题数k(在训练过程中需提前制定,本文先不介绍训练过程,只介绍思想)

符号

含义

主题模型中的主题个数和主题计数向量的编程 主题模型lda_模式识别

文档-主题分布的超参数

主题模型中的主题个数和主题计数向量的编程 主题模型lda_主题模型_02

文档m的主题分布

主题模型中的主题个数和主题计数向量的编程 主题模型lda_多项式_03

文档m第n个词的主题

主题模型中的主题个数和主题计数向量的编程 主题模型lda_多项式_04

文档m第n个词

主题模型中的主题个数和主题计数向量的编程 主题模型lda_聚类_05

主题-词语分布的超参数

主题模型中的主题个数和主题计数向量的编程 主题模型lda_模式识别_06

主题k的词分布

主题模型中的主题个数和主题计数向量的编程 主题模型lda_模式识别_07


LDA采用的是贝叶斯派的思想,即认为主题分布和词分布都不是确定的,它们本身也服从一个分布。

具体语言描述步骤如下:
1.选择文档主题模型中的主题个数和主题计数向量的编程 主题模型lda_多项式_08
2.以主题模型中的主题个数和主题计数向量的编程 主题模型lda_主题模型_09为超参数的Dirichlet分布采样生成文档主题模型中的主题个数和主题计数向量的编程 主题模型lda_多项式_08的主题分布主题模型中的主题个数和主题计数向量的编程 主题模型lda_多项式_11
3.多项式主题分布主题模型中的主题个数和主题计数向量的编程 主题模型lda_多项式_11生成文档m第n个词的主题主题模型中的主题个数和主题计数向量的编程 主题模型lda_模式识别_13
4.以主题模型中的主题个数和主题计数向量的编程 主题模型lda_聚类_14为超参数的Dirichlet分布采样生成主题主题模型中的主题个数和主题计数向量的编程 主题模型lda_多项式_11的词语分布主题模型中的主题个数和主题计数向量的编程 主题模型lda_多项式_16
5.多项式分布主题模型中的主题个数和主题计数向量的编程 主题模型lda_多项式_16采样生成文档m第n个词主题模型中的主题个数和主题计数向量的编程 主题模型lda_主题模型_18

需要注意的是,本篇文章讲述的是LDA正向生成文档的思想过程,是理解LDA模型训练的前提,笔者感觉训练的过程还是挺难的,如果只是想要了解的同学看本篇就好,想要深究的可以移步参考的文章。

LDA&矩阵分解

主题模型中的主题个数和主题计数向量的编程 主题模型lda_主题模型_19
其中矩阵X,m行d列,每行为一篇文章,列代表单词;
矩阵S可以视为样本的新表示,每一行视为对应topic的系数;
矩阵T可以视为空间变换函数,每行视为一个topic;

等式右边的矩阵乘法即可以理解为一片文章是不同topic的线性组合,矩阵乘法相当于实现了k个topic线性组合的效果。

以这种角度,可以将topic模型视为对样本的学习和新表示,也可以视为一种降维。

参考:详解LDA