Latent Dirichlet Allocation 文本分类主题模型

文本提取特征常用的模型有:
1.Bag-of-words:最原始的特征集,一个单词/分词就是一个特征。往往一个数据集就会有上万个特征;有一些简单的指标可以帮助筛选掉一些对分类没帮助的词语,例如去停词,计算互信息熵等等,但不管怎么训练,特征维度都很大,每个特征的信息量太小;
2.统计特征:包括Term frequency(TF) , Inverse document frequency(IDF), 以及合并起来的TF-IDF。这种语言模型主要是用词汇的统计特征来作为特征集,每个特征都能够说得出物理意义,看起来会比bag-of-words效果好,但实际效果也差不多;
3.NGram:一种考虑了词汇顺序的模型,就是N阶Markov链,每个样本转移成了转移概率矩阵。也能取得不错的效果;

然而,这些特征的一个关键问题,在于并没有对样本特征进行很大程度的压缩,没有提取出关键的信息。这样的问题就是在分类问题中会出现overfit,也就是训练好的分类器只在训练它的数据集(例如用Facebook训练)中有效,换一个数据集(例如换成了Twitter)效果就会很差。
近期,机器学习界的一个研究热点,叫做稀疏表示(Sparse Representation)。也就是认为不管维度多么高的数据集,其实其关键特征就那么几个。这几个关键特征之间刻画了初噪声之外的全部关键信息,并且特征之间没有太多的相关性。
PSI、LDA就是文本的稀疏表示,代表的这一类语言模型叫做Topic Model。认为单词量再大的文本,其文章主题就那么几个。一个K个主题的LDA模型,可以把一个文本压缩成K维的向量:每一个维度就是该文本属于该主题的概率,这个向量也叫做Topic Proportion(注意和Topic Distribution区别)。然后得到压缩后的K维数据集后,再使用任何的分类器,甚至最简单的余弦相似性指标,都可以得到非常漂亮的分类效果。
至于LDA的变形,就有一大堆了。Blei的主页上就有,想CTM、DTM、CTR,以及别人提出的CTR-SMF等等,主要是考虑的主题结构不同,主题是否随时间演化,考虑了用户Score,用户的社交关系等等。LDA的Training过程也有一堆变形,最近各种花样的Gibbs采样层出不穷。

Python

https://pypi.python.org/pypi/lda

http://scikit-learn.org/dev/modules/generated/sklearn.decomposition.LatentDirichletAllocation.html#sklearn.decomposition.LatentDirichletAllocation

LDA

传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似的。

举个例子,有两个句子分别如下:

“乔布斯离我们而去了。”

“苹果价格会不会降?”

可以看到上面这两个句子没有共同出现的单词,但这两个句子是相似的,如果按传统的方法判断这两个句子肯定不相似,所以在判断文档相关性的时候需要考虑到文档的语义,而语义挖掘的利器是主题模型,LDA就是其中一种比较有效的模型。

在主题模型中,主题表示一个概念、一个方面,表现为一系列相关的单词,是这些单词的条件概率。形象来说,主题就是一个桶,里面装了出现概率较高的单词,这些单词与这个主题有很强的相关性。

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

首先,可以用生成模型来看文档和主题这两件事。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的。那么,如果我们要生成一篇文档,它里面的每个词语出现的概率为:

这个概率公式可以用矩阵表示:

其中”文档-词语”矩阵表示每个文档中每个单词的词频,即出现的概率;”主题-词语”矩阵表示每个主题中每个单词的出现概率;”文档-主题”矩阵表示每个文档中每个主题出现的概率。

给定一系列文档,通过对文档进行分词,计算各个文档中每个单词的词频就可以得到左边这边”文档-词语”矩阵。主题模型就是通过左边这个矩阵进行训练,学习出右边两个矩阵。

主题模型有两种:pLSA(ProbabilisticLatent Semantic Analysis)和LDA(Latent Dirichlet Allocation),下面主要介绍LDA。

LDA介绍

如何生成M份包含N个单词的文档,LatentDirichlet Allocation这篇文章介绍了3方法:

        方法一:unigram model

该模型使用下面方法生成1个文档:

For each ofthe N words w_n: 
                Choose a word w_n ~ p(w);

其中N表示要生成的文档的单词的个数,w_n表示生成的第n个单词w,p(w)表示单词w的分布,可以通过语料进行统计学习得到,比如给一本书,统计各个单词在书中出现的概率。

这种方法通过训练语料获得一个单词的概率分布函数,然后根据这个概率分布函数每次生成一个单词,使用这个方法M次生成M个文档。其图模型如下图所示:

        方法二:Mixture of unigram

unigram模型的方法的缺点就是生成的文本没有主题,过于简单,mixture of unigram方法对其进行了改进,该模型使用下面方法生成1个文档:

Choose a topicz ~ p(z);

For each ofthe N words w_n:

Choose a word w_n ~ p(w|z);

其中z表示一个主题,p(z)表示主题的概率分布,z通过p(z)按概率产生;N和w_n同上;p(w|z)表示给定z时w的分布,可以看成一个k×V的矩阵,k为主题的个数,V为单词的个数,每行表示这个主题对应的单词的概率分布,即主题z所包含的各个单词的概率,通过这个概率分布按一定概率生成每个单词。

这种方法首先选选定一个主题z,主题z对应一个单词的概率分布p(w|z),每次按这个分布生成一个单词,使用M次这个方法生成M份不同的文档。其图模型如下图所示:

从上图可以看出,z在w所在的长方形外面,表示z生成一份N个单词的文档时主题z只生成一次,即只允许一个文档只有一个主题,这不太符合常规情况,通常一个文档可能包含多个主题。

        方法三:LDA(Latent Dirichlet Allocation)

LDA方法使生成的文档可以包含多个主题,该模型使用下面方法生成1个文档:

Chooseparameter θ ~ p(θ);

For each ofthe N words w_n:

Choose a topic z_n ~ p(z|θ);

Choose a word w_n ~ p(w|z);

其中θ是一个主题向量,向量的每一列表示每个主题在文档出现的概率,该向量为非负归一化向量;p(θ)是θ的分布,具体为Dirichlet分布,即分布的分布;N和w_n同上;z_n表示选择的主题,p(z|θ)表示给定θ时主题z的概率分布,具体为θ的值,即p(z=i|θ)= θ_i;p(w|z)同上。

这种方法首先选定一个主题向量θ,确定每个主题被选择的概率。然后在生成每个单词的时候,从主题分布向量θ中选择一个主题z,按主题z的单词概率分布生成一个单词。其图模型如下图所示:

从上图可知LDA的联合概率为:

把上面的式子对应到图上,可以大致按下图理解:

从上图可以看出,LDA的三个表示层被三种颜色表示出来:

1. corpus-level(红色):α和β表示语料级别的参数,也就是每个文档都一样,因此生成过程只采样一次。

2.document-level(橙色):θ是文档级别的变量,每个文档对应一个θ,也就是每个文档产生各个主题z的概率是不同的,所有生成每个文档采样一次θ。

3. word-level(绿色):z和w都是单词级别变量,z由θ生成,w由z和β共同生成,一个 单词w对应一个主题z。

通过上面对LDA生成模型的讨论,可以知道LDA模型主要是从给定的输入语料中学习训练两个控制参数α和β,学习出了这两个控制参数就确定了模型,便可以用来生成文档。其中α和β分别对应以下各个信息:

α:分布p(θ)需要一个向量参数,即Dirichlet分布的参数,用于生成一个主题θ向量;

β:各个主题对应的单词概率分布矩阵p(w|z)。

把w当做观察变量,θ和z当做隐藏变量,就可以通过EM算法学习出α和β,求解过程中遇到后验概率p(θ,z|w)无法直接求解,需要找一个似然函数下界来近似求解,原文使用基于分解(factorization)假设的变分法(varialtional inference)进行计算,用到了EM算法。每次E-step输入α和β,计算似然函数,M-step最大化这个似然函数,算出α和β,不断迭代直到收敛。

BTM 主题模型

A Biterm Topic Model for Short Texts提出了一个较为新颖的思路。试想我们人眼分辨短文本的过程,我们并不是孤立的看每个词是否出现,而是要关注,是否某些词一起出现了。这个特征更强,所以区别性也更高。A Biterm Topic Model for Short Texts提出的模型BTM类似如此。他用一个窗口在文档内滑动(如果文本太短,或许就只有窗口了),然后将窗口内的两个词作为一个共现词对,每个词对的生成过程是从全局的主题分布中取一个词,然后从主题-词分布取两个词。

github code

https://github.com/xiaohuiyan/BTM

时间: 2024-10-12 15:36:54

Latent Dirichlet Allocation 文本分类主题模型的相关文章

LDA(latent dirichlet allocation)的应用

http://www.52ml.net/1917.html 主题模型LDA(latent dirichlet allocation)的应用还是很广泛的,之前我自己在检索.图像分类.文本分类.用户评论的主题词抽取等都用过,做feature.降维等.例如可以用主题维度来表示原来的字典维度,大大的降低了文本表示的维度.这其实也很deep learning中的对特征的抽象有点相似,通过一些聚类等的思想,将一些细粒度的特征组合到一个新的空间上去,例如主题空间. 而且GibbsSampling的LDA实现也

Latent Dirichlet allocation学习笔记

LDA是一个关于语料的生成概率模型,基本思想是文档可以表达为隐含主题的随机混合,每个主题刻画为关于词语的分布. LDA假设在语料D中生成一篇文章w的过程如下: 1. 根据泊松分布选在文章长度N 2.     选择主题分布 3.   对于每一个词Wn (a) 根据多项式分布选择一个主题 (b)  根据多项式条件概率分布选择Wn 一些基本模型的简单假设: (1)主题个数k是预先设定的: (2)主题和词的概率分布矩阵式一个k*V的矩阵, (3)文章长度N与其它变量独立 K维的Dirichlet随机变量

代写Python Latent Dirichlet Allocation

In thisassignment we will submit extracted topics from 5 different Twitter accounts ofyour choice. This word document will contain the account names, extractedtopics, probability and 10 most common terms for each topic. Please includeyour IPython Not

Latent Dirichlet Allocation

主题模型 LDA是一个主题模型,关于主题模型的解释有个很通俗的例子: 第一个是:"乔布斯离我们而去了." 第二个是:"苹果价格会不会降?" 我们一眼就可以看出这两句是有关联的,第一句里面有了"乔布斯",我们会很自然的把"苹果"理解为苹果公司的产品,它们属于了同一个主题:苹果公司. 而像我之前那种计算关联度的时候,即文档之间重复的词语越多越可能相似,是无法达到这个效果的.文档之间重复的词语越多越可能相似,这一点在实际中并不尽然.

LDA(latent dirichlet allocation)

1.LDA介绍 LDA假设生成一份文档的步骤如下: 模型表示: 单词w:词典的长度为v,则单词为长度为v的,只有一个分量是1,其他分量为0的向量 $(0,0,...,0,1,0,...,0,0)$ 文档W:  单词的组合,$(w_1,w_2,...,w_N)$,可以看成是 $v*N$ (词典长度*单词个数)的矩阵 语料库D:文档的集合,${W_1,W_2,...W_M}$ 主题:认为主题个数固定已知,为k个 dirichlet参数α: 长度为k的向量,每个分量都大于0 文档的主题分布θ:  由d

三言两语教你理解 Latent Dirichlet Allocation Model

主题模型之潜在语义分析(Latent Semantic Analysis)

主题模型(Topic Models)是一套试图在大量文档中发现潜在主题结构的机器学习模型,主题模型通过分析文本中的词来发现文档中的主题.主题之间的联系方式和主题的发展.通过主题模型可以使我们组织和总结无法人工标注的海量电子文档.较早的主题模型有混合语言模型(Mixture of Unigram),潜在语义索引(Lantent Semantic Index,LSI),概率潜在语义索引(Probabilistic Latent Semantic Indexing,PLSI).主题模型中文档是由主题组

主题模型及其在文本情感分析中的应用

随着Web2.0技术的出现和发展,互联网上(包括门户网站.电子商务网站.社交网站.音/视频分享网站.论坛.博客.微博等)产生了海量的.由用户发表的对于诸如人物.事件.产品等目标实体的评论信息.例如,下面这两个短文本评论:(1)“比较了多个智能手机后选择了8150,性价比还可以.另外,就是考虑到它是3.7的屏幕,大小比较合适,否则携带很不方便.”(京东商城用户,2011.11.25):(2)“我以前在杭州做二手房地产,用温州炒房客的话说:全世界房价降了,杭州的房价永远不会降,因为他们有一道坚不可摧

文本主题模型之LDA(一) LDA基础

在前面我们讲到了基于矩阵分解的LSI和NMF主题模型,这里我们开始讨论被广泛使用的主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,以下简称LDA).注意机器学习还有一个LDA,即线性判别分析,主要是用于降维和分类的,如果大家需要了解这个LDA的信息,参看之前写的线性判别分析LDA原理总结.文本关注于隐含狄利克雷分布对应的LDA. 1. LDA贝叶斯模型 LDA是基于贝叶斯模型的,涉及到贝叶斯模型离不开"先验分布","数据(似然)"