用GibbsLDA做Topic Modeling
http://weblab.com.cityu.edu.hk/blog/luheng/2011/06/24/%E7%94%A8gibbslda%E5%81%9Atopic-modeling/#comment-87
Topic Modeling是一种文本挖掘的方法。将文本视作一个由许多许多词组成的数据库,就能通过分析哪些词经常在一起出现,哪些词出现的多,等等手段来探测文本中隐含的主题。比如,有一万篇文章,人工对这些文章进行分类,提取主题是十分浩大的工程。但是如果能用计算机来实现的话,对于社会科学研究者,尤其是注重对文本分析的传播学者来说,是个非常值得应用的工具。
简单来说,Topic Modeling就是干这么个活。把一堆文字放进去,你告诉计算机,你要多少个主题(比如,5),每个主题包含多少个字(比如,10),然后让计算机跑跑跑,过一会儿,计算机就告诉你5个主题,每个主题10个字分别是什么。
听起来有点玄乎,但是如果你能明白传统的因子分析(Factor Analysis),基本上就能明白Topic Modeling。核心思想无非就是降维度。对于因子分析来说,可以从100个变量,降维提出5个因子。对于Topic Modeling来说,可以通过100篇文章(可能包含100,000个字/词),降维提出5个主题。
具体到对Topic Modeling的操作,那就千变万化了。计算机科学(Computer Science)领域专门有人做这个,发展出各种算法。
我只介绍一种,叫做GibbsLDA。这其实就是Gibbs Sampling(一种抽样方法)跟Latent Dirichlet Allocation (LDA,一种算法/模型)的结合。这玩意儿太深奥了。我也解释不清楚。反正如果你google的话,有人用这两种东西的结合GibbsLDA写了文章,发了,貌似影响不小。是可行的,靠谱的。LDA最早是由David Blei提出的。
D. Blei, A. Ng, and M. Jordan:Latent Dirichlet Allocation, Journal of Machine Learning Research (2003).
更多的文章可以看看这里。也可以google下列文章:
l Finding scientific topics.
l The author-topic model for authors and documents.
l Bibliometric Impact Measures Leveraging Topic Analysis.
l Detecting Topic Evolution in Scientific Literature: How CanCitations Help?
这个GibbsLDA有很多的软件版本,比如C++版,Java版,Python版,MatLab版。各种版本对输入数据的要求可能还不一样。就我使用的情况来看,C++版本最稳定,运算速度也最快。
但是呢,C++版本一般在Linux上运行,如在Windows下运行,还得按照个Visual Studio。工程浩大。
Windows上装个Linux其实不难,搞个Wubi,在C盘上分出一个空间(10G左右),傻瓜都能搞定。这个Wubi给装的Linux是Ubuntu版本。不难用。Wubi其实是给你的电脑上傻瓜式地装上了一个虚拟Linux系统。开机时会让你选进Linux还是Windows。进了Linux也不怕,搞个天翻地覆,也就在你分给它的那点硬盘(比如10G)里,坏不了大事。当然,你舍不得搞复杂你的Windows的话,可以想办法搞个Linux的机器来玩玩。
累死了。简单来说,怎么安装使用GibbsLDA++看这里就可以了。不过我还是多罗嗦几句吧。
好了,从现在开始,就进入到安装GibbsLDA++了。
第一步:下载GibbsLDA++
第二步:把下载的文件放到一个文件夹。对于没接触过Linux的同学来说,你可以放到,,,比如说/home/user(你的用户名)/LDA/ 下面。对于在Windows上用虚拟Ubuntu的同学来说,在你找的地方,随便造个文件夹装下这文件就好了。
第三步:解压缩及安装。对于没用过Linux的同学来说,没有右键解压缩这个故事是很痛苦的。好吧,慢慢来。比如你这个狗屁文件放到了/home/user/LDA/下面。而你甚至连你在什么文件夹下都不知道。你可以这样。在Terminal(也就是一个黑屏幕,只能输入命令的那种)里面输入(下面的$表示一行命令的开始,不用输入)
$ cd /home/user/LDA/
就行了。然后,解压缩。输入
$ gunzip GibbsLDA++-0.2.tar.gz(这个gunzip后面是你刚下载的文件的文件名,我下的是GibbsLDA++-0.2)
$ tar -xf GibbsLDA++-0.2.tar
然后进到你刚解压出来的那个文件夹(假设你现在还是在/home/user/LDA/下面)。输入
$ cd \GibbsLDA++-0.2
现在,你已经在/home/user/LDA/GibbsLDA++-0.2/ 这个文件夹下面了已然后安装GibsLDA。输入
$ make clean
$ make all
到目前为止,你已经大功告成了。安装完成。
第四步:准备你要让计算机去做Topic Modeling的文件。在C++的环境里,Topic Modeling需要这样的一个文件。文件格式是dat。这是最原始的txt文件。你也可以用任何软件存成txt文件之后,直接把后缀改成dat就行。比如,你的文件包含1,000篇文章。那你的文件就是这样的
第1行是你总共的文章篇数,在我们的例子里面是1000
第2行到第1001行就是你的那些文章,每篇文章占一行。对于英文来说,每个词之间已经用空格分开了,但是中文不行,所以你要先对文章进行切词。切词这事儿,就不归我这篇小臭长文管了。
第五步:运行GibbsLDA++,得到你要的结果。
将你要跑的文件,比如就叫test.dat吧。将文件放到/home/user/LDA/ 下面,也就是/home/user/LDA/test.dat
然后进入到你装了GibbsLDA++的文件夹,也就是/home/user/LDA/GibbsLDA++-0.2/,然后运行指令。其实就是在Terminal里面输入
$ cd /home/user/LDA/GibbsLDA++-0.2/
$ lda -est [-alpha <double>] [-beta <double>] [-ntopics <int>] [-niters <int>] [-savestep <int>] [-twords <int>] -dfile <string>
这句话“$ lda -est [-alpha <double>] [-beta <double>] [-ntopics <int>] [-niters <int>] [-savestep <int>] [-twords <int>] -dfile <string>”里面其实是GibbsLDA进行估算的各种参数设计,你实际输入的指令可能是:
$ src/lda -est -alpha 0.5 -beta 0.1 -ntopics 100 -niters 1000 -savestep 100 -twords 20 -dfile /home/luheng/LDA/test.dat
这意思是,参数alpha是0.5(这个可以先不管),参数beta是0.1(这个也可以先不管),产生100个topic,运算迭代1000次,每迭代100次之后的结果都保存出来,每个topic包含20个词,要运算的文件是/home/luheng/LDA/test.dat
第六步:看结果。
好了,如果你顺利走到这一步,就去看结果吧。结果文件存在你的测试文件所在的目录。在这个案例中,就是/home/luheng/LDA/ 下面。
会产生类似这样的文件,不同的后缀表示不同的结果。所有这些文件都可以用记事本打开。newdocs.dat.others
newdocs.dat.phi
newdocs.dat.tassign
newdocs.dat.theta
newdocs.dat.twords
其中最直接的是.twords文件。这个文件里面就是你要的n个topic,以及每个topic下面包含的具体的字词。
.others里面是各种你设置的参数
.theta里面是每篇文章对应你设置的n个topic的“因子载荷”(factor loading)
.phi里面是每个topic对应每篇文章的“因子载荷”(factor loading)
.theta 和 .phi 里面的数据其实是一回事,互为转置罢(transpose)了。
.tassign是个啥玩意儿我暂时还没去搞明白。反正除此以外的那几个文件里面的东西已经够我用了。
一些提醒:
计算机很聪明也很笨,你给什么它都帮你算,所以你准备的文件一定要想清楚。比如,是不是所有字词都放心去,那些a, the, of啊,那些华丽丽的形容词啊,是拿掉还是放心去。或者是不是只放名词进去。这事儿只能自己决定,计算机帮不了你。
你选多少个主题,每个主题要多少字,迭代多少步。这玩意儿没有一定的规定。你就试吧。撞大运吧。虽然GibbsLDA靠谱,可终究还是跟因子分析一样,充满了arbitrary!
用GibbsLDA做Topic Modeling的更多相关文章
- 主题模型 利用gibbslda做数据集主题抽样
电子科技大学电子商务实验室Kai Yip,欢迎同行指正,也欢迎互相指导,学习. 广告打完,进入正题. 关于程序运行结果的分析请参照我的另一篇博客:http://www.cnblogs.com/nlp- ...
- Topic modeling【经典模型】
http://www.cs.princeton.edu/~blei/topicmodeling.html Topic models are a suite of algorithms that unc ...
- 论文《Entity Linking with Effective Acronym Expansion, Instance Selection and Topic Modeling》
Entity Linking with Effective Acronym Expansion, Instance Selection and Topic Modeling 一.主要贡献 1. pro ...
- [IR] Concept Search and LDA
重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA. From: http://blog.csdn.net/huagong_adu/article/details/7937616/ 传统方法 ...
- 理解 LDA 主题模型
前言 gamma函数 0 整体把握LDA 1 gamma函数 beta分布 1 beta分布 2 Beta-Binomial 共轭 3 共轭先验分布 4 从beta分布推广到Dirichlet 分布 ...
- LDA汇总
1.Blei的LDA代码(C):http://www.cs.princeton.edu/~blei/lda-c/index.html2.D.Bei的主页:http://www.cs.princeton ...
- 通俗理解LDA主题模型
通俗理解LDA主题模型 0 前言 印象中,最開始听说"LDA"这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印 ...
- 通俗理解LDA主题模型(boss)
0 前言 看完前面几篇简单的文章后,思路还是不清晰了,但是稍微理解了LDA,下面@Hcy开始详细进入boss篇.其中文章可以分为下述5个步骤: 一个函数:gamma函数 四个分布:二项分布.多项分布. ...
- [Bayes] Concept Search and LDA
重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA. 相关数学知识 LDA-math-MCMC 和 Gibbs Sampling LDA-math - 认识 Beta/Dirichlet 分 ...
随机推荐
- ROS知识(22)----USB口映射固定名字
如果有多个usb链接到电脑,如果插入的先后顺序不同,那么会导致对应的usb口也会不同,例如当只有一个激光的usb链接到电脑,其设备名字为/dev/ttyUSB0:当如果有底盘的usb以及激光的usb连 ...
- 用ViewPager实现一个程序引导界面
下面使用ViewPager来实现一个程序引导的demo: 一般来说,引导界面是出现第一次运行时出现的,之后不会再出现.所以需要记录是否是第一次使用程序,办法有很多,最容易想到的就是使用SharedPr ...
- C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\文件不断增长,如何处理?
很久没有写博了.最近半年除了忙活布置新家和过年期间走亲访友之外,都是在公司处理一些项目中的杂事:连家里买的很多书都停下来没看了,感觉这段时间在事业和学习上一直都是忙忙碌碌,却又碌碌无为. 吐槽完,说正 ...
- perl数组高级
1 去除一个数组中的重复元素: 使用grep函数代码片段: 代码: my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 ); my %count; ...
- systemtap 调试postgrel
http://blog.163.com/digoal@126/blog/static/16387704020137140265557/ dtrace http://blog.163.com/dig ...
- 安装express并创建工程
安装express npm install express-generator -g 使用命令创建express工程, express projectName 生成express相应的工程结构 bin ...
- oracle exp/imp命令详解
E:\>exp help=y 通过输入 EXP 命令和用户名/口令,您可以 在用户 / 口令之后的命令: 实例: EXP SCOTT/TIGER 或者,您也可以通过输入跟有各种参数的 EXP 命 ...
- python测试开发django-25.表单提交之post注册案例
前言 一个网站上新用户注册,会写个注册页面,如果用django写个注册页面的流程呢? 本篇以post请求示例,从html页面上输入用户注册信息,提交到后台处理数据,然后传参数据到User数据库表里面 ...
- Vector HashMap List 存取数据速度
数组大小:40000List_List:0.0045List :0.0818List_HashMap:0.0072HashMap :0.0517List_Vector:0.0037Vector :0. ...
- Xcode下修改plist文件
plist文件在Mac OS下的重要性,如同Windows下的注册表文件.而很多场景下面,我们需要修改plist文件来实现一些"自动化"操作 Mac OS本身提供了一个工具:P ...