文章分类 - Mahout
摘要:接下来是最重要的通过df-count与tf-vectors来生成tfidf-vectors的过程了。这一过程通过makePartialVectors()与mergePartialVectors()来实现。通过循环调用makePartialVectors生成tfidf vector的每个部分,这个过程可以将上一步分块的frequency.file-n加载到内存中通过MapReduce来完成,再通过mergePartialVectors运行MapReduce任务来高效合并得出最终的tfidf-vectors。 makePartialVectors()运行MapReduce Job将tfidf...
阅读全文
摘要:下面来看一下df-count目录与freqency.file-n文件的生成过程。df-count目录中记录的是词汇的文档频率,并用了一个技巧统计了文档的数目,就是在对tf-vectors目录中每个文档tf向量进行处理的时候对每个文档插入了<-1, 1>这样一个键值对,这样可以再reduce时得出词汇的文档频率同时得出文档数目。freqency.file-n中把df-count中的内容分块,保证每一个向量在计算都可以在内存中进行。 先从startDFCounting()函数开始,它运行了一个MapReduce Job,会生成df-count: job.setMapperClass(T
阅读全文
摘要:这个类通过DictionaryVectorizer类生成的tf-vectors作为输入,利用多个MapReduce Job来统计出文档数目与每一个词的文档支持度df(只要在文档中出现不管多少次都算做一次)然后计算出词频——逆文档频率并以SequenceFile存储于tfidf-vectors目录下。 这些步骤通过calculateDF()(得到每个词的文档频率)、processTfIdf()两个函数的调用来完成。 在calcalculateDF()函数中,先通过startDFCounting()函数来运行一个MapReduceJob来得到每个词的文档频率与总的文档数以<int wor..
阅读全文
摘要:下面最后一步操作就是把文档集向量的不同部分做合并操作就可以了,可以想象出直接用向量的加法运算就可以完成这个功能。此功能对应mergePartialVectors()函数,它会执行一个MapReduce操作完成合并。 job.setMapperClass(Mapper.class); job.setInputFormatClass(SequenceFileInputFormat.class); job.setReducerClass(PartialVectorMergeReducer.class); job.setOutputFormatClass(SequenceF...
阅读全文
摘要:有了词典后就可以对分词后的文档做向量化操作了,它的实现很独特,通过一个循环分别对每个词典的trunk做统计。其核心函数为makePartialVectors(),通过这个函数来运行一个MapReduce job . job.setMapperClass(Mapper.class); job.setInputFormatClass(SequenceFileInputFormat.class); job.setReducerClass(TFPartialVectorReducer.class); job.setOutputFormatClass(SequenceFile...
阅读全文
摘要:下面来看一下createDictionaryChunks()方法,它就是要生成一个词汇到词汇id的词典,并统计出文档生成向量的维数。这个方法中会把大数据分块进行处理,每块均在内存中运行,结束后再写入磁盘,这样可以提高处理的效率。 private static List<Path> createDictionaryChunks(Path wordCountPath, Path dictionaryPathBase, ...
阅读全文
摘要:将文本集分词处理后就要将分个文本用向量来表示了,在对文本聚类与分类中VSM是很常用的。而向量化的过程就是找出表示文档集的维数与每一维上的权重。Mahout中提供了用tf-idf进行权重计算的实现过程,这个过程主要分了两步,先计算tf再计算tfidf。 DictionaryVectorizer会将DocumentProcessor分词处理后的文档集做为输入,处理后将文档集用tf向量化,此过程中生成了一个词典,里面会记录词组到Integer型id的映射。先来看下createTermFrequencyVectors函数的核心源码吧! //生成"wordcount"文件目录用于记录
阅读全文
摘要:做为文本聚类实现的第一步对语料分词是必须的,而DocumentProcessor类提供了一个基于MapReduce对大量数据集分词的高效灵活的实现。高效是其基于MapReduce分布式计算框架,灵活是其提供了可扩展的分词接口可以对多种语言分词的支持。 下面就要深入一下类内部的流程进行学习:DocumentProcessor类,它只提供了一个静态方法tokenizedDocuments();tokenizedDocuments(Path, Class<? extends Analyzer>, Path, Configuration); 参数中设置了输入文件的路径,也就是前一步生成的文
阅读全文
摘要:最近的项目中要一个分布式计算环境下的中文聚类功能模块,由于分布式平台是用的开源Hadoop,所以就对其衍生出的数据挖掘框架Mahout做了一下聚类实现的调研。 下面就开始这个历程吧。。。在这里说明一下,Hadoop用版本号的是0.20.203,Mahout用verion的是0.5。在这里要强调下版本号是因为最新版的Hadoop中MapReduce与老版本的Mahout有可能出现不兼容的问题,在这里要统一一下,Hadoop选取的是稳定的版本。 将Hadoop与Mahout源码下载完成后还要下载Maven,因为我们要对Mahout进行编译,Maven会对编译好的jar包进行管理,方便我们以...
阅读全文

浙公网安备 33010602011771号