GibbsLDA++使用记录

LDA的相关介绍可以看这二篇博客

LDA浅析:http://blog.csdn.net/huagong_adu/article/details/7937616

http://www.52nlp.cn/lda-math-mcmc-%E5%92%8C-gibbs-sampling1

 

 

这里记录一下使用GibbsLDA++的介绍以及JGibbLDA的使用过程:

 

GibbsLDA++主页地址: http://gibbslda.sourceforge.net/

 

 

GibbsLDA ++是使用Gibbs采样技术进行参数估计和推理的潜在Dirichlet分配(LDA)的C / C ++实现。它非常快,旨在分析大型数据集的隐藏/潜在主题结构,包括大量文本/ Web文档。 LDA首先由David Blei等引入。在C(使用变分方法),Java和Matlab中已经有了这个模型的几个实现。

 

GibbsLDA ++可用于以下潜在应用领域:

 

1.信息检索和搜索(分析大型文本收集的语义/潜在主题/概念结构,实现更智能的信息搜索)。

2.文件分类/集群,文档摘要和文本/网络挖掘社区。

3.基于内容的图像聚类,对象识别和计算机视觉的其他应用。

4.生物数据中的其他潜在应用。

 

GibbsLDA ++代码下载页:https://sourceforge.net/projects/gibbslda/

 

JGibbLDA代码下载页:https://sourceforge.net/projects/jgibblda/

 

 

GibbsLDA ++ 是LDA的C/C++版本:

环境要求:linux

 

解压并且编译:

$ gunzipGibbsLDA++.tar.gz

$ tar -xfGibbsLDA++.tar

$ make clean

$ make all

 

在编译GibbsLDA ++之后,我们在GibbsLDA ++ / src目录中有一个可执行文件“lda”

 

 

GibbsLDA++使用方法:

在linux编译好之后有一个lda的可执行文件,可以在linux环境下用命令行的形式执行。

 

1.      从零开始的参数估计

$ lda -est [-alpha <double>] [-beta <double>][-ntopics <int>] [-niters <int>] [-savestep <int>] [-twords<int>] -dfile <string>

 

参数说明([]里面的参数是可以选择的):

-est:从头估计LDA模型

-alpha <double>:LDA的alpha的超参数的值。 alpha的默认值为50 / K(K是主题数)。有关选择α和β值的详细讨论,请参阅[Griffiths04]。

-beta <double>:beta的值,也是LDA的超参数。其默认值为0.1

-ntopics <int>:主题数量。其默认值为100.这取决于输入数据集。请参阅[Griffiths04]和[Blei03]更加仔细地讨论选择主题数量。

-niters <int>:吉布斯抽样迭代次数。默认值为2000。

-savestep <int>:将LDA模型保存到硬盘的步骤(按Gibbs采样迭代次数计算)。默认值为200。也就是说每迭代200次就保存一次模型。

-twords <int>:每个主题最有可能的单词。默认值为零。如果将此参数设置为大于零的值,例如20,则GibbsLDA ++将根据上述参数savestep将每个主题的前20个最有可能单词列表打印出来,以便每次将模型保存到硬盘时。

-dfile <string>:输入训练数据文件。

 

2.      先验估计模型的参数估计

 

$ lda -estc -dir <string> -model<string> [-niters <int>] [-savestep <int>] [-twords<int>

 

参数说明([]里面的参数是可以选择的):

-estc:从以前估计的模型继续估计模型。

-dir <string>:目录包含以前估计的模型

-model <string>:先前估计的模型的名称。

-niters <int>:Gibbs采样迭代次数以继续估计。 默认值为2000。

-savestep <int>:将LDA模型保存到硬盘的步骤(按Gibbs采样迭代次数计算)。 默认值为200。

-twords <int>:每个主题最有可能的字数。 默认值为零。 如果将此参数设置为大于零的值,例如20,则GibbsLDA ++将根据上述参数savestep将每个主题的前20个最有可能单词列表打印出来,以便每次将模型保存到硬盘时。

 

3.      推测以前看不见(新)的数据

 

$ lda -inf -dir <string> -model<string> [-niters <int>] [-twords <int>] -dfile<string>

 

参数说明([]里面的参数是可以选择的):

 

-inf:使用先前估计的LDA模型推断以前看不到的(新)数据。

-dir <string>:目录包含以前估计的模型

-model <string>:先前估计的模型的名称。

-niters <int>:用于推断的吉布斯抽样迭代次数。 默认值为20。

-twords <int>:新数据的每个主题的最有可能的字数。 默认值为零。 如果将此参数设置为大于零的值(例如20),则GibbsLDA ++将在推断后打印每个主题前20个最有可能的单词列表。

-dfile <string>:包含新数据的文件。

 

 

 

输入数据的格式:用于训练/估计模型和新数据的数据(即,以前看不见的数据)都是如下相同的格式:

 

[M]

 

[document1]

 

[document2]

 

...

 

[documentM]

 

 

其中第一行是文件的总数[M]。之后的每一行都是一个文本。 [documenti]是数据集的第i个文档,由Ni单词/术语列表组成。

 

[documenti] = [wordi1] [wordi2] ...[wordiNi]

 

其中所有[wordij](i = 1..M,j = 1..Ni)是文本字符串(词),它们由空白字符分隔。

 

 

输出:GibbsLDA ++的吉布斯抽样估计的输出包括以下文件:

<model_name>.others

 

<model_name>.phi

 

<model_name>.theta

 

<model_name>.tassign

 

<model_name>.twords

 

说明:

<model_name>:是与保存在硬盘上的时间步长对应的LDA模型的名称。例如,模型的名称保存在Gibbs采样迭代中,第400个将是模型00400。类似地,模型在第1200次迭代中被保存为模型01200。最后一个Gibbs采样迭代的模型名称是最终模型。

 

<model_name> .others:此文件包含LDA模型的一些参数,如:

alpha=?

 

beta=?

 

ntopics=? # 即主题数量

 

ndocs=? # 即文件数量

nwords=? # 即词汇大小

 

liter=? # 即保存模型的Gibbs采样迭代

 

 

<model_name> .phi:此文件包含单词主题分布,即p(wordw | topict)。每行都是一个主题,每一列都是词汇中的一个单词。

 

<model_name> .theta:此文件包含主题文档分发,即p(topict | documentm)。每行都是一个文档,每一列是一个主题。

 

<model_name> .tassign:此文件包含训练数据中词的主题分配。 每一行都是一个文件,它由一个<wordij>:<topic of wordij>的列表组成

 

<model_file> .twords:此文件包含每个主题的词汇最有可能的词。 在命令行中指定了词。

 

GibbsLDA ++还保存了一个名为wordmap.txt的文件,其中包含单词和单词的ID(整数)之间的映射。这是因为GibbsLDA ++直接使用单词/术语的整数ID而不是文本字符串。

 

 

Gibbs采样推理的输出,用于以前看不见的数据:

GibbsLDA ++推理的输出与估计过程的输出几乎相同,只是这些文件的内容是新数据。 <model_name>与输入(新)数据的文件名完全相同。

 

 

GibbsLDA ++ 例子:

 

例如,我们要估计存储在名为models / casestudy / trndocs.dat的文件中的文档集合的LDA模型,然后使用该模型对存储在文件模型/ casestudy / newdocs.dat中的新数据进行推理。

 

我们想估计100个主题,alpha = 0.5和beta = 0.1。我们要执行1000次Gibbs采样迭代,每100次迭代保存一个模型,每次保存一个模型时,打印每个主题20个最有可能的单词列表。假设我们现在在GibbsLDA ++的主目录下,我们将执行以下命令来从头估计LDA模型,命令如下:

 

$ src/lda -est -alpha 0.5 -beta 0.1 -ntopics 100-niters 1000 -savestep 100 -twords 20 -dfile models/casestudy/trndocs.dat

 

 

现在看看models/casestudy目录,我们可以看到输出:

现在,我们要继续从先前估计的模型型号01000(model-01000) 执行800次吉布斯抽样迭代,其中savestep = 100,twords = 30,我们执行以下命令:

 

$ src/lda -estc -dir models/casestudy/-model model-01000 -niters 800 -savestep 100 -twords 30

看casestudy目录的输出。

 

现在,如果我们要对新数据newdocs.dat(注意,新数据文件存储在LDA模型的同一目录中)使用之前估计的LDA模型之一进行推理(30吉布斯抽样迭代),例如 model-01800,我们执行以下命令:

$ src/lda -inf -dir models/casestudy/ -modelmodel-01800 -niters 30 -twords 20 -dfile newdocs.dat

 

现在,看casestudy目录,我们可以看到推论的输出:

 

newdocs.dat.others

 

newdocs.dat.phi

 

newdocs.dat.tassign

 

newdocs.dat.theta

 

newdocs.dat.twords

 

 

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务