一、主题模型解决了哪些问题
1、主题模型的概念:
主题模型是提取文本 抽象主题相似度 的一种统计模型,自动分析每个文档,统计文档内词语,根据统计的信息判断当前文档包含哪
些主题以及各个主题所占比例各为多少(将原来 文档-单词 的高维特征数组 >>>>> 文档-主题 的低维数组,因此主题模型可以
起到降维的作用)
2、传统判断文本相似度方法缺点:
传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少(词袋法(单词的个数),TF-IDF等方法),但是这种
做法有两个缺点:① 法没有考虑到文字背后的语义关联 ② 在两个文档共同出现的单词很少甚至没有
3、主题模型解决的问题:
① 考虑到文字背后的语义关联,提取了文本之间主题的相似度,克服了相似内容文本却 含有较少相同词汇 的文本相似度判断问
题。用这个主题相似度去做文本分类/聚类。
③ 原来 文档-单词 的高维特征数组 >>>>> 文档-主题 的低维数组,因此主题模型可以起到降维的作用
4、主题模型的最终目的:
提取每一个文本 各个抽象主题的概率有多高。
后续利用提取的主题相似度来进行文本分类、文本聚类。
5、主题模型(LSA、NMF、LDA)应用场景:
① 提取文本的关键信息特征(主题相似度)
② 降维(将 文档-单词 >>>> 文档-主题)
③ 做推荐
二、主题模型的基本思想
• 主题模型是对文本中隐含主题的一种建模方法,每个主题其实是词表上单词的概率分布;
如图:
- 主题模型公式:
三、常见的三种主题模行
1、LSA 潜在语义分析(Latent Semantic Analysis, LSA)
1、LSA的思想:LSA用的是纯 SVD矩阵分解的思想,但它并没有获取分解后 u singma v 三个矩阵所有的数据,仅仅截取了奇异值较大的
那一部分数据,目的:在信息损失较小的情况下减少大量的计算量。
2、LSA优缺点:
优点:
① 原理简单,一次SVD分解即可得到主题模型,可以同时解决词义的问题。
缺点:
① SVD计算量很大,在数据量较大的情况下计算有些困难
② LSA用的是纯SVD分解,SVD分解后的矩阵存在负值,这对后面计算有不好的影响。
③ LSA用的是SVD分解,它不是一个概率统计模型,缺乏统计基础,结果难以直观的解释。
④ LSA 主题 数量的选取对于结果的影响非常大,很难选择合适的k值;
3、LSA应用场景:
数据规模比较小,而且希望快速的粗粒度的找出一 些主题分布关系,否则我们一般不会使用LSA主题模型
4、LSA transform 结果是矩阵分解的结果(文档-主题),并不是概率值;后续可以会根据欧几里得距离、余弦相似度... 判断相似度。
(1)SVD矩阵分解截取
(2)LSA 矩阵解参数
- LSA案例
题目:LSA 主题提取
结果:
2、NMF 非负矩阵分解
1、NMF模型的思想: NMF虽然和SVD一样都是矩阵分解,但是NMF不同的是:它的目标希望是 将矩阵分解成为两个子矩阵,两个子矩阵中
所有的值均大于等于0。
2、NMF模型的使用场景:
常用于矩阵分解、降维、主题模型等应用场景
3、NMF优缺点:
优点:
缺点:
参考:https://www.csie.ntu.edu.tw/~cjlin/papers/pgradnmf.pdf
4、NMF transform 结果是矩阵分解的结果(文档-主题),并不是概率值;后续可以会根据欧几里得距离、余弦相似度... 判断相似度。
(1)NMF理论公式
(2)NMF模型参数推导
1)基本模型
2)基本模型 + 正则化项
- 坐标轴下降法优化 基本模型 + 正则化项
参考:常见模型参数优化方法
3、LDA 隐含狄利克雷分布(Latent Dirichlet Allocation, LDA)
(1)分布 基础知识:
- 概率知识
- 分布
1)二项分布
2)多项分布
3)Beta分布
1、Beta分布是二项分布的共轭分布,是指一组定义在(0,1)区间的 连续概率分布,Beta分布是二项分布的推广,
Dirichlet分布是 Beta分布的推广
4)Dirichlet分布
(2)LDA 基础知识
• 隐含狄利克雷分布(Latent Dirichlet Allocation, LDA)是一种基于贝叶斯算 法模型,利用先验分布对数据进行似然估计并最
终得到后验分布的一种方式。 LDA是一种比较常用的主题模型。
• LDA的一个假设:
假设文档主题是多项分布,多项分布的参数(先验概率分布)是服从Dirichlet 分布,其实LDA是一种三层的贝叶斯模型。
1、LDA transform 结果是矩阵分解的结果(文档-主题),是概率值,不同于NMF、LSA的矩阵分解结果,LDA是一种基于贝叶斯公式的
概率模型;
- LDA主题模型图解:
- LDA主题模型执行过程
四、主题模型API
安装lda, eg: pip install lda ------- python包
scikit-learn LDA主题模型:
sklearn.decomposition.LatentDirichletAllocation
属性方法参考:https://www.cnblogs.com/pinard/p/6908150.html