JGibbLDA使用总结

最近在做基于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)在学习和使用过程中对我的指导和帮助。

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

JGibbLDA使用总结_第1张图片

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

    1.输入文件格式

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

JGibbLDA使用总结_第2张图片

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

    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 plain copy
  1. $ 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 plain copy
  1. $ 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 plain copy
  1. $ 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 plain copy
  1.         LDACmdOption ldaOption = new LDACmdOption();   
  2.         ldaOption.est = true;  
  3.         ldaOption.estc = false;  
  4.         ldaOption.modelName = "model-final";  
  5.         ldaOption.dfile = "newDoc.dat";  
  6.         ldaOption.alpha = 0.5;  
  7.         ldaOption.beta = 0.1;  
  8.         ldaOption.K = 100;  
  9.         ldaOption.niters = 1000;  
  10.         topicNum = ldaOption.K;  
  11.         Estimator estimator = new Estimator();  
  12.         estimator.init(ldaOption);  
  13.         estimator.estimate();  

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

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

[java]  view plain copy
  1.         LDACmdOption ldaOption = new LDACmdOption();   
  2.         ldaOption.inf = true;  
  3.         ldaOption.estc = false;  
  4.         ldaOption.dir = "LDAResult";   
  5.         ldaOption.modelName = "model-final";  
  6.         ldaOption.dfile = "predictionDoc.dat";  
  7.         Inferencer inferencer = new Inferencer();   
  8.         inferencer.init(ldaOption);  
  9.         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)