您的位置:首页 > 其它

JGibbLDA使用总结

2014-02-20 17:02 435 查看
最近在做基于LDA(Latent Dirichlet Allocation)的文本分类处理,开始学习和接触了LDA,因为代码采用的是Java,所以我选择的LDA开源工具是JGibbLDA,这个是LDA的Java版本实现,下载地址为:http://jgibblda.sourceforge.net/ ,当前最新版本为v1.0。同时对应的C++版本为GibbsLDA,下载地址为:http://gibbslda.sourceforge.net/

       感谢Phantom(byr ID)在学习和使用过程中对我的指导和帮助。

   首先下载并解压,解压后文件目录如下所示:



    bin存放的是编译后的class文件,lib中放args4j-2.0.6.jar,models中存放已经生成好的主题模型示例,src存放那个源文件。我在使用时把jar文件放于工程中,另外直接把src下的jgibblda包复制于项目中。


    1.输入文件格式

    输入文件的格式形如下图所示:



    其中第一行表述训练语料文档的数目,之后每一行是一个文档,每一行的内容是文档中的词语。


    2.输出文件

    输出文件主要有<model_name>.others、<model_name>.phi、<model_name>.theta、<model_name>.tassign、<model_name>.twords,另外还有一个wordmap.txt文件。其中<model_name>根据采样迭代次数来指定,如model-00800,最后一次采样名称命名为model-final。

.others文件存储LDA模型参数,如alpha、beta等。

.phi文件存储词语-主题分布,每一行是一个主题,列内容为词语。

.theta文件主题文档分布,每一行是一个文档,列内容是主题概率。

.tassign文件是训练预料中单词的主题指定(归属),每一行是一个语料文档。


    3.使用方式

    JGibbLDA可以通过命令行或者代码调用运行。


    3.1.命令行调用简介

初次使用训练模型

[java] view
plaincopy





$ java [-mx512M] -cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -est [-alpha <double>] [-beta <double>] [-ntopics <int>] [-niters <int>] [-savestep <int>] [-twords <int>] –dir <string> -dfile <string>
 

-est 从训练语料中评估出LDA模型

-alpha LDA模型中的alpha数值,默认为50/K(K是主题数目)

-beta LDA模型中的beta数值,默认是0.1

-ntopics 主题数目,默认值是100

-niters GIbbs采样的迭代数目,默认值为2000

-savestep 指定开始保存LDA模型的迭代次数

-dir 训练语料目录

-dfile 训练语料文件名称

此处需要指出的是dfile最好写输入语料文件名称,而dir指定语料文件所在的目录,训练过程中生成的模型文件会默认存放在dir下面。例如语料的绝对路径为/usr/Java/models/newDoc.dat,可以设置为dir=/usr/Java/models,而dfile=newDoc.dat,这样训练过程中的模型文件会默认存放在/usr/Java/models下面。

在原有模型上继续迭代

[java] view
plaincopy





$ java [-mx512M]-cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -estc -dir <string> -model <string> [-niters <int>] [-savestep <int>] [-twords <int>] 

具体参数的含义可以在官网上找到,这里不一一介绍了。

根据现有LDA模型,预测新语料

[java] view
plaincopy





$ java [-mx512M] -cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -inf -dir <string> -model <string> [-niters <int>] [-twords <int>] -dfile <string>
 


       3.2代码调用

       初次训练,生成模型

[java] view
plaincopy





        LDACmdOption ldaOption = new LDACmdOption();   

        ldaOption.est = true;  

        ldaOption.estc = false;  

        ldaOption.modelName = "model-final";  

        ldaOption.dfile = "newDoc.dat";  

        ldaOption.alpha = 0.5;  

        ldaOption.beta = 0.1;  

        ldaOption.K = 100;  

        ldaOption.niters = 1000;  

        topicNum = ldaOption.K;  

        Estimator estimator = new Estimator();  

        estimator.init(ldaOption);  

        estimator.estimate();  

LDACmdOption类主要用于设置LDA所需的参数,Estimator用于评估生成LDA模型。

根据LDA模型,推断新语料的LDA主题信息。

[java] view
plaincopy





        LDACmdOption ldaOption = new LDACmdOption();   

        ldaOption.inf = true;  

        ldaOption.estc = false;  

        ldaOption.dir = "LDAResult";   

        ldaOption.modelName = "model-final";  

        ldaOption.dfile = "predictionDoc.dat";  

        Inferencer inferencer = new Inferencer();   

        inferencer.init(ldaOption);  

        Model newModel = inferencer.inference();

需要指出的是,在根据已训练的LDA模型预测时,当前目录中需要包含已有的LDA训练输出文件。就上述配置来说,目录LDAResult下需要包含model-final.others、model-final.phi、model-final.tassign、model-final.theta、model-final.twords、wordmap.txt文件。

测试语料的LDA模型文件将生成在LDAResult文件夹中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文本分类 LDA JGibbLDA