任务7 -传统机器学习--LDA

本文深入探讨了LDA(隐狄利克雷分配)主题模型的原理,包括LSA、pLSA的基础,以及LDA的生成过程和应用场景。详细介绍了LDA在scikit-learn中的实现,参数设置及文本分类应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

基本原理

LSA(Latent semantic analysis,隐性语义分析)、pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Latent Dirichlet allocation,隐狄利克雷分配)这三种模型都可以归类到话题模型(Topic model,或称为主题模型)中。相对于比较简单的向量空间模型,主题模型通过引入主题这个概念,更进一步地对文本进行语义层面上的理解。

1.1LSA

LSA 模型就是对词-文档共现矩阵进行SVD,从而得到词和文档映射到抽象出的topic上的向量表示。LSA 通过将词映射到topic上得到distributional representation(词的分布表示),进而缓解文档检索、文档相似度计算等任务中所面临的同义词(多词一义)问题:比如我搜索“Java 讲义”,如果系统只是用字符匹配来检索的话,是不会返回一篇出现了“Java 课件”但通篇没出现“讲义”这个词的文档的。所以说,单纯地从词-文档共现矩阵取出词向量表示和文档向量表示的向量空间模型,尽管利用了大规模文档集的统计信息,仍然是无法直接从“语义”这个层面上去理解文本的。但是 LSA 这种将词映射到topic上的向量表示,很难去应对一词多义问题:比如“Java”这个词既可能指编程语言,也可能指爪哇岛,即使这两种含义的“Java”都在文档集里出现过,得到的 LSA 模型也无法很好地区分。
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

1.2pLSA

pLSA 模型是有向图模型,将主题作为隐变量,构建了一个简单的贝叶斯网,采用EM算法估计模型参数。相比于 LSA 略显“随意”的SVD,pLSA 的统计基础更为牢固。

比于 LDA 模型里涉及先验分布,pLSA 模型相对简单:观测变量为文档 dm∈Ddm∈D(文档集共 M 篇文档)、词 wn∈Wwn∈W(设词汇表共有 V 个互不相同的词),隐变量为主题 zk∈Zzk∈Z(共 K 个主题)。在给定文档集后,我们可以得到一个词-文档共现矩阵,每个元素n(dm,wn)n(dm,wn)表示的是词wnwn在文档dmdm中的词频。也就是说,pLSA 模型也是基于词-文档共现矩阵的,不考虑词序

pLSA 模型通过以下过程来生成文档(记号里全部省去了对参数的依赖):

(1) 以概率 P ( d m ) P(d_m) P(dm)选择一篇文档 d m d_m dm
(2) 以概率 P ( z k ∣ d m ) P(z_k∣d_m) P(zkdm)得到一个主题 z k z_k zk
(3) 以概率 P ( w n ∣ z k ) P(w_n∣z_k) P(wnzk) 生成一个词 w n w_n wn

概率图模型如下所示
在这里插入图片描述

图里面的浅色节点代表不可观测的隐变量,方框是指变量重复(plate notation),内部方框表示的是文档 dm 的长度是 N,外部方框表示的是文档集共 M 篇文档。pLSA 模型的参数 θθ 显而易见就是: K × M 个 P ( z k ∣ d m ) K×M个 P(z_k∣d_m) K×MP(zkdm) V × K V×K V×K P ( w n ∣ z k ) P(w_n∣z_k) P(wnzk) P ( z k ∣ d m ) P(z_k∣d_m) P(zkdm) 表征的是给定文档在各个主题下的分布情况,文档在全部主题上服从多项式分布(共 M 个); P ( w n ∣ z k ) P(w_n∣z_k) P(wnzk) 则表征给定主题的词语分布情况,主题在全部词语上服从多项式分布(共 K 个)。

这个贝叶斯网表达的是如下的联合分布:
假设有一篇文档为 在这里插入图片描述
w ⃗ = ( w 1 , w 2 , . . . , w N ) w⃗ =(w_1,w_2,...,w_N) w=(w1,w2,...,wN) ,生成它的概率就是
在这里插入图片描述
但是观察图模型中的 d 、z 、w 可以知道,它们三个是有向图模型里非常典型的 head-to-tail 的情况:当 z 已知时,d 和 w 条件独立,也就是
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
考虑最大化对数似然函数:
在这里插入图片描述
第二项可以直接去掉,那么不妨直接记:
在这里插入图片描述
参数估计:EM算法迭代求解

1.3共轭先验分布

设θ是总体分布中的参数(或参数向量),π(θ)是θ的先验密度函数,假如由抽样信息算得的后验密度函数与π(θ)有相同的函数形式,则称π(θ)是θ的(自然)共轭先验分布。
在贝叶斯统计中,如果后验分布与先验分布属于同类,则先验分布与后验分布被称为共轭分布,而先验分布被称为似然函数的共轭先验。比如,高斯分布家族在高斯似然函数下与其自身共轭 (自共轭)。
具体地说,就是给定贝叶斯公式 p(θ|x)=p(x|θ)p(θ)∫p(x|θ′)p(θ′)dθ′,假定似然函数p(x|θ)p(θ|x)=p(x|θ)p(θ)∫p(x|θ′)p(θ′)dθ′,假定似然函数p(x|θ) 是已知的,问题就是选取什么样的先验分布p(θ)p(θ)会让后验分布与先验分布具有相同的数学形式。
共轭先验的好处主要在于代数上的方便性,可以直接给出后验分布的封闭形式,否则的话只能数值计算。共轭先验也有助于获得关于似然函数如何更新先验分布的直观印象。
所有指数家族的分布都有共轭先验。

1.4LDA

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。

LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。

1.5LDA生成过程

对于语料库中的每篇文档,LDA定义了如下生成过程(generativeprocess):

(1)对每一篇文档,从主题分布中抽取一个主题;
(2)从上述被抽到的主题所对应的单词分布中抽取一个单词;
(3)重复上述过程直至遍历文档中的每一个单词。

语料库中的每一篇文档与T(通过反复试验等方法事先给定)个主题的一个多项分布 (multinomialdistribution)相对应,将该多项分布记为θ。每个主题又与词汇表(vocabulary)中的V个单词的一个多项分布相对应,将这个多项分布记为φ。

二、 LDA应用场景

除了推断出这些主题,LDA还可以推断每篇文章在主题上的分布。例如,X文章大概有60%在讨论“空间探索”,30%关于“电脑”,10%关于其他主题。

聚类: 主题是聚类中心,文章和多个类簇(主题)关联。聚类对整理和总结文章集合很有帮助。参看Blei教授和Lafferty教授对于Science杂志的文章生成的总结。点击一个主题,看到该主题下一系列文章。
特征生成: LDA可以生成特征供其他机器学习算法使用。如前所述,LDA为每一篇文章推断一个主题分布;K个主题即是K个数值特征。这些特征可以被用在像逻辑回归或者决策树这样的算法中用于预测任务。
降维:每篇文章在主题上的分布提供了一个文章的简洁总结。在这个降维了的特征空间中进行文章比较,比在原始的词汇的特征空间中更有意义。

三、LDA优缺点

优点:

1、以标签,类别衡量差异性的有监督降维方式,相对于PCA的模糊性,其目的更明确,更能反映样本间的差异。

缺点:

1、局限性大,受样本种类限制,投影空间的维数最多为样本数量N-1维。

四、LDA 参数学习

1.scikit-learn LDA主题模型概述

在scikit-learn中,LDA主题模型的类在sklearn.decomposition.LatentDirichletAllocation包中,其算法实现主要基于原理篇里讲的变分推断EM算法,而没有使用基于Gibbs采样的MCMC算法实现。

而具体到变分推断EM算法,scikit-learn除了我们原理篇里讲到的标准的变分推断EM算法外,还实现了另一种在线变分推断EM算法,它在原理篇里的变分推断EM算法的基础上,为了避免文档内容太多太大而超过内存大小,而提供了分步训练(partial_fit函数),即一次训练一小批样本文档,逐步更新模型,最终得到所有文档LDA模型的方法。

2.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步。

从上面可以看出,如果learning_method使用"batch"算法,则需要注意的参数较少,则如果使用"online",则需要注意"learning_decay", “learning_offset”,“total_samples”和“batch_size”等参数。无论是"batch"还是"online", n_topics(K), doc_topic_prior(α), topic_word_prior(η)都要注意。如果没有先验知识,则主要关注与主题数K。可以说,主题数K是LDA主题模型最重要的超参数。

五、使用LDA生成主题特征,在之前特征的基础上加入主题特征进行文本分类

没看懂。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值