![1b17590136b52cec2dac68fca066f8e0.png](https://i-blog.csdnimg.cn/blog_migrate/afc5ff742c3472bf9827d57dea18957e.jpeg)
少年的肩膀,就该这样才对嘛,什么家国仇恨,浩然正气的,都不要急,先挑起清风明月、杨柳依依和草长莺飞,少年郎的肩头,本就应当满是美好的事物啊。
-----烽火戏诸侯<剑来>
会写两篇关于BTM的文章,一篇通俗地介绍论文中的知识,包括什么是BTM,BTM和LDA的区别,但是,即便我写的再通俗,看懂这篇文章,一样需要一定的数学基础,最起码,需要了解一点LDA数学的相关知识(推荐大家读LDA数学八卦,真的是很好的一本教材)
另一篇则会实现BTM,当然不是我自己写的。我在一位大佬的github上clone了一份代码
https://github.com/jasperyang/BTMpy.gitgithub.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](https://i-blog.csdnimg.cn/blog_migrate/90b185a7424ab2d3efb92dd5482bf42d.png)
这里解释下公式中每个变量的意义
为什么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主题模型中求
![b2cc21c6c631c96b3e53cc433d828e92.png](https://i-blog.csdnimg.cn/blog_migrate/96e956311fb2a3a9d0f0b689b1614a0e.png)
上面的公式中,
![b4cce689d9d0840c92fdbd94a8095b6b.png](https://i-blog.csdnimg.cn/blog_migrate/67e48bcd82931b109fbd7f11c53d74df.png)
我们对按照上面的公式进行Gibbs采样,更新每个词对应的topic,重复操作,知道Gibbs sampling收敛,得到完整的模型。
上面复习了在LDA中更细参数的方法后我们回到主题看一下BTM是如何更新参数的。贴上伪代码和公式更新的结果,图片来自论文(A Biterm Topic Model for Short Text)
![43056cbda1b0ad78332534a4c9971c4c.png](https://i-blog.csdnimg.cn/blog_migrate/0a227a911495bbb2a97c2eb09f87de1f.jpeg)
![13c7a531a506fc574be91b170f89f629.png](https://i-blog.csdnimg.cn/blog_migrate/9fdb85417a0eb9a72494bc58ab3fc8f7.png)
![05e2c045d53c3dd430f00776f1845b80.png](https://i-blog.csdnimg.cn/blog_migrate/bced68088b64eadd1bba731a36405a11.png)
我们可以看到BTM的参数更新方式和LDA几乎相同除了在Gibbs采样的时候是求的biterm的条件概率,然后更新参数,哦,对,这里说一下,如果一个biterm属于主题1,那么biterm中的每个词都属于主题1 。 剩下的几乎和LDA没有区别,公式中的变量也和之前LDA中的差不多。大家想深入了解的。可以自己去读读BTM的论文。还是那句话,如果有问题,可以私信我。
后记
在之前的LDA文章中,有小伙伴问我,要怎么计算