sklearn.decomposition.LatentDirichletAllocation接口详解

1. Latent Dirichlet Allocation(LDA)

  • 隐式狄利克雷分布是一个生成概率模型,用于离散的数据集比如文本语料库
  • 同时它也是一个主题模型,用来从一堆文件s中发现抽象的主题s

LDA 的图形模型是一个三级生成模型

在图形模型中显示的关于符号s的说明,可在Hoffman等人(2013年)中找到

  • 语料库是 D D D 篇文档s的集合
  • 一篇文档是一序列的 N N N 个词s
  • 在我们的语料库中有 K K K个主题s
  • 这些框表示重复采样

在图形模型中,每一个节点都是一个随机变量并且在生成过程中发挥着作用。

  • 阴影节点表示观察到的变量(显而易见,给我们一篇文章,我们只能看见词 w d , n w_{d,n} wd,n
    【在这种情况下,语料库中的词语s(多篇文章中的词语)是我们唯一能够观察到的数据。】

  • 未遮盖的节点表示隐藏的(潜在的)变量。
    【潜在的变量决定语料库中主题s的随机混合以及文档s中的词语s的分布】

LDA的目标是使用观察到的词语s去推断隐藏的主题结构。

在建模文本语料库时,模型假设如下的生成过程:
一个语料库有 D D D 篇文档s, K K K个主题s,注意这个 K K K与API中的n_components相关

  1. 对于每一个主题 k ∈ K k\in K kK,绘制出 β k ∼ D i r i c h l e t ( η ) \beta_k \sim \mathrm{Dirichlet}(\eta) βkDirichlet(η)
    这提供了词语的分布,即一个词出现在主题 k k k中的概率。
    η \eta ηtopic_word_prior有关

  2. 对于每一个文档 d ∈ D d\in D dD,绘制出 θ d ∼ D i r i c h l e t ( α ) \theta_d \sim \mathrm{Dirichlet}(\alpha) θdDirichlet(α)
    α \alpha αdoc_topic_prior有关

  3. 对于在一篇文档 d d d 中的每一个词语 i i i:
    第一步:绘制出主题分布 z d i ∼ M u l t i n o m i a l ( θ d ) z_{di} \sim \mathrm{Multinomial} (\theta_d) zdiMultinomial(θd)
    第二步:绘制出观察到的某一个词语 w i j ∼ M u l t i n o m i a l ( β z d i ) w_{ij} \sim \mathrm{Multinomial} (\beta_{z_{di}}) wijMultinomial(βzdi)

对于参数估计,后验分布是:
p ( z , θ , β ∣ w , α , η ) = p ( z , θ , β ∣ α , η ) p ( w ∣ α , η ) p(z, \theta, \beta |w, \alpha, \eta) = \frac{p(z, \theta, \beta|\alpha, \eta)}{p(w|\alpha, \eta)} p(z,θ,βw,α,η)=p(wα,η)p(z,θ,βα,η)
由于后验分布是棘手的,变分贝叶斯方法使用了一个更简单的分布 q ( z , θ , β ∣ λ , ϕ , γ ) q(z,\theta,\beta | \lambda, \phi, \gamma) q(z,θ,βλ,ϕ,γ) 来估计这个后验分布。

这些变分的参数 λ \lambda λ ϕ \phi ϕ γ \gamma γ 都被优化过,以最大限度地提高 证据下界Evidence Lower Bound (ELBO)
log ⁡   P ( w ∣ α , η ) ≥ L ( w , ϕ , γ , λ ) = △ E q [ log ⁡   p ( w , z , θ , β ∣ α , η ) ] − E q [ log ⁡   q ( z , θ , β ) ] \log\: P(w | \alpha, \eta) \geq L(w,\phi,\gamma,\lambda) \overset{\triangle}{=} E_{q}[\log\:p(w,z,\theta,\beta|\alpha,\eta)] - E_{q}[\log\:q(z, \theta, \beta)] logP(wα,η)L(w,ϕ,γ,λ)=Eq[logp(w,z,θ,βα,η)]Eq[logq(z,θ,β)]
最大化 ELBO (证据下届)相当于尽量减少在 q ( z , θ , β ) q(z,\theta,\beta) q(z,θ,β) 与 真正后验 p ( z , θ , β ∣ w , α , η ) p(z, \theta, \beta |w, \alpha, \eta) p(z,θ,βw,α,η) 之间的Kullback-Leibler(KL) 分歧

sklearn 里面的 LatentDirichletAllocation 实现了在线的变分贝叶斯算法,并支持在线和批次更新方法。当批次方法每次完全通过数据后更新变异变量时,在线方法会更新来自小批量数据点的变异变量

注意:
注意尽管可以确保在线online方法收敛到局部最优点,但是最优点的质量和收敛速度可能取决于小批量的大小和与学习率设置相关的属性。

当 LatntDirichletAllocation 应用于"document-term"矩阵时,矩阵将被分解为"topic-term"矩阵和"document-topic"矩阵。虽然"topic-term"矩阵存储在模型的 components_中,但"document-topic"矩阵可以从transform方法进行计算。

LatentDirichletAllocation 也实现了 partial_fit method. 当数据可以按顺序提取时, 可以使用此方式。

Examples:

非负矩阵因子化 与 隐式狄利克雷分布 的 主题提取

sklearn.decomposition.LatentDirichletAllocation

首先看看这个类
class sklearn.decomposition.LatentDirichletAllocation(n_components=10, ,
doc_topic_prior=None,
topic_word_prior=None,
learning_method=‘batch’,
learning_decay=0.7,
learning_offset=10.0,
max_iter=10,
batch_size=128,
evaluate_every=- 1,
total_samples=1000000.0,
perp_tol=0.1,
mean_change_tol=0.001,
max_doc_update_iter=100,
n_jobs=None,
verbose=0,
random_state=None)

sklearn使用的隐式狄利克雷分布使用的是在线变分贝叶斯算法

参数释义备注再备注
n_components主题的数量int, default=10version 0.19之后,n_topics被重新命名为 n_components
doc_topic_prior文档-主题分布 之前的参数 θ \theta θfloat, default=None如果值为"none",则默认为 1/ n_components,在论文中,它被称为 α \alpha α
topic_word_prior主题-词语分布 之前的参数 β \beta βfloat, default=None如果值为"none",则默认为 1/ n_components,在论文中,它被称为 η \eta η
learning_method用来更新主题_component的方法{‘batch’, ‘online’}, default=’batch’只在fit方法中使用,总体说来,当数据尺寸特别大的时候,在线online更新会比批处理batch更新快得多,详见下1.
learning_decay在online学习方法中控制学习速率的一个参数float, default=0.7这个值需要设置在 (0.5,1.0] 确保渐进收敛。当这个值为 0.0 而 batch_size 为n_samples时,更新方法与批处理学习一摸一样。在文献中,这称为kappa
learning_offset一个(正)参数,可以减轻online在线学习中的早期迭代的负担。float, default=10.它应该大于1.0。 在文献中,这称为tau_0
max_iter迭代的最大次数int, default=10
batch_size仅用于online学习,每次EM迭代中使用的文档数。int, default=128
evaluate_every多久评估一次困惑度 (Perplexity)int, default=-1只在fit方法中使用, 将其设置为0或负数以在训练中完全不评估的Perplexity。 评估困惑度可以帮助您检查训练过程中的收敛性,但同时也会增加总的训练时间。 在每次迭代中评估困惑度可能会使训练时间增加两倍。
total_samples文档总数int, default=1e6仅在partial_fit方法中使用。详见下2.
perp_tolbatch 学习中的困惑度 (Perplexity)的容忍度float, default=1e-1仅在evaluate_every大于0时使用
mean_change_tol在E-step中停止更新文档-主题分布的容忍度。float, default=1e-3
max_doc_update_iterE-step中用于更新文档-主题分布的最大迭代次数。int, default=100
n_jobsE-step中要使用的作业job数。 -1表示使用所有处理器。int, default=None
verbose详细程度int, default=0
random_state在多个函数调用之间传递int以获得可重现的结果。int, RandomState instance or None, default=None单元格
  1. fit(X,y = None)
    一种学习方法,是一种对于数据 X 使用变分贝叶斯方法,当learning_method是‘online’的时候,使用 小批 mini-batch更新。否则,使用批处理更新
    Parameters:
    X:形状为(n_samples,n_features)的 {类似数组,稀疏矩阵}
    文档-词语矩阵
    y:忽视
    returns:
    self 他自己

有效选项:

  • ’batch 批处理’:批处理可变贝叶斯方法。 在每次EM更新时使用所有训练数据
    旧的 components_在每次迭代中都会被覆盖。

  • “online 在线”:在线可变贝叶斯方法。 在每个EM更新中,使用 迷你批处理 训练数据以逐步变更新components_ 学习率由 learning_decaylearning_offset参数控制。

  • 在0.20版中进行了更改:现在默认的学习方法是“Batch 批处理”。

困惑度 (Perplexity)-评价语言模型的好坏

  1. partial_fit(X,y = None)
    Mini-Batch更新的在线VB。
    Parameters:
    X:形状为(n_samples,n_features)的 {类似数组,稀疏矩阵}
    文档词矩阵
    y:忽视
    returns:
    self 他自己
属性释义备注再备注
components_主题-词语分布的变体参数。形状为(n_components,n_features)的 n 维数组由于主题-词语分布的完整条件是 Dirichlet,因此components_[i,j]可以将其视为表示单词 j j j 被分配到主题 i i i 的次数的伪计数。它也可以被视为正规化后每个主题的单词分布,model.components_ / model.components_.sum(axis=1)[:, np.newaxis].
exp_dirichlet_component_log 主题-词语分布 的期望值的指数值,在文献中,它是exp(E[log(beta)])形状为(n_components,n_features)的 n 维数组单元格
n_batch_iter_EM 步骤的迭代次数int
n_iter_数据集的传递次数。int
bound_训练集的最终困惑度得分float
doc_topic_prior_文档-主题分布 之前的参数 θ \theta θfloat如果值为"none",则默认为 1/ n_components
random_state_RandomState实例由生成 从种子,随机数生成器或通过np.randomRandomState instance单元格
topic_word_prior_主题-词语分布 之前的参数 β \beta βfloat
``单元格单元格单元格
``单元格单元格单元格

Topic extraction with Non-negative Matrix Factorization and Latent Dirichlet Allocation非负矩阵分解和潜在狄利克雷分配的主题提取

这是将NMF和LatentDirichletAllocation应用于文档语料库并提取该语料库主题结构的附加模型的示例。 输出为主题图,每个主题均使用基于权重的前几个单词表示为条形图。

NMF 非负矩阵分解(Non-negative Matrix Factorization) 应用于两个不同的目标函数:Frobenius范数和广义Kullback-Leibler发散。 后者等效于概率潜在语义索引。

默认参数(n_samples / n_features / n_components)应可使示例在几十秒内可运行。 您可以尝试增加问题的范围,但要注意,时间复杂度是NMF中的多项式。 在LDA中,时间复杂度与(n_samples *迭代)成正比。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值