使用LDA对文档主题进行建模

LDA 简介

LDA认为一篇文档由一些主题按照一定概率组成,一个主题又由一些词语按照一定概率组成。早期人们用词袋模型对一篇文章进行建模,把一篇文档表示为若干单词的计数。无论是中文还是英文,都由大量单词组成,这就造成词袋向量的维数巨大,少则几千多则上万,在使用分类模型进行训练时,非常容易造成训练缓慢以及过拟合。LDA本质上把词袋模型进行了降维,把一篇文档以主题的形式进行了表示。主题的个数通常为几百,这就把文档使用了维数为几百的向量进行了表示,大大加快了训练速度,并且相对不容易造成过拟合。从某种程度上来说,主题是对若干词语的抽象表示。

LDA(Latent dirichlet allocation)[1]是有Blei于2003年提出的三层贝叶斯主题模型,通过无监督的学习方法发现文本中隐含的主题信息,目的是要以无指导学习的方法从文本中发现隐含的语义维度-即“Topic”或者“Concept”。隐性语义分析的实质是要利用文本中词项(term)的共现特征来发现文本的Topic结构,这种方法不需要任何关于文本的背景知识。文本的隐性语义表示可以对“一词多义”和“一义多词”的语言现象进行建模,这使得搜索引擎系统得到的搜索结果与用户的query在语义层次上match,而不是仅仅只是在词汇层次上出现交集。在这里插入图片描述

以最近一部电视剧《南方有乔木》为例。假设一篇文章介绍了这部电视剧的主要内容。我们可以把这篇文章表示为:

0.30*"创业"+0.3*"三角恋"+0.2*"无人机"

然后我们可以把三角恋表示为:

0.4*"南乔"+0.3*"时樾"+0.3*"安宁"

需要指出的是,计算出文档、主题以及词语之间的表示关系,需要基于大量的文档,这样才具有普遍的意义。LDA正是提供了这种算法,自动从训练文档中计算出这种对应关系。

LDA生成过程:

所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。

首先我们所做的事情都在词典的限定下,就是文档中出现的词都不会超出词典给出的范围。比如说,话题“基因”中以很高的概率包含若干关于基因的词,而话题“进化生物学”则会以很高概率包含进化生物学的相关词。我们假设这些话题在数据产生前已经确定了。现在在文档集合中的每个文档,我们来生成其中的文字。步骤如下:

  1. 随机选择话题之上的分布
    2.对文档中的每个词
    2.1 从步骤1中产生的分布中随机选择一个话题
    2.2 从词典上的对应分布中随机选择一个词
    这个统计模型反应出文档拥有不同比例的话题(步骤1);每个文档中的每个词都是从众多话题之一中抽取出来的(步骤2.2),而被选择的话题是从针对每个文档的话题上的分布中产生的(步骤2.1)

简单理解这个生成过程:

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

在LDA中,所有的文档共有同样的话题集,但是每个文档以不同的比例展示对应的话题。LDA的主要目标是自动发现一个文档集合中的话题。这些文档本身是可以观测到的,而话题的结构——话题、每个文档的话题分布和每个文档的每个词的话题赋值——是隐藏的(可称为hidden structure)。话题建模的核心计算问题就是使用观测到的文档来推断隐藏话题结构。这也可以看作是生成(generative)过程的逆过程——什么样的隐藏结构可以产生观测到的文档集合?

借助LDA算法可以得到话题的结构,需要指出的是,算法本身并不需要用到这些话题的信息,文档本身也没有使用话题或者关键字进行标注。这个隐藏结构最有可能产生现在可以观测到的文档集合。

话题模型方便的地方就是可以通过推断的隐藏结构来组成文档的主题结构。这样的信息对于信息检索,分类和语料研究提供了有力的支撑。所以可以这样说,话题模型给出了一种管理、组织和标注文本的大量集合的算法解答。

LDA的定义和分析

LDA和其他一些话题模型从属于概率建模领域之下。生成概率建模中,我们的数据可以从一个包含了隐藏变量的生成过程中得到。这个生成过程定义了一个在已观测随机变量和隐藏随机变量之上的联合概率分布。我们通过使用联合概率分布来计算给定观测变量值下的隐藏变量的条件分布。这种条件分布也被叫做后验分布
LDA正好属于这个框架。已观测的变量就是那些文档中的词;隐藏变量就是话题模型;生成过程就是前面我们介绍的。而从文档来推断隐藏话题结构的问题就变成了计算后验分布的问题——计算给定文档后隐藏变量的条件分布。

现在我们可以形式化地描述LDA,话题 (Topics)是 β 1 : K \beta_{1:K} β1:K,其中每个 β k \beta_k βk是在词典上的分布。第d个文档的话题比例(Per-document topic proportions)是 θ d \theta_d θd,其中 θ d , k \theta_{d,k} θd,k是话题k在文档d中的比例。对第d个文档的话题赋值 (Per-word topic assignment) 就是 z d z_d zd,其中 z d , n z_{d,n} zd,n是第d个文档的第n个词的话题赋值。最后,文档d观测到的词 (Observed word) 是 w d w_d wd,其中 w d , n w_{d,n} wd,n是在文档d中的第n个词,它是来自于我们给定的词典的。
在这里插入图片描述
LDA参数:

K为主题个数,D为文档总数, N m N_m Nm是第m个文档的单词总数。 η \eta η是每个Topic下词的多项分布的Dirichlet先验参数, α \alpha α是每个文档下Topic的多项分布的Dirichlet先验参数。 z d , n z_{d,n} zd,n是第m个文档中第n个词的主题, w d , n w_{d,n} wd,n是d个文档中的第n个词。剩下来的两个隐含变量 θ d \theta_d θd β k \beta_k βk分别表示第d个文档下的Topic分布和第k个Topic下词的分布,前者是K维(K为Topic总数)向量,后者是N维向量(N为词典中term总数)。

使用这个表示方法,LDA生成过程对应于下面的隐藏变量和观测变量的联合分布:

p ( β 1 : K , θ 1 : D , z 1 : D , w 1 : D ) = ∏ i = i k p ( β i ) ∏ d = 1 D p ( θ d ) ( ∏ n = 1 N p ( z d , n ∣ θ d ) p ( w d , n ∣ β 1 : K , z d , n ) ) p(\beta_{1:K},\theta_{1:D},z_{1:D},w_{1:D}) = \prod_{i=i}^k p(\beta_i) \prod_{d=1}^D p(\theta_d) (\prod_{n=1}^N p(z_{d,n}|\theta_d)p(w_{d,n}|\beta_{1:K},z_{d,n})) p(β1:K,θ1:D,z1:D,w1:D)=i=ikp(βi)d=1Dp(θd)(n=1Np(zd,nθd)p(wd,nβ1:K,zd,n))

这个分布给出一些依赖关系。例如,话题赋值 z d , n z_{d,n} zd,n 依赖于对每个文档的话题比例 θ d \theta_d θd和所有的话题 β 1 : K \beta_{1:K} β1:K(从实施角度上看,这个项首先通过确定其代表的话题 z d , n z_{d,n} zd,n而后在那个话题中查询 w d , n w_{d,n} wd,n相应的概率)

正是这样依赖关系定义了LDA。他们由生成过程背后的统计假设给出,以一种联合分布的数学形式和针对LDA的概率图模型的方式确定了这些依赖关系。概率图模型提供了一个图形化的语言来描述概率分布的家族(family)。这些表示方法都可以描述LDA背后的概率假设。
后面我们会介绍一下LDA的推断算法。这里顺便提一下pLSI(probabilistic latent semantic analysis)。这个模型本身是LSA的概率版本,它揭示了SVD在文档-项矩阵上的作用。从矩阵分解的角度看,LDA同样可以看作是对于离散数据的PCA。

LDA的后验分布计算

现在就开始介绍LDA的后验分布的计算,也就是在给定观测文档下计算话题结构的条件分布。(这就是传说中的后验分布posterior)
其定义如下:
p ( β 1 : K , θ 1 : D , z 1 : D ∣ w 1 : D ) = p ( β 1 : K , θ 1 : D , z 1 : D , w 1 : D ) / p ( w 1 : D ) p(\beta_{1:K},\theta_{1:D},z_{1:D}|w_{1:D}) = p(\beta_{1:K},\theta_{1:D},z_{1:D}, w_{1:D}) / p(w_{1:D}) p(β1:K,θ1:D,z1:Dw1:D)=p(β1:K,θ1:D,z1:D,w1:D)/p(w1:D)
分子是所有变量的联合分布,这个可以从任何隐藏变量的设置下计算获得。分母则是观测值的边缘分布,这是在任何话题模型下看到观测到的语料概率。理论上可以通过对隐藏话题结构的每个可能的初始化求和来得到联合分布。
当然了,可能的话题结构是指数级大的,这个问题难解的(NP-hard)。正如很多现代概率模型那样,因为分母难以计算就使得我们很难计算出后验。所以现代概率模型研究的焦点之一就是设计出高效的近似方法。话题模型算法通常是通用近似后验分布方法的适配使用。
话题模型算法通过适配一种隐藏话题结构的分布来接近最终正确的后验。而主要的话题建模算法可以分成两种——基于采样的算法和变分算法。

基于采样的算法尝试从后验分布中搜集样本使用一个经验分布来近似它。最常用的采样算法是Markov chain——一个随机变量的序列,每个变量只依赖于前一个,其极限分布是我们需要的后验分布。Markov chain定义在对一个特定的语料的隐藏话题变量上,算法思想就是运行chain很长一段时间,从极限分布中搜集样本,接着使用搜集来的样本来近似分布。(常常,仅仅是一个有着最大概率的样本被搜集来作为近似的话题结构)。

变分方法是一个确定性的方式。变分方法没有去使用样本来近似后验,而是采用了一个在隐藏结构上的参数化的分布家族,接着找到家族中最靠近后验的那个成员。因此,推断问题就被转化为一个优化问题了。变分方法打开了一扇通向实用的概率建模的创新大门。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值