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


    电子科技大学电子商务实验室Kai Yip,欢迎同行指正,也欢迎互相指导,学习。

    广告打完,进入正题。

    关于程序运行结果的分析请参照我的另一篇博客:http://www.cnblogs.com/nlp-yekai/p/3858705.html

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

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

    http://gibbslda.sourceforge.net/

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

    如果出现以下错误:
     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)了

    模型训练到此就差不多了。程序自带的另外两条命令,-estc的意思是继续训练模型,而-inf就是用训练好的模型进行文档主题分布的推断。大家可以试试,在博主的数据集上效果很好。

  • 相关阅读:
    Babel 7.x 和 Babel 8.x的区别
    JavaScript——Set 的用法
    DFS 和 BFS
    JavaScript——event事件详解
    Day17-18前端学习之路——Javascript事件
    Day17-18前端学习之路——常用语句资料库
    Day5前端学习之路——盒模型和浮动
    Day7前端学习之路——多栏布局
    如何在GitHub预览html
    新人上路请教一个输入字符的问题
  • 原文地址:https://www.cnblogs.com/nlp-yekai/p/3711384.html
Copyright © 2020-2023  润新知