Mahout(0.8)CVB VectorDump

时间:2014-01-25 21:27:21

标签: mahout

我正在尝试按照下面列出的步骤在纯文本文件的目录上运行CVB。但是,我无法看到vectordump(步骤6)。没有" -c csv"标记生成的文件为空。但是,如果我使用标志" -c csv"生成的文件以一系列数字开头,后跟按字母顺序组织的一系列unigrams(见下文)

#1,10,1163,12,121,13,14,141,1462,15,16,17,185,1901,197,2,201,2227,23,283,298,3,331,35,4,402,4351,445,5,57,58,6,68,7,9,987,a.m,ab,abc,abercrombie,abercrombies,ability

有人可以指出我做错了吗?

谢谢

0:设置路径

> export HDFS_PATH=/path/to/hdfs/
> export LOCAL_PATH=/path/to/localfs

1:使用hadoop fs -put [-put ...]

将文档放入HDFS
> hadoop fs -put $LOCAL_PATH/test $HDFS_PATH/rawdata

2:从目录

生成(文本)序列文件
> mahout seqdirectory \
-i $HDFS_PATH/rawdata \    
-o $HDFS_PATH/sequenced \    
-c UTF-8 -chunk 5

3-从文本序列文件生成稀疏矢量

> mahout seq2sparse \
-i $HDFS_PATH/sequenced \
-o $HDFS_PATH/sparseVectors \
-ow --maxDFPercent 85 --namedVector --weight tf

4- rowid ::将SequenceFile映射到{SequenceFile,SequenceFile}

> mahout rowid \
-i $HDFS_PATH/sparseVectors/tfidf-vectors \
-o $HDFS_PATH/matrix

5- run cvb

> mahout cvb \
-i $HDFS_PATH/matrix/matrix \
-o $HDFS_PATH/test-lda \
-k 100 -ow -x 40 \
-dict $HDFS_PATH/sparseVectors/dictionary.file-0 \
-dt $HDFS_PATH/test-lda-topics \
-mt $HDFS_PATH/test-lda-model

6-将序列文件中的向量转储到文本

> mahout vectordump \
-i $HDFS_PATH/test-lda-topics/part-m-00000 \
-o $LOCAL_PATH/vectordump \
-vs 10 -p true \
-d $HDFS_PATH/sparseVectors/dictionary.file-0 \
-dt sequencefile \
-sort $HDFS_PATH/test-lda-topics/part-m-00000 \
-c csv 
;  cat $LOCAL_PATH/vectordump

1 个答案:

答案 0 :(得分:3)

问题在于步骤4.在步骤3中,我生成TF向量( - weight tf),但在步骤4中,我正在运行rowid作业(将<Text, VectorWritable> tf-vectors的元组转换为cvb期望的<IntWritable, VectorWritable>与tfidf-vectors。

从而改变第4步:

> mahout rowid \
-i $HDFS_PATH/sparseVectors/tfidf-vectors \
-o $HDFS_PATH/matrix

> mahout rowid \
-i $HDFS_PATH/sparseVectors/tf-vectors\
-o $HDFS_PATH/matrix

解决了这个问题。