传统机器学习–LDA
- pLSA、共轭先验分布;LDA主题模型原理
- LDA应用场景
- LDA优缺点
- LDA 参数学习
- 使用LDA生成主题特征,在之前特征的基础上加入主题特征进行文本分类
一、pLSA、共轭先验分布;LDA主题模型原理
LSA(Latent semantic analysis,隐性语义分析)、pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Latent Dirichlet allocation,隐狄利克雷分配)这三种模型都可以归类到话题模型(Topic model,或称为主题模型)中。
在语义分析问题中,存在同义词和一词多义这两个严峻的问题
LSA可以很好的解决同义词问题,却无法妥善处理一词多义问题。
PLSA则可以同时解决同义词和一词多义两个问题。
-
LSA 模型就是对词-文档共现矩阵进行SVD,从而得到词和文档映射到抽象出的topic上的向量表示。
LSA试图将原始矩阵降维到一个潜在的概念空间(维度不超过 n ),然后每个单词或文档都可以用该空间下的一组权值向量(也可认为是坐标)来表示,这些权值反应了与对应的潜在概念的关联程度的强弱。
这个降维是通过对该矩阵进行奇异值分解(SVD, singular value decomposition)做到的。 -
pLSA由LSA发展而来,LSA使用线性代数方法,对document-word矩阵进行SVD分解。PLSA则使用了一个概率图模型,引入了一个隐变量topic(可以认为是文档的主题),然后进行统计推断。
生成文档方式:
-
LDA由PLSA发展而来,也用于隐含语义分析;PLSA也定义了一个概率图模型,假设了数据的生成过程,但是不是一个完全的生成过程:没有给出先验。因此PLSA给出的是一个最大似然估计(ML)或者最大后验估计(MAP)。
LDA拓展了PLSA,定义了先验,因此LDA给出的是一个完整的贝叶斯估计。生成文档过程:
二、LDA应用场景
- 特征生成:LDA可以生成特征供其他机器学习算法使用。
- 在推荐系统中的应用
- 降维:每篇文章在主题上的分布提供了一个文章的简洁总结。
- 在关键词提取的应用
- 中文标签/话题提取/推荐
- LDA相似文章聚类
- 文本挖掘中主题追踪的可视化呈现
- 高效的主题模型的建立
- 排序
三、LDA优缺点
-
LSA的优点:
1)低维空间表示可以刻画同义词,同义词会对应着相同或相似的主题。
2)降维可去除部分噪声,是特征更鲁棒。
3)充分利用冗余数据。
4)无监督/完全自动化。
5)与语言无关。 -
LSA的缺点:
1)LSA可以处理向量空间模型无法解决的一义多词(synonymy)问题,但不能解决一词多义(polysemy)问题。因为LSA将每一个词映射为潜在语义空间中的一个点,也就是说一个词的多个意思在空间中对于的是同一个点,并没有被区分。
2)SVD的优化目标基于L-2 norm 或者 Frobenius Norm 的,这相当于隐含了对数据的高斯分布假设。而 term 出现的次数是非负的,这明显不符合 Gaussian 假设,而更接近 Multi-nomial 分布。
3)特征向量的方向没有对应的物理解释。
4)SVD的计算复杂度很高,而且当有新的文档来到时,若要更新模型需重新训练。
5)没有刻画term出现次数的概率模型。
6)对于count vectors 而言,欧式距离表达是不合适的(重建时会产生负数)。
7)维数的选择是ad-hoc的。
四、LDA 参数学习
scikit-learn LDA主题模型主要参数和方法:
LatentDirichletAllocation类的主要输入参数:
- n_topics:即我们的隐含主题数K,需要调参。K的大小取决于我们对主题划分的需求,比如我们只需要类似区分是动物,植物,还是非生物这样的粗粒度需求,那么K值可以取的很小,个位数即可。如果我们的目标是类似区分不同的动物以及不同的植物,不同的非生物这样的细粒度需求,则K值需要取的很大,比如上千上万。此时要求我们的训练文档数量要非常的多。
- doc_topic_prior:即我们的文档主题先验Dirichlet分布θd的参数α。一般如果我们没有主题分布的先验知识,可以使用默认值1/K。
- topic_word_prior:即我们的主题词先验Dirichlet分布βk的参数η。一般如果我们没有主题分布的先验知识,可以使用默认值1/K。
- learning_method: 即LDA的求解算法。有 ‘batch’ 和 ‘online’两种选择。 ‘batch’即我们在原理篇讲的变分推断EM算法,而"online"即在线变分推断EM算法,在"batch"的基础上引入了分步训练,将训练样本分批,逐步一批批的用样本更新主题词分布的算法。默认是"online"。选择了‘online’则我们可以在训练时使用partial_fit函数分布训练。不过在scikit-learn 0.20版本中默认算***改回到"batch"。建议样本量不大只是用来学习的话用"batch"比较好,这样可以少很多参数要调。而样本太多太大的话,"online"则是首先了。
- learning_decay:仅仅在算法使用"online"时有意义,取值最好在(0.5, 1.0],以保证"online"算法渐进的收敛。主要控制"online"算法的学习率,默认是0.7。一般不用修改这个参数。
- learning_offset:仅仅在算法使用"online"时有意义,取值要大于1。用来减小前面训练样本批次对最终模型的影响。
- max_iter :EM算法的最大迭代次数。
- total_samples:仅仅在算法使用"online"时有意义, 即分步训练时每一批文档样本的数量。在使用partial_fit函数时需要。
- batch_size: 仅仅在算法使用"online"时有意义, 即每次EM算法迭代时使用的文档样本的数量。
- mean_change_tol :即E步更新变分参数的阈值,所有变分参数更新小于阈值则E步结束,转入M步。一般不用修改默认值。
- max_doc_update_iter: 即E步更新变分参数的最大迭代次数,如果E步迭代次数达到阈值,则转入M步。
五、使用LDA生成主题特征,在之前特征的基础上加入主题特征进行文本分类
from sklearn.decomposition import LatentDirichletAllocation
n_topics = 30
lda = LatentDirichletAllocation(n_topics=n_topic,
max_iter=50,
learning_method='batch')
lda.fit(tf) #tf即为Document_word Sparse Matrix
完整代码见 https://blog.csdn.net/TiffanyRabbit/article/details/76445909
参考资料
- NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型
https://www.cnblogs.com/Determined22/p/7237111.html - 自然语言处理之LSA http://zhikaizhang.cn/2016/05/31/自然语言处理之LSA/
- 自然语言处理之PLSA http://zhikaizhang.cn/2016/06/17/自然语言处理之PLSA/
- 自然语言处理之LDA http://zhikaizhang.cn/2016/06/29/自然语言处理之LDA/
- NLP︱LDA主题模型的应用难题、使用心得及从多元统计角度剖析 https://blog.csdn.net/sinat_26917383/article/details/52233341
- LSA,pLSA原理及其代码实现 http://www.cnblogs.com/bentuwuying/p/6219970.html
- 一文详解LDA主题模型 https://zhuanlan.zhihu.com/p/31470216
- 用scikit-learn学习LDA主题模型 https://www.cnblogs.com/pinard/p/6908150.html
- 【sklearn】利用sklearn训练LDA主题模型及调参详解 https://blog.csdn.net/TiffanyRabbit/article/details/76445909