使用Mahout训练LDA并检索它的主题

时间:2012-07-25 14:11:13

标签: mahout lda topic-modeling

我正在尝试Apache Mahout,并且有很多关于如何使用LDA生成主题模型的信息,但是关于如何使用他们的新CVB lda算法进行相同操作的信息很少。我想要做的是生成与原始ldatopic类似的主题的概率。

任何有关如何执行此操作的信息或示例都将不胜感激!

谢谢!

更新:

好的,所以我做了很多,但它仍然不完整,所以任何帮助都会很棒!

3 个答案:

答案 0 :(得分:4)

好的,所以我仍然不知道如何输出主题,但我已经弄清楚如何获取cvb和我认为的文档向量,但是我没有运气倾销它们,所以帮助在这里仍然会受到赞赏!

哦,别忘了设置值:

export MAHOUT_HOME=/home/sgeadmin/mahout
export HADOOP_HOME=/usr/lib/hadoop
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export HADOOP_CONF_DIR=$HADOOP_HOME/conf

在主人身上,否则这一切都无效。

所以首先使用starclusters put上传文档(显然如果你没有使用starcluster跳过这个:)):

starcluster put mycluster text_train /home/sgeadmin/
starcluster put mycluster text_test /home/sgeadmin/

然后我们需要将它们添加到hadoop的hbase文件系统中(不要忘记-hadoop starcluster):

dumbo put /home/sgeadmin/text_train /user/sgeadmin/ -hadoop starcluster

然后拨打Mahout的seqdirectory将文本转换为序列文件

$MAHOUT_HOME/bin/mahout seqdirectory --input /user/sgeadmin/text_train --output /user/sgeadmin/text_seq -c UTF-8 -ow

然后拨打Mahout的seq2parse将其转换为矢量

$MAHOUT_HOME/bin/mahout seq2sparse -i text_seq -o /user/sgeadmin/text_vec -wt tf -a org.apache.lucene.analysis.WhitespaceAnalyzer -ow

最后调用cvb,我相信-dt标志指出推断主题应该去哪里,但因为我还没有能够转储它们,所以我无法确认这一点。

$MAHOUT_HOME/bin/mahout cvb -i /user/sgeadmin/text_vec/tf-vectors -o /user/sgeadmin/text_lda -k 100 -nt 29536 -x 20 -dict /user/sgeadmin/text_vec/dictionary.file-0 -dt /user/sgeadmin/text_cvb_document -mt /user/sgeadmin/text_states

-k标志是主题的数量,-nt标志是字典的大小,您可以通过计算向量内dictionary.file-0的条目数来计算(在这种情况下,在/user/sgeadmin/text_vec下),-x是迭代次数。

如果有人知道如何从这里获得文档主题概率,那么将非常感谢帮助!

答案 1 :(得分:2)

After completing aboveprocess,you can obtain an output of the computed topics using another Mahout utility called LDAPrintTopics.java by passing following commands

--dict (-d) dict  --------->Dictionary to read in, in the same
                                           format as one created by
                                           org.apache.mahout.utils.vectors.lucen
                                           e.Driver
  --output (-o) output--------->Output directory to write top words
  --words (-w) words--------->Number of words to print
  --input (-i) input--------->Path to an LDA output (a state)
  --dictionaryType (-dt) dictionaryType--------->The dictionary file type
                                           (text|sequencefile)

答案 2 :(得分:2)

当您运行-dt时,文档主题分发以序列文件格式存储在您使用--doc_topic_outputmahout cvb指定的目录下。在您的情况下,此目录将为/user/sgeadmin/text_cvb_document

要将这些序列文件的内容转储到文本文件,您可以使用mahout vectordump实用程序,如下所示:

mahout vectordump -i /path/to/doc_topic_seq_input -o /path/to/doc_topic_text_out -p true -c csv

其中:

-i    Path to input directory containing document-topic distribution in sequence file format.
-o    Path to output file that will contain your document-topic distribution in text format.
-p    Key values will be displayed if this parameter is used.
-c    Output the Vector as CSV, otherwise it substitutes in the terms for vector cell entries