文本建模PLSA与LDA模型

文本建模PLSA与LDA模型 – 潘登同学的Machine Learning笔记

文本生成过程

一篇文档,可以看成是一组有序的词的序列 d = ( w 1 , w 2 , … , w n ) d=(w_1,w_2,\ldots,w_n) d=(w1,w2,,wn) . 从统计学角度来看,文档的生成可以看成是上帝抛掷骰子生成的结果,每一次抛掷骰子都生成一个词汇,抛掷N词生成一篇文档。在统计文本建模中,我们希望猜测出上帝是如何玩这个游戏的,这会涉及到两个最核心的问题:

  • 上帝都有什么样的骰子;
  • 上帝是如何抛掷这些骰子的;

第一个问题就是表示模型中都有哪些参数,骰子的每一个面的概率都对应于模型中的参数;第二个问题就表示游戏规则是什么,上帝可能有各种不同类型的骰子,上帝可以按照一定的规则抛掷这些骰子从而产生词序列。

Unigram Model

在Unigram Model中,我们采用词袋模型,假设了文档之间相互独立,文档中的词汇之间相互独立。假设我们的词典中一共有 V 个词 v 1 , v 2 , … , v V v_1,v_2,\ldots,v_V v1,v2,,vV ,那么最简单的 Unigram Model 就是认为上帝是按照如下的游戏规则产生文本的。

  1. 上帝只有一个骰子,这个骰子有V面,每个面对应一个词,各个面的概率不一;
  2. 每抛掷一次骰子,抛出的面就对应的产生一个词;如果一篇文档中N个词,就独立的抛掷n次骰子产生n个词;

n-gram model

对于n-gram model来说就是Unigram Model加了一个假设,假设当前词会受前n个词的影响,于是就用条件概率来生成词,那么n-gram model就是认为上帝是按照如下的游戏规则产生文本的。

  1. 上帝只有 C V n C_V^n CVn个骰子,这个骰子有V面,每个面对应一个词,各个面的概率不一;
  2. 每抛掷一次骰子,抛出的面就对应的产生一个词;这个骰子会根据前n次抛掷的情况选择,这样N次,生成一篇文章

PLSA模型(Probabilistic latent semantic analysis)

Unigram Model模型中,没有考虑主题词这个概念。我们人写文章时,写的文章都是关于某一个主题的,不是满天胡乱的写,比如一个财经记者写一篇报道,那么这篇文章大部分都是关于财经主题的,当然,也有很少一部分词汇会涉及到其他主题。所以,PLSA认为生成一篇文档的生成过程如下:

  1. 现有两种类型的骰子,一种是doc-topic骰子,每个doc-topic骰子有K个面,每个面一个topic的编号;一种是topic-word骰子,每个topic-word骰子有V个面,每个面对应一个词;
  2. 现有K个topic-word骰子,每个骰子有一个编号,编号从1到K;
  3. 生成每篇文档之前,先为这篇文章制造一个特定的doc-topic骰子,重复如下过程生成文档中的词:
    3.1 投掷这个doc-topic骰子,得到一个topic编号z;
    3.2 选择K个topic-word骰子中编号为z的那个,投掷这个骰子,得到一个词;

在这里插入图片描述

LDA 模型

生成文档步骤

  1. 按照先验概率 p ( d i ) p(d_i) p(di)选择一篇文档 d i d_i di
  2. 从Dirichlet分布 α \alpha α中取样生成文档 d i d_i di的主题分布 θ i \theta_i θi,主题分布 θ i \theta_i θi由参数为 α \alpha α的Dirichlet分布生成
  3. 从主题的多项式分布 θ i \theta_i θi中取样生成文档 d i d_i di第 j 个词的主题 z i , j z_{i,j} zi,j
  4. 从Dirichlet分布 β \beta β中取样生成主题 z i , j z_{i,j} zi,j对应的词语分布 ϕ z i , j \phi_{z_{i,j}} ϕzi,j,词语分布 ϕ z i , j \phi_{z_{i,j}} ϕzi,j由参数为 β \beta β的Dirichlet分布生成
  5. 从词语的多项式分布 ϕ z i , j \phi_{z_{i,j}} ϕzi,j中采样最终生成词语 w i , z w_{i,z} wi,z

在这里插入图片描述

下图可以加深对上面的理解

为什么要选择这些分布

为什么选择狄利克雷(Dirichlet)分布作为先验分布,因为待估计的总体分布是多项分布,将先验分布选择为狄利克雷(Dirichlet)分布,那么后验分布也就是狄利克雷(Dirichlet)分布,在做极大似然时候就方便计算;这里的重要概念是共轭先验分布; 共轭先验分布在数量统计里面讲过,对于一个共轭先验分布用简单的数学表达就是
P ( θ ∣ x ) = P ( θ , x ) P ( x ) , 其 中 P ( θ ∣ x ) 、 P ( θ , x ) 都 服 从 同 一 分 布 ( 可 能 参 数 不 同 ) P(\theta|x) = \frac{P(\theta,x)}{P(x)},其中P(\theta|x)、P(\theta,x)都服从同一分布(可能参数不同) P(θx)=P(x)P(θ,x)P(θx)P(θ,x)()

下图通过概率图的形式描述了这一过程

其中 θ ⃗ m 与 ϕ ⃗ k \vec{\theta}_m与\vec{\phi}_k θ mϕ k是模型去估计总体的参数,而 α ⃗ 与 β ⃗ \vec{\alpha}与\vec{\beta} α β 是这些待估参数的先验分布,通过最大后验概率来估计总体参数…

Python实现

文本预处理-分词

在这里插入图片描述

LDA分析

在这里插入图片描述

结果展现

LDA

在这里插入图片描述

主题数目选择–困惑度

主题数目肯定是越多越好,但是越多就说明泛化能力不强,所以根据elbow原则选择主题数目

在这里插入图片描述

源码请移步至我的github中获取,因为代码实现难免会有bug,github中记录了常见的bug及解决方案…

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PLSA(Probabilistic Latent Semantic Analysis)和LDA(Latent Dirichlet Allocation)都是主题建模方法,但在方法和应用上存在一些区别: 1. 原理不同:PLSA是一种基于生成模型的主题建模方法,假设文本数据由若干个主题构成,每个主题由若干个词汇组成,文本数据中的每个词汇都可以由这些主题生成。而LDA是一种基于贝叶斯概率模型的主题建模方法,假设每个文档中的主题是从一个全局主题分布中采样而得的。 2. 模型参数不同:在PLSA中,主题-词分布矩阵和文档-主题分布矩阵是模型的参数,需要通过最大化似然函数来估计;而在LDA中,主题-词分布矩阵、文档-主题分布矩阵和全局主题分布都是模型的参数,需要通过贝叶斯推断来估计。 3. 处理未见词汇的能力不同:PLSA无法处理未见词汇,因为它只能利用已知词汇的信息;而LDA可以通过在模型中引入Dirichlet分布来处理未见词汇,使得模型具有更好的泛化能力。 4. 模型鲁棒性不同:PLSA对噪声和异常值比较敏感,因为它没有考虑到数据中的噪声和异常值;而LDA采用了Dirichlet先验分布,可以有效地减少噪声的影响,提高模型的鲁棒性。 总的来说,PLSALDA都是主题建模方法,但在模型原理、参数估计、处理未见词汇和鲁棒性等方面存在一定差异,需要根据具体的应用场景选择合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

PD我是你的真爱粉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值