我对主题模型的理解

来源:互联网 发布:网络流媒体地址你懂的 编辑:程序博客网 时间:2024/05/19 23:16

本周我司开始研究LDA。听了林哥的sharing感觉还是有很多东西不太清楚。

在看了网上的不少文章之后,感觉还是要首先了解一下“主题模型”是个什么东西。


下面就是我的一些理解或者说是学习笔记。


一、什么是主题、主题模型?

引用维基百科上面的描述:

<span style="font-size:18px;">主题模型(Topic Model)在机器学习和自然语言处理等领域是用来在一系列文档中发现抽象主题的一种统计模型。直观来讲,如果一篇文章有一个中心思想,那么一些特定词语会更频繁的出现。比方说,如果一篇文章是在讲狗的,那“狗”和“骨头”等词出现的频率会高些。如果一篇文章是在讲猫的,那“猫”和“鱼”等词出现的频率会高些。而有些词例如“这个”、“和”大概在两篇文章中出现的频率会大致相等。但真实的情况是,一篇文章通常包含多种主题,而且每个主题所占比例各不相同。因此,如果一篇文章10%和猫有关,90%和狗有关,那么和狗相关的关键字出现的次数大概会是和猫相关的关键字出现次数的9倍。一个主题模型试图用数学框架来体现文档的这种特点。主题模型自动分析每个文档,统计文档内的词语,根据统计的信息来断定当前文档含有哪些主题,以及每个主题所占的比例各为多少。主题模型最初是运用于自然语言处理相关方向,但目前以及延伸至例如生物信息学的其它领域。</span>

这个描述还是长了一点,简单的说有两点:

1. 一个主题就类似一个桶,这个桶里面装了若干的高频词(一般取前10个来表达)

2. 一个文本就是如果主题的杂合体


举个例子来说明:(用上面维基百科的例子)

对于狗来说,常见的词有: 摇尾巴、骨头、汪星人

而对于猫来书,常见的词有:喵星人、鱼

那么就有如下的概率:



...


上面说的狗,就类似一个桶(词袋 bag of words),装入了高频词: 摇尾巴、骨头、汪星人 等等。

另外一个主题,即猫,装入了其他的高频词: 喵星人、鱼


上面的例子里面,两个主题之间的高频词没有交叉,但是我们换另外几个主题:

百度、微软、Google

可想而知,这几个主题之间,一定会有交叉的高频词, 如 IT公司、搜索技术、广告收入 等等

但是相同的词在不同的主题里面的概率分布可能又不太一样:

比如:(概率值是我瞎写的)


   


到这里,“什么是主题、主题模型”大致就介绍完毕了。 跟传统的向量空间模型对比一下,我们会发现两种算法在思维上就很不一样。

传统的向量空间模型,首先进行分词,然后以词为单位转化成向量空间的一个向量,比如 [1 0 0 1 0 ... ] 等。 传统的向量空间其实在理解与实现上都非常简单,在实际的应用之中也比较有效,只是有一些缺点:

(1) 完全没有考虑词语之间的顺序关系

(2) 无法考察潜在的语义 (比如 乔布斯 跟 苹果)


二、如何生成主题模型?[这部分暂时全是转载]

在了解了主题模型之后,我们不禁要问:当我们拿到一篇文章或者一个语料库,我们如何生成主题?

这个时候,“生成模型”就出场了。


反过来想,我们如何生成一篇文章?

举个例子,我们要写一篇关于美国的文章,那么我们首先要选定几个主题,比如:

军事、政治、人文、历史 等等。

然后从军事的角度,再选一些关键字,比如F22、预算、自动步枪等等,从政治的角度来说,选 国防部、五角大楼、鹰派、鸽派等等。

选定这一系列的词之后,我们就根据这些词进行遣词造句:比如

"美国国防部批准了五角大楼提出的2000亿预算用于F22的购买。"

不断重复这一过程,最终就能生成一篇文章。

用公式的表述: (下面几个公式都来自于 新浪的博客)



上面这个式子,可以矩阵乘法来表示,如下图所示:

左边的矩阵表示每篇文章中每次词语出现的概率;中间的Φ矩阵表示的是每个主题中每个词语出现的概率 ,也就是每个“桶

表示的是每篇文档中各个主题出现的概率 ,可以理解为一段话中每个主题所占的比例。

假如我们有很多的文档,比如大量的网页,我们先对所有文档进行分词,得到一个词汇列表。这样每篇文档就可以表示为一个词语的集合。对于每个词语,我们可以用它在文档中出现的次数除以文档中词语的数目作为它在文档中出现的概率 。这样,对任意一篇文档,左边的矩阵是已知的,右边的两个矩阵未知。而主题模型就是用大量已知的“词语-文档”矩阵 ,通过一系列的训练,推理出右边的“词语-主题”矩阵Φ 和“主题文档”矩阵Θ 

主题模型训练推理的方法主要有两种,一个是pLSA(Probabilistic Latent Semantic Analysis),另一个是LDA(Latent Dirichlet Allocation)。pLSA主要使用的是EM(期望最大化)算法;LDA采用的是Gibbs sampling方法。由于它们都较为复杂且篇幅有限,这里就只简要地介绍一下pLSA的思想,其他具体方法和公式,读者可以查阅相关资料。

pLSA采用的方法叫做EM(期望最大化)算法,它包含两个不断迭代的过程:E(期望)过程和M(最大化)过程。用一个形象的例子来说吧:比如说食堂的大师傅炒了一盘菜,要等分成两份给两个人吃,显然没有必要拿天平去一点点去精确称量,最简单的办法是先随意的把菜分到两个碗中,然后观察是否一样多,把比较多的那一份取出一点放到另一个碗中,这个过程一直重复下去,直到大家看不出两个碗里的菜有什么差别为止。

对于主题模型训练来说,“计算每个主题里的词语分布”和“计算训练文档中的主题分布”就好比是在往两个人碗里分饭。在E过程中,我们通过贝叶斯公式可以由“词语-主题”矩阵计算出“主题-文档”矩阵。在M过程中,我们再用“主题-文档”矩阵重新计算“词语-主题”矩阵。这个过程一直这样迭代下去。EM算法的神奇之处就在于它可以保证这个迭代过程是收敛的。也就是说,我们在反复迭代之后,就一定可以得到趋向于真实值的 Φ和 Θ。




0 0