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!

Category: Statistics 1 2 3  |  Comment (RSS)  |  Trackback

用GibbsLDA做Topic Modeling的更多相关文章

  1. 主题模型 利用gibbslda做数据集主题抽样

    电子科技大学电子商务实验室Kai Yip,欢迎同行指正,也欢迎互相指导,学习. 广告打完,进入正题. 关于程序运行结果的分析请参照我的另一篇博客:http://www.cnblogs.com/nlp- ...

  2. Topic modeling【经典模型】

    http://www.cs.princeton.edu/~blei/topicmodeling.html Topic models are a suite of algorithms that unc ...

  3. 论文《Entity Linking with Effective Acronym Expansion, Instance Selection and Topic Modeling》

    Entity Linking with Effective Acronym Expansion, Instance Selection and Topic Modeling 一.主要贡献 1. pro ...

  4. [IR] Concept Search and LDA

    重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA. From: http://blog.csdn.net/huagong_adu/article/details/7937616/ 传统方法 ...

  5. 理解 LDA 主题模型

    前言 gamma函数 0 整体把握LDA 1 gamma函数 beta分布 1 beta分布 2 Beta-Binomial 共轭 3 共轭先验分布 4 从beta分布推广到Dirichlet 分布 ...

  6. LDA汇总

    1.Blei的LDA代码(C):http://www.cs.princeton.edu/~blei/lda-c/index.html2.D.Bei的主页:http://www.cs.princeton ...

  7. 通俗理解LDA主题模型

    通俗理解LDA主题模型 0 前言 印象中,最開始听说"LDA"这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印 ...

  8. 通俗理解LDA主题模型(boss)

    0 前言 看完前面几篇简单的文章后,思路还是不清晰了,但是稍微理解了LDA,下面@Hcy开始详细进入boss篇.其中文章可以分为下述5个步骤: 一个函数:gamma函数 四个分布:二项分布.多项分布. ...

  9. [Bayes] Concept Search and LDA

    重要的是通过实践更深入地了解贝叶斯思想,先浅浅地了解下LDA. 相关数学知识 LDA-math-MCMC 和 Gibbs Sampling LDA-math - 认识 Beta/Dirichlet 分 ...

随机推荐

  1. ROS知识(22)----USB口映射固定名字

    如果有多个usb链接到电脑,如果插入的先后顺序不同,那么会导致对应的usb口也会不同,例如当只有一个激光的usb链接到电脑,其设备名字为/dev/ttyUSB0:当如果有底盘的usb以及激光的usb连 ...

  2. 用ViewPager实现一个程序引导界面

    下面使用ViewPager来实现一个程序引导的demo: 一般来说,引导界面是出现第一次运行时出现的,之后不会再出现.所以需要记录是否是第一次使用程序,办法有很多,最容易想到的就是使用SharedPr ...

  3. C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\文件不断增长,如何处理?

    很久没有写博了.最近半年除了忙活布置新家和过年期间走亲访友之外,都是在公司处理一些项目中的杂事:连家里买的很多书都停下来没看了,感觉这段时间在事业和学习上一直都是忙忙碌碌,却又碌碌无为. 吐槽完,说正 ...

  4. perl数组高级

    1 去除一个数组中的重复元素: 使用grep函数代码片段: 代码: my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 ); my %count; ...

  5. systemtap 调试postgrel

    http://blog.163.com/digoal@126/blog/static/16387704020137140265557/   dtrace http://blog.163.com/dig ...

  6. 安装express并创建工程

    安装express npm install express-generator -g 使用命令创建express工程, express projectName 生成express相应的工程结构 bin ...

  7. oracle exp/imp命令详解

    E:\>exp help=y 通过输入 EXP 命令和用户名/口令,您可以 在用户 / 口令之后的命令: 实例: EXP SCOTT/TIGER 或者,您也可以通过输入跟有各种参数的 EXP 命 ...

  8. python测试开发django-25.表单提交之post注册案例

    前言 一个网站上新用户注册,会写个注册页面,如果用django写个注册页面的流程呢? 本篇以post请求示例,从html页面上输入用户注册信息,提交到后台处理数据,然后传参数据到User数据库表里面 ...

  9. Vector HashMap List 存取数据速度

    数组大小:40000List_List:0.0045List :0.0818List_HashMap:0.0072HashMap :0.0517List_Vector:0.0037Vector :0. ...

  10. Xcode下修改plist文件

    plist文件在Mac OS下的重要性,如同Windows下的注册表文件.而很多场景下面,我们需要修改plist文件来实现一些"自动化"操作   Mac OS本身提供了一个工具:P ...