算一样的模型ansys17比19快吗_主题模型(五):BTM理论基础

1b17590136b52cec2dac68fca066f8e0.png

少年的肩膀,就该这样才对嘛,什么家国仇恨,浩然正气的,都不要急,先挑起清风明月、杨柳依依和草长莺飞,少年郎的肩头,本就应当满是美好的事物啊。

-----烽火戏诸侯<剑来>


会写两篇关于BTM的文章,一篇通俗地介绍论文中的知识,包括什么是BTM,BTM和LDA的区别,但是,即便我写的再通俗,看懂这篇文章,一样需要一定的数学基础,最起码,需要了解一点LDA数学的相关知识(推荐大家读LDA数学八卦,真的是很好的一本教材)

另一篇则会实现BTM,当然不是我自己写的。我在一位大佬的github上clone了一份代码

https://github.com/jasperyang/BTMpy.git​github.com

代码里的注解太少了,像我这样的小垃圾看了好久才勉强读懂,我这里会传一份我加了注解版的代码。下一篇论文会贴上自己的github(为啥不现在贴,因为还没写完)关键语句都加了注释,每一个关键变量都有自己的解释和理解(当然,可能理解是错了,大家酌情参考,如果发现错误,麻烦大家私信提醒我!)


什么是BTM

BTM和LDA一样都是主题模型,就是给你一篇文档,你指定一个主题的个数,这两个模型都会生成每个主题中的关键词,以及一篇新的文档中各个主题的概率有多大。根据论文作者的表述。传统的主题模型(LDA)在处理短文本(比如直播间弹幕,微博文本等等),会因为文本中的词过于稀疏,得到模型的效果不够好。为了解决这个问题。大佬们提出一种新的主题模型,就是BTM,而且BTM论文的作者说,在短文本上BTM的表现要比LDA好,即使是长文本,BTM的效果也不比LDA弱。

BTM的英文全名叫(Biterm Topic Model),这里一共三个单词,我觉的大家肯定认识后面两个,那我给大家解释下第一个吧,Biterm翻译成什么我也不知道,但是这不并不影响我们理解论文,我给大家举个例子大家就明白了。我们这里有一句话 “清风明月,草长莺飞,杨柳依依“,这里假设我们断句分词后得到三个词.

['清风明月','草长莺飞','杨柳依依']

那么,这句话就包括三个biterm,分别是

['清风明月','草长莺飞'] ['杨柳依依','草长莺飞']['清风明月','杨柳依依']

这里假设大家都了解LDA的建模过程,如果不了解的话,墙裂建议大家去看《数学八卦》,有哪里不懂,可以私信我,反正我不一定会。我们知道LDA是根据单个单词去建模。而BTM的不同之处就在于,BTM是根据上面的biterm来建模的。这里再举个例子。在上面的句子中,假如是用LDA建模,那么我们在建模的时候,会假设清风明月 属于主题一,杨柳依依属于主题二,草长莺飞属于主题三这种,但是在BTM中,我们假设biterm1 属于主题1 ,biterm2属于主题2这种。基本这就是这两个模型的区别了,其他的几乎都一样,一样使用Dir-Multi共轭建模,一样使用Gibbs求解(只是我个人的理解,可能略显肤浅,各位老板轻喷)。

为什么LDA不适合做短文本分析

这个是在知乎的另一位大佬那里看来的。担心大家懒,不想去点,我在这里复述一遍。

LDA适合单条句子级别的短文本分类吗?​www.zhihu.com

假设大家都读了LDA数学八卦,在数学八卦的第54页,有两个更新多项分布参数的 公式。我这里贴一下。

885c3ac7604df72ab28bc2b8cdcccbfe.png
更新参数公式

这里解释下公式中每个变量的意义

表示的是第m篇文档中,各个单词的主题。
这里的i是一个二维变量(m,n)表示第m篇文档中的第n个词,m表示第m篇文档,k表示第k个主题, 所以这个的含义就是在第m篇文档中除去第i(m,n)个词的第k个主题产生的单词个数。而根据经验,这个词汇的个数是根据MCMC仿真出来的,随机性较大,由于文本特征很少,那么大多数主题的词频计数
可能都是0,同时,其他极少数主题对应的词频计数为1(一个句子的词汇个数很有可能没有主题多),此外,由于我们对Dirichlet的参数一无所知,因此一般的设置
为相等的。结合以上两点,参数估计的严重问题就产生了。当给予先验参数较大权重的时候,文本较短导致文本内容对参数估计提供的有价值信息局限了。可想而知,
基本上都依赖与Dirichlet的先验参数
,等概率的参数导致结果基本上都是均匀的向量,没有分类的意义;当给与的先验参数较小权重时,由于取值为1的主题很少,随机性又很大,导致主题很难广泛低分布在多个主题上,倾向于聚集在1到2个主题上,当我们一个主题模型只有一个主题的时候,那这个主题模型存在的意义可能是不大了。。。

为什么BTM更适合做短文本分析

综合上面说的,我们知道,BTM和LDA除了使用biterm建模外,其余的几乎和LDA相同,而问题就在这个Biterm上了。LDA存在的问题是当文本过短的时候,比如一个文本只有10个单词,那么模型可能会很差,但是,在BTM中,即使一个文本中只有10条单词,那么也会有45个biterm(高中的排列组合)很好的解决了LDA对短文本存在的问题。而且论文中说,显而易见,使用biterm(两个词)对文本建模要比一个词建模要能更好的显示文章的隐藏主题(它这个显而易见,就和高中做数学题。答案给的是 易得 一样。。。)

参数的更新(数学公式预警)

上面说过,除了建模的方式,LDA和BTM几乎都是一样的(这句话说过好多遍了),论文中使用的Gibbs更新的参数,所以这里我们先草草的过一遍LDA求解参数的方法 ,首先我们假设大家都知道在传统的LDA中有M+K的Dir-Multi共轭分布,Gibbs采样,我们这里先简单回顾下LDA主题模型中求

的方法,为了能够完成Gibbs采样,我们需要一个条件概率,而为了求这个条件概率, 我们又需要联合概率。这个联合概率就是通过Dir-Multi求得的。

b2cc21c6c631c96b3e53cc433d828e92.png
LDA中联合概率的计算公式,数学八卦第49页

上面的公式中,

是我们给定的伪计数,
表示的是第k个topic产生的每个单词的个数,比如
表示的是1号主题产生的2号单词的个数。
表示的第m篇文档中第k个topic产生的词的个数。有了上面的联合分布,我们就可以求条件分布,进而进行Gibbs采样了。我们经过推导(此处略去3亿个脑细胞)。得到了下面的条件概率公式

b4cce689d9d0840c92fdbd94a8095b6b.png
LDA中的条件概率公式,数学八卦第51页

我们对按照上面的公式进行Gibbs采样,更新每个词对应的topic,重复操作,知道Gibbs sampling收敛,得到完整的模型。

上面复习了在LDA中更细参数的方法后我们回到主题看一下BTM是如何更新参数的。贴上伪代码和公式更新的结果,图片来自论文(A Biterm Topic Model for Short Text)

43056cbda1b0ad78332534a4c9971c4c.png
算法的伪代码

13c7a531a506fc574be91b170f89f629.png
Gibbs采样中用到的条件概率

05e2c045d53c3dd430f00776f1845b80.png
根据采样结果,求出概率的公式

我们可以看到BTM的参数更新方式和LDA几乎相同除了在Gibbs采样的时候是求的biterm的条件概率,然后更新参数,哦,对,这里说一下,如果一个biterm属于主题1,那么biterm中的每个词都属于主题1 。 剩下的几乎和LDA没有区别,公式中的变量也和之前LDA中的差不多。大家想深入了解的。可以自己去读读BTM的论文。还是那句话,如果有问题,可以私信我。

后记

在之前的LDA文章中,有小伙伴问我,要怎么计算

,这个其实挺不好算的。因为需要太多的前置数学知识。我会抽空整理下,尽量用通俗的语言把这个写一篇笔记出来吧。这篇文章讲的并不深入,如果大家想深入了解BTM,还是需要自己静下心来来认真读读教材和论文。当然,我也有一些地方不是特别理解,这篇文章更像是自己的读书笔记,如果能帮到你,万分荣欣,如果不幸让你更迷茫了或者写错了,那深感抱歉,如果大家遇到了问题,欢迎大家私信我,我们可以一起研究。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值