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

Gibbslda有很多版本,我所用的版本为C++版(下载地址http://gibbslda.sourceforge.net/),平台是linux,博主试过windows上运行,有两个主要问题很烦~,一个是path,一个是平台太大。最后还是投入了ubuntu的怀抱,感觉配置好g++环境后速度还不错。由于系统版本等原因,不同的情况下可能会出现或多或少的问题,在做lda抽取的过程中,参考了几个博客,地址如下,我在这里做了一个总结,基本上应该避免了网上教程从来都不能使用的毛病。所以如果按照博主的过程出现问题,可以留言或者邮箱。

http://weblab.com.cityu.edu.hk/blog/luheng/2011/06/24/%E7%94%A8gibbslda%E5%81%9Atopic-modeling/

先说一下最有可能的问题,当然,你可以先按照下面的过程去配置,如果有麻烦再回过头来看看。

如果出现以下错误:

g++ -c -o utils.o utils.cpp

utils.cpp: 在静态成员函数‘static int utils::parse_args(int, char**,
model*)’中:

utils.cpp:69:28: 错误: ‘atof’在此作用域中尚未声明

utils.cpp:72:27: 错误: ‘atof’在此作用域中尚未声明

utils.cpp:75:24: 错误: ‘atoi’在此作用域中尚未声明

utils.cpp:78:29: 错误: ‘atoi’在此作用域中尚未声明

utils.cpp:81:31: 错误: ‘atoi’在此作用域中尚未声明

utils.cpp:84:29: 错误: ‘atoi’在此作用域中尚未声明

utils.cpp: 在静态成员函数‘static int utils::read_and_parse(std::string,
model*)’中:

utils.cpp:270:41: 错误: ‘atof’在此作用域中尚未声明

utils.cpp:273:40: 错误: ‘atof’在此作用域中尚未声明

utils.cpp:276:37: 错误: ‘atoi’在此作用域中尚未声明

utils.cpp:279:37: 错误: ‘atoi’在此作用域中尚未声明

utils.cpp:282:37: 错误: ‘atoi’在此作用域中尚未声明

utils.cpp:285:41: 错误: ‘atoi’在此作用域中尚未声明

make[1]: *** [utils.o] 错误 1

make[1]:正在离开目录 `/home/tonia/GibbsLDA++-0.2/src‘

make: *** [all] 错误 2

解决方法:

1). 在src/utill.cpp 文件头加入:

#include<stdio.h> #include<stdlib.h>

2). 在src/utill.h 文件头加入:

#include<stdlib.h>

3). 在src/lda.cp 文件头加入:

#include<stdio.h>

4). 重新make

问题二,ubuntu g++环境的配置

sudo apt-get install build-essential

然后查看自己系统的GCC的版本

gcc --version

安装G++

sudo apt-get install g++-4.4(4.4是GCC的版本号)

查看G++的版本

g++ --version

问题三,注意ubuntu目录会区分大小写的问题

OK!现在开始模拟整个过程:

第一步:下载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)了

时间: 2024-08-02 11:03:36

主题模型 利用gibbslda做数据集主题抽样的相关文章

概率主题模型简介 Introduction to Probabilistic Topic Models

此文为David M. Blei所写的<Introduction to Probabilistic Topic Models>的译文,供大家参考. 摘要:概率主题模型是一系列旨在发现隐藏在大规模文档中的主题结构的算法.本文首先回顾了这一领域的主要思想,接着调研了当前的研究水平,最后展望某些有所希望的方向.从最简单的主题模型--潜在狄立克雷分配(Latent Dirichlet Allocation,LDA)出发,讨论了其与概率建模的联系,描述了用于主题发现的两种算法.主题模型日新月异,被扩展和

Hulu机器学习问题与解答系列 | 十九:主题模型

今天的内容是 [主题模型] 场景描述 基于Bag-Of-Words(或N-gram)的文本表示模型有一个明显的缺陷,就是无法识别出不同的词(或词组)具有相同主题的情况.我们需要一种技术能够将具有相同主题的词(或词组)映射到同一维度上去,于是产生了主题模型(Topic Model).主题模型是一种特殊的概率图模型.想象一下我们如何判定两个不同的词具有相同的主题呢?这两个词可能有更高的概率出现在同一主题的文档中:换句话说,给定某一主题,这两个词的产生概率都是比较高的,而另一些不太相关的词产生的概率则

主题模型

主题模型(topic modeling)是一种常见的机器学习应用,主要用于对文本进行分类.传统的文本分类器,例如贝叶斯.KNN和SVM分类器,只能将测试对象分到某一个类别中,假设我给出三个分类:“算法”.“网络”和“编译”让其判断,这些分类器往往将对象归到某一类中. 但是如果一个外行完全给不出备选类别,有没有分类器能够自动给出类别判断呢? 有,这样的分类器就是主题模型. 潜在狄立克雷分配(Latent Dirichlet Allocation,LDA)主题模型是最简单的主题模型,它描述的是一篇文

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

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

PLSA主题模型

主题模型 主题模型这样理解一篇文章的生成过程: 1.          确定文章的K个主题. 2.          重复选择K个主题之一,按主题-词语概率生成词语. 3.          所有词语组成文章. 这里可以看到,主题模型仅仅考虑词语的数量,不考虑词语的顺序,所以主题模型是词袋模型. 主题模型有两个关键的过程: 1.          doc -> topic 2.          topic -> word 其中topic -> word是定值,doc -> top

主题模型--机器学习

两篇文档是否相关往往不只决定于字面上的词语重复,还取决于文字背后的语义关联.对语义关联的挖掘,可以让我们的搜索更加智能化.本文着重介绍了一个语义挖掘的利器:主题模型.主题模型是对文字隐含主题进行建模的方法.它克服了传统信息检索中文档相似度计算方法的缺点,并且能够在海量互联网数据中自动寻找出文字间的语义主题.近些年来各大互联网公司都开始了这方面的探索和尝试.就让我们看一下究竟吧. 关键词:主题模型 技术领域:搜索技术.自然语言处理 假设有两个句子,我们想知道它们之间是否相关联: 第一个是:"乔布斯

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

0 前言 看完前面几篇简单的文章后,思路还是不清晰了,但是稍微理解了LDA,下面@Hcy开始详细进入boss篇.其中文章可以分为下述5个步骤: 一个函数:gamma函数 四个分布:二项分布.多项分布.beta分布.Dirichlet分布 一个概念和一个理念:共轭先验和贝叶斯框架 两个模型:pLSA.LDA(在本文第4 部分阐述) 一个采样:Gibbs采样 本文便按照上述5个步骤来阐述,希望读者看完本文后,能对LDA有个尽量清晰完整的了解.同时,本文基于邹博讲LDA的PPT.rickjin的LDA

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

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

主题模型TopicModel:隐含狄利克雷分布LDA

http://blog.csdn.net/pipisorry/article/details/42649657 主题模型LDA简介 隐含狄利克雷分布简称LDA(Latent Dirichlet allocation),是一种主题模型,它可以将文档集中每篇文档的主题按照概率分布的形式给出. 同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量k即可.此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它. LDA首先由Blei, David