自然语言处理 第七期

传统机器学习–LDA

  1. pLSA、共轭先验分布;LDA主题模型原理
  2. LDA应用场景
  3. LDA优缺点
  4. LDA 参数学习
  5. 使用LDA生成主题特征,在之前特征的基础上加入主题特征进行文本分类

一、pLSA、共轭先验分布;LDA主题模型原理

LSA(Latent semantic analysis,隐性语义分析)、pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Latent Dirichlet allocation,隐狄利克雷分配)这三种模型都可以归类到话题模型(Topic model,或称为主题模型)中。

在语义分析问题中,存在同义词和一词多义这两个严峻的问题
LSA可以很好的解决同义词问题,却无法妥善处理一词多义问题。
PLSA则可以同时解决同义词和一词多义两个问题。

  1. LSA 模型就是对词-文档共现矩阵进行SVD,从而得到词和文档映射到抽象出的topic上的向量表示。
    LSA试图将原始矩阵降维到一个潜在的概念空间(维度不超过 n ),然后每个单词或文档都可以用该空间下的一组权值向量(也可认为是坐标)来表示,这些权值反应了与对应的潜在概念的关联程度的强弱。
    这个降维是通过对该矩阵进行奇异值分解(SVD, singular value decomposition)做到的。

  2. pLSA由LSA发展而来,LSA使用线性代数方法,对document-word矩阵进行SVD分解。PLSA则使用了一个概率图模型,引入了一个隐变量topic(可以认为是文档的主题),然后进行统计推断。

    生成文档方式:
    pLSA

  3. LDA由PLSA发展而来,也用于隐含语义分析;PLSA也定义了一个概率图模型,假设了数据的生成过程,但是不是一个完全的生成过程:没有给出先验。因此PLSA给出的是一个最大似然估计(ML)或者最大后验估计(MAP)。
    LDA拓展了PLSA,定义了先验,因此LDA给出的是一个完整的贝叶斯估计

    生成文档过程:
    LDA

二、LDA应用场景

  1. 特征生成:LDA可以生成特征供其他机器学习算法使用。
  2. 在推荐系统中的应用
  3. 降维:每篇文章在主题上的分布提供了一个文章的简洁总结。
  4. 在关键词提取的应用
  5. 中文标签/话题提取/推荐
  6. LDA相似文章聚类
  7. 文本挖掘中主题追踪的可视化呈现
  8. 高效的主题模型的建立
  9. 排序

三、LDA优缺点

  1. LSA的优点
    1)低维空间表示可以刻画同义词,同义词会对应着相同或相似的主题。
    2)降维可去除部分噪声,是特征更鲁棒。
    3)充分利用冗余数据。
    4)无监督/完全自动化。
    5)与语言无关。

  2. 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类的主要输入参数:

  1. n_topics:即我们的隐含主题数K,需要调参。K的大小取决于我们对主题划分的需求,比如我们只需要类似区分是动物,植物,还是非生物这样的粗粒度需求,那么K值可以取的很小,个位数即可。如果我们的目标是类似区分不同的动物以及不同的植物,不同的非生物这样的细粒度需求,则K值需要取的很大,比如上千上万。此时要求我们的训练文档数量要非常的多。
  2. doc_topic_prior:即我们的文档主题先验Dirichlet分布θd的参数α。一般如果我们没有主题分布的先验知识,可以使用默认值1/K。
  3. topic_word_prior:即我们的主题词先验Dirichlet分布βk的参数η。一般如果我们没有主题分布的先验知识,可以使用默认值1/K。
  4. learning_method: 即LDA的求解算法。有 ‘batch’ 和 ‘online’两种选择。 ‘batch’即我们在原理篇讲的变分推断EM算法,而"online"即在线变分推断EM算法,在"batch"的基础上引入了分步训练,将训练样本分批,逐步一批批的用样本更新主题词分布的算法。默认是"online"。选择了‘online’则我们可以在训练时使用partial_fit函数分布训练。不过在scikit-learn 0.20版本中默认算法会改回到"batch"。建议样本量不大只是用来学习的话用"batch"比较好,这样可以少很多参数要调。而样本太多太大的话,"online"则是首先了。
  5. learning_decay:仅仅在算法使用"online"时有意义,取值最好在(0.5, 1.0],以保证"online"算法渐进的收敛。主要控制"online"算法的学习率,默认是0.7。一般不用修改这个参数。
  6. learning_offset:仅仅在算法使用"online"时有意义,取值要大于1。用来减小前面训练样本批次对最终模型的影响。
  7. max_iter :EM算法的最大迭代次数。
  8. total_samples:仅仅在算法使用"online"时有意义, 即分步训练时每一批文档样本的数量。在使用partial_fit函数时需要。
  9. batch_size: 仅仅在算法使用"online"时有意义, 即每次EM算法迭代时使用的文档样本的数量。
  10. mean_change_tol :即E步更新变分参数的阈值,所有变分参数更新小于阈值则E步结束,转入M步。一般不用修改默认值。
  11. 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

参考资料

  1. NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型
    https://www.cnblogs.com/Determined22/p/7237111.html
  2. 自然语言处理之LSA http://zhikaizhang.cn/2016/05/31/自然语言处理之LSA/
  3. 自然语言处理之PLSA http://zhikaizhang.cn/2016/06/17/自然语言处理之PLSA/
  4. 自然语言处理之LDA http://zhikaizhang.cn/2016/06/29/自然语言处理之LDA/
  5. NLP︱LDA主题模型的应用难题、使用心得及从多元统计角度剖析 https://blog.csdn.net/sinat_26917383/article/details/52233341
  6. LSA,pLSA原理及其代码实现 http://www.cnblogs.com/bentuwuying/p/6219970.html
  7. 一文详解LDA主题模型 https://zhuanlan.zhihu.com/p/31470216
  8. 用scikit-learn学习LDA主题模型 https://www.cnblogs.com/pinard/p/6908150.html
  9. 【sklearn】利用sklearn训练LDA主题模型及调参详解 https://blog.csdn.net/TiffanyRabbit/article/details/76445909
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值