机器学习_18_主题模型

背景

应用于自然语言居多

  • 传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如IT-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似的。
  • 举个例子,有两个句子如下:
    • “乔布斯离我们而去了。”
    • “苹果价格会不会下降?”

一、主题模型

  • 主题模型(Topic Model)是用来在一系列文档中发现抽象主题的一种统计模型。直观来讲,如果一篇文章有一个中心思想,那么一定存在一些特定词语会出现的比较频繁。如果一篇文章有多个主题,而且每个主题所占的比例各部相同,并且每个主题个关键词出现的次数也不相同。

  • 主题模型就是一种自动分析每个文档,统计文档内词语,根据统计的信息判断当前文档包含哪些主题以及各个主题所占比例各为多少。

  • 主题模型是对文本中隐含主题的一种建模方法,每个主题其实是词表上单词的概率分布;

  • 主题模型是一种生成模型,一篇文章中每个词都是通过“以一种概率选择某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的;

P ( w o r d / d o c ) = ∑ t o p i c P ( t o p i c / d o c ) ∗ P ( w o r d / t o p i c ) P(word/doc)= \sum_{topic} P(topic/doc)*P(word/topic) Pword/doc=topicPtopic/docPword/topic

  • 主题模型克服了传统信息检索中文档相似度计算方法的缺点,并且能够在海量的数据中找出文字间的语义主题。主题模型在自然语言和给予文本的搜索上起到了重要的作用。

1.1 问题

怎样才能生成主题?对文章的主题应该怎么分析?这是主题模型要解决的问题。

在这里插入图片描述

二、矩阵分解方法

2.1 SVD 的特性

  • 对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。
  • 由于可以使用小矩阵来近似的描述样本信息的这个重要特性,SVD可以常用于PCA降维、推荐系统以及主题模型等场景中。

在这里插入图片描述

2.2 NMF(非负矩阵分解)

  • **非负矩阵分解(Non-negative Matrix Factorization, NMF)**是一种常用的矩阵分解方式,常用于矩阵分解、降维、主题模型等应用场景。

  • NMF虽然和SVD一样都是矩阵分解,但是NMF不同的是:它的目标希望是将矩阵分解成为两个子矩阵。

  • 参考:https://www.csie.ntu.edu.tw/~cjlin/papers/pgradnmf.pdf

在这里插入图片描述

2.2.1 NMF求解

  • 在NMF中求解出来的WH,分别体现的是文本和主题的概率相关度,以及词和主题的概率相关度;

在这里插入图片描述

  • NMF的期望 是找到两个W、H矩阵,使得WH的矩阵乘积结果和对应的原矩阵V对应位置的值相比误差尽可能的小。

在这里插入图片描述

  • NMF的目标函数 中总共包含了mk+kn个参数,可以直接使用梯度下降法或者拟牛顿法来进行求解。

在这里插入图片描述

  • 为了防止过拟合,也可以在NMF的目标函数的基础上添加一个正则化项。

在这里插入图片描述

但是当加入L1正则项后,由于没法求解出正常的导函数出来(导函数不是连续的),也就没法使用梯度下降法和拟牛顿法求解参数,此时一般采用坐标轴下降法来进行参数的求解。

三、主题模型—LSA

  • 潜在语义分析(Latent Semantic Analysis, LSA),也叫做Latent Semantic Indexing, LSI. 是一种常用的简单的主题模型。LSA是基于奇异值分解(SVD)的方法得到文本主题的一种方式。

在这里插入图片描述

  • 总结: 我们输入的有m个文本,每个文本有n个词。而Aij则对应第i个文本的第j个词的特征值。k是我们假设的主题数,一般要比文本数少。

SVD分解后,Uil 对应第i个文本和第l个主题的相关度。

Vjm 对应第j个词和第m个词义的相关度。

lm 对应第l个主题和第m个词义的相关度。

3.1 LSA案例

在这里插入图片描述

  • 通过SVD矩阵分解我们可以得到文本、词与主题、语义之间的相关性,但是这个时候计算出来的内容存在负数,我们比较难解释,所以我们可以对LSI得到文本主题矩阵使用余弦相似度计算文本的相似度的计算。最终我们得到第一个和第三个文档比较相似,和第二个文档不太相似。(备注:这个时候直接在文本主题矩阵的基础上直接应用聚类算法即可)

在这里插入图片描述

3.2 LSA主题模型总结

  • 除非数据规模比较小,而且希望快速的粗粒度的找出一些主题分布关系,否则我们一般不会使用LSA主题模型。

  • 优点: 原理简单,一次SVD分解即可得到主题模型,可以同时解决词义的问题。

  • 缺点:

    1、SVD分解的计算非常耗时,对于高维度矩阵做SVD分解非常困难;

    2、主题模型数量的选取对于结果的影响非常大,很难选择合适的k值;(k值经验给定)

    3、LSA模型不是概率模型,缺乏统计基础,结果难以直观的解释。

四、主题模型—pLSA

pLSA 的另一个名称是Probabilistic Latent Semantic Indexing(pLSI),基于概率的潜在语义分析模型。假定在一篇文档d中,主题c来表示,词语w来表示,则有下列公式:

在这里插入图片描述

pLSA的不足:

1、概率模型不够完备,在文档层面上没有提供一个完善的概率模型。使得pLSA无法成为一个好的模型。我们只能在确定了文档的概率分布后才能对模型进行随机抽样。

2、随着文档和词语个数的增加,模型的复杂度也会增加得很快。

五、主题模型—LDA

  • 隐含狄利克雷分布(Latent Dirichlet Allocation, LDA)是一种基于贝叶斯算法模型,利用先验分布对数据进行似然估计并最终得到后验分布的一种方式。 LDA是一种比较常用的主题模型。
  • LDA假设文档主题是多项分布,多项分布的参数(先验分布)是服从Dirichlet分布,其实LDA是一种三层的贝叶斯模型。

在这里插入图片描述

  1. 共有M篇文档,每个文档有Nm个单词,一共涉及到K个主题;
  2. 每篇文档都有各自的主题,主题分布是多项式分布,该多项式分布的参数服从Dirichlet分布,该Dirichlet分布的参数为α;
  3. 每个主题都有各自的词分布,词分布为为多项式分布,该多项式分布的参数服从Dirichlet分布,该Dirichlet分布的参数为η;
  4. 对于某篇文档d中的第n个词,首先从该文档的主题分布中采用一个主题,然后再这个主题对应的词分布中采用一个词,不断重复该操作,直到m篇文档全部完成上述过程。

5.1 LDA详细解释

  • 词汇表中共有V个term(不可重复); 词典中的词不能重复

  • 语料库中共有m篇文档d1,d2,…,d;对于文档di,是由Ni个word组成的(word可重复);语料库共有K个主题T1,T2,…,Tk; 单词word必然是词典中的词。

  • α和η是先验分布(Dirichlet分布)的参数;

  • θ是每篇文档的主题分布,是一个K维的向量; 维度数和主题数有关,都是K个。

  • 对于第i篇文档di,在主题分布θi下,可以确定一个具体的主题zij=k; 选多项式分布中概率最大的那个主题。

  • β是每个主题的词分布,是一个V维的向量;

  • 由zij选择βzij(单词概率),表示由词分布βzij确定term,即可得到最终的观测值wij

在这里插入图片描述

5.2 LDA理解

在这里插入图片描述

5.3 LDA参数学习-Gibbs采样

  • 对于一个n维的概率分布π(x1,x2,…,xn),可以通过在n个坐标上轮换采样,来得到新的样本,对于轮换到任意一个坐标xi上的转移,马尔可夫链的状态转移概率为p(xi|x1,x2,…,xi-1,xi+1,…,xn),即固定n-1个坐标轴,在某一个坐标上移动。
  • Gibbs采样算法在高维空间采样的时候具有比较高的优势,Gibbs采样的过程比较类似这个坐标轴下降法。

5.3.1 LDA参数学习-Gibbs采样算法流程

在这里插入图片描述

5.3.2 LDA参数学习-Gibbs采样

  • 给定一个文档集合,w是可以观察到的值,α和η是根据经验给定的先验参数,其它的各个z,θ、β都是未知的隐含变量,都是需要根据观测到的数据进行学习的。

  • 具体来讲,所有文档联合起来形成的词向量 w 是已知数据,但是不知道语料库的主题 z 的分布。假设可以先求解出w、z的联合分布p(w,z),进而就可以求出某个词 wi 对应主题特征 zi 的条件概率分布 p(zi=k|w,z-i) ,其中z-i 表示去掉下标为 i 后的主题分布,有了条件概率,那么就可以使用Gibbs采样,最终可以得到第 i 个词的主题。

  • 如果通过采样得到所有词的主题,那么可以通过统计所有词的主题数,从而得到 各个主题的词分布。接着统计各个文档对应词的主题数,从而可以得到各个文档的主题分布。

1、简化Dirichlet分布表达式:

在这里插入图片描述

2、计算文档的主题条件分布:

在这里插入图片描述

3、在第d个文档中,第k个主题的词的个数表示为:nd(k), 对应的多项分布的计数可以表示为 :

在这里插入图片描述

4、有了一个文档的主题条件分布,则可以得到所有文档的主题条件分布为:

在这里插入图片描述

5、使用同样的方式,可以得到第k个主题对应的词的条件分布p(w|z,η)为:

在这里插入图片描述

6、其中第k个主题中,第v个词的个数表示为nkv,对应的多项式分布计数表示为:

在这里插入图片描述

7、最终得到主题和词向量的联合分布为:

在这里插入图片描述

8、基于联合分布,就可以使用求解Gibbs采样所需要的条件分布p(zi=k|w,z-i);对于下标 i,由于它对应的词wi是可以观察到的,因此有公式如下:

在这里插入图片描述

9、对于zi=k,wi=t,只涉及到第 d 篇文档和第 k 个主题两个Dirichlet共轭,即:
在这里插入图片描述

10、至于其他的Dirichlet共轭和这两个是互相独立的,也就是说从语料库中去掉zi和wi后,并不会改变共轭结构。所以对应的后验分布为:

在这里插入图片描述

11、开始计算Gibbs采样的条件概率:

在这里插入图片描述

12、Dirichlet分布的期望公式如下,带入条件概率中,可以得到最终的条件概率公式:

在这里插入图片描述

5.3.3 LDA参数学习-Gibbs采样训练流程

1、选择合适的主题数K,选择合适的超参数α、η;

2、对于语料库中每一篇文档的每一个词,随机的赋予一个主题编号z;

3、重新扫描语料库,对于每一个词,利用Gibbs采样公式更新它的topic的编号,并更新语料库中该词的编号。

4、重复第三步中基于坐标轴轮询的Gibbs采样,直到Gibbs采样收敛。

5、统计语料库中各个文档各个词的主题,得到文档主题分布;然后统计语料库中各个主题词的分布,得到主题与词的分布。

5.3.4 LDA参数学习-Gibbs采样预测流程

1、对应当前文档的每一个词,随机的赋予一个主题编号z;

2、重新扫描当前文档,对于每一个词,利用Gibbs采样算法更新它的topic编号。

3、重复第二步的基于坐标轴轮换的Gibbs采样,直到Gibbs采样收敛。

4、统计文档中各个词的主题,得到该文档主题分布。

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少云清

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值