seq2sparse对应于mahout中的org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles,从昨天跑的算法中的任务监控界面可以看到这一步包含了7个Job信息,分别是:(1)DocumentTokenizer(2)WordCount(3)MakePartialVectors(4)MergePartialVectors(5)VectorTfIdf Document Frequency Count(6)MakePartialVectors(7)MergePartialVectors。打印SparseVectorsFromSequenceFiles的参数帮助信息可以看到如下的信息:
- Usage:
- [--minSupport <minSupport> --analyzerName <analyzerName> --chunkSize
- <chunkSize> --output <output> --input <input> --minDF <minDF> --maxDFSigma
- <maxDFSigma> --maxDFPercent <maxDFPercent> --weight <weight> --norm <norm>
- --minLLR <minLLR> --numReducers <numReducers> --maxNGramSize <ngramSize>
- --overwrite --help --sequentialAccessVector --namedVector --logNormalize]
- Options
- --minSupport (-s) minSupport (Optional) Minimum Support. Default
- Value: 2
- --analyzerName (-a) analyzerName The class name of the analyzer
- --chunkSize (-chunk) chunkSize The chunkSize in MegaBytes. 100-10000 MB
- --output (-o) output The directory pathname for output.
- --input (-i) input Path to job input directory.
- --minDF (-md) minDF The minimum document frequency. Default
- is 1
- --maxDFSigma (-xs) maxDFSigma What portion of the tf (tf-idf) vectors
- to be used, expressed in times the
- standard deviation (sigma) of the
- document frequencies of these vectors.
- Can be used to remove really high
- frequency terms. Expressed as a double
- value. Good value to be specified is 3.0.
- In case the value is less then 0 no
- vectors will be filtered out. Default is
- -1.0. Overrides maxDFPercent
- --maxDFPercent (-x) maxDFPercent The max percentage of docs for the DF.
- Can be used to remove really high
- frequency terms. Expressed as an integer
- between 0 and 100. Default is 99. If
- maxDFSigma is also set, it will override
- this value.
- --weight (-wt) weight The kind of weight to use. Currently TF
- or TFIDF
- --norm (-n) norm The norm to use, expressed as either a
- float or "INF" if you want to use the
- Infinite norm. Must be greater or equal
- to 0. The default is not to normalize
- --minLLR (-ml) minLLR (Optional)The minimum Log Likelihood
- Ratio(Float) Default is 1.0
- --numReducers (-nr) numReducers (Optional) Number of reduce tasks.
- Default Value: 1
- --maxNGramSize (-ng) ngramSize (Optional) The maximum size of ngrams to
- create (2 = bigrams, 3 = trigrams, etc)
- Default Value:1
- --overwrite (-ow) If set, overwrite the output directory
- --help (-h) Print out help
- --sequentialAccessVector (-seq) (Optional) Whether output vectors should
- be SequentialAccessVectors. If set true
- else false
- --namedVector (-nv) (Optional) Whether output vectors should
- be NamedVectors. If set true else false
- --logNormalize (-lnorm) (Optional) Whether output vectors should
- be logNormalize. If set true else false
在昨天算法的终端信息中该步骤的调用命令如下:
- ./bin/mahout seq2sparse -i /home/mahout/mahout-work-mahout/20news-seq -o /home/mahout/mahout-work-mahout/20news-vectors -lnorm -nv -wt tfidf
我们只看对应的参数,首先是-lnorm 对应的解释为输出向量是否要使用log函数进行归一化(设置则为true),-nv解释为输出向量被设置为named 向量,这里的named是啥意思?(暂时不清楚),-wt tfidf解释为使用权重的算法,具体参考http://zh.wikipedia.org/wiki/TF-IDF 。
第(1)步在SparseVectorsFromSequenceFiles的253行的:
- DocumentProcessor.tokenizeDocuments(inputDir, analyzerClass, tokenizedPath, conf);
这里进入可以看到使用的Mapper是:SequenceFileTokenizerMapper,没有使用Reducer。Mapper的代码如下:
- protected void map(Text key, Text value, Context context) throws IOException, InterruptedException {
- TokenStream stream = analyzer.reusableTokenStream(key.toString(), new StringReader(value.toString()));
- CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class);
- StringTuple document = new StringTuple();
- stream.reset();
- while (stream.incrementToken()) {
- if (termAtt.length() > 0) {
- document.add(new String(termAtt.buffer(), 0, termAtt.length()));
- }
- }
- context.write(key, document);
- }
该Mapper的setup函数主要设置Analyzer的,关于Analyzer的api参考:http://lucene.apache.org/core/3_0_3/api/core/org/apache/lucene/analysis/Analyzer.html ,其中在map中用到的函数为reusableTokenStream(String fieldName, Reader reader) :Creates a TokenStream that is allowed to be re-used from the previous time that the same thread called this method.
编写下面的测试程序:
- package mahout.fansy.test.bayes;
- import java.io.IOException;
- import java.io.StringReader;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.io.Text;
- import org.apache.lucene.analysis.Analyzer;
- import org.apache.lucene.analysis.TokenStream;
- import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
- import org.apache.mahout.common.ClassUtils;
- import org.apache.mahout.common.StringTuple;
- import org.apache.mahout.vectorizer.DefaultAnalyzer;
- import org.apache.mahout.vectorizer.DocumentProcessor;
- public class TestSequenceFileTokenizerMapper {
- /**
- * @param args
- */
- private static Analyzer analyzer = ClassUtils.instantiateAs("org.apache.mahout.vectorizer.DefaultAnalyzer",
- Analyzer.class);
- public static void main(String[] args) throws IOException {
- testMap();
- }
- public static void testMap() throws IOException{
- Text key=new Text("4096");
- Text value=new Text("today is also late.what about tomorrow?");
- TokenStream stream = analyzer.reusableTokenStream(key.toString(), new StringReader(value.toString()));
- CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class);
- StringTuple document = new StringTuple();
- stream.reset();
- while (stream.incrementToken()) {
- if (termAtt.length() > 0) {
- document.add(new String(termAtt.buffer(), 0, termAtt.length()));
- }
- }
- System.out.println("key:"+key.toString()+",document"+document);
- }
- }
得出的结果如下:
- key:4096,document[today, also, late.what, about, tomorrow]
其中,TokenStream有一个stopwords属性,值为:[but, be, with, such, then, for, no, will, not, are, and, their, if, this, on, into, a, or, there, in, that, they, was, is, it, an, the, as, at, these, by, to, of],所以当遇到这些单词的时候就不进行计算了。
http://blog.csdn.net/fansy1990/article/details/10478515
相关推荐
"Twenty Newsgroups" 数据集是一个广泛用于文本分类和自然语言处理任务的经典数据集,它由约20000篇电子新闻文章组成,这些文章分别来自20个不同的新闻组。这个数据集最初是在1998年由卡内基梅隆大学的Andrew Moore...
找到D:\software-1\anaconda\Lib\site-packages\sklearn\datasets\_twenty_newsgroups.py下的_twenty_newsgroups.py文件,找到函数_download_20newsgroups,注释#logger.info("Downloading dataset from %s (14 MB)...
标题 "PJBlog2 Twenty风格" 暗示我们正在讨论的是一个针对PJBlog2平台的特定主题或模板,名为"Twenty"。PJBlog2是一款基于ASP.NET开发的个人博客系统,它允许用户轻松创建和管理自己的博客网站。这个风格可能为用户...
Twenty Lectures on Algorithmic Game Theory By Tim Roughgarden 2016 | 250 Pages | ISBN: 131662479X , 1107172667 | EPUB | 2 MB Computer science and economics have engaged in a lively interaction over ...
1. `subset`: 可以选择加载全部数据(`'all'`),或者特定子集,如训练集(`'train'`)、测试集(`'test'`)或验证集(`'unsupervised'`)。 2. `shuffle`: 如果为`True`,则在加载数据前先随机打乱数据顺序。 3. `remove`: ...
标题 "twenty-twenty-one-child-theme" 指的是一个基于 WordPress 的子主题,它构建于官方的 Twenty Twenty-One 主题之上。Twenty Twenty-One 是 WordPress 在2021年推出的默认主题,以其简洁的设计和对无障碍功能的...
1. **Java编程基础**:Java是一种跨平台、面向对象的编程语言,它的“一次编写,到处运行”特性使得21点游戏的程序可以在任何安装了Java虚拟机(JVM)的系统上运行。项目中会涉及到类定义、对象实例化、方法声明以及...
tensorflow seq2seq聊天机器人注意:不维护存储库。 如果您想承担维护费用,请随时与我联系。 基于在tensorflow中实现的热方法构建通用对话聊天。 由于到目前为止效果不佳,因此请考虑其他实现。 当前结果非常糟糕:...
《张飞硬件视频1到二十三部》是针对嵌入式硬件开发的全面教程,旨在帮助初学者快速掌握硬件开发的基础知识和技能。这23部视频由知名的硬件专家张飞主讲,以其深入浅出的讲解风格和实战导向的教学方法,使复杂的硬件...
1. 小说的特征:在学习《After Twenty Years》这篇课文时,学生需要理解小说作为一种文学形式的基本元素,包括情节、人物、背景、冲突和发展等。小说通常通过叙述故事来展现人物的性格、情感变化以及他们面对的挑战...
《高效学习-制定知识的二十条规则》是由Piotr Wozniak博士撰写的一篇文章,发表于1999年2月。它旨在帮助读者解决在试图加速学习过程中可能遇到的最大难题之一:知识的制定。文章明确指出,知识制定的方式会直接影响...
标题中的"beautiful-twenty.rar"可能是指一个名为“美丽20”的项目或资源包,而“.rar”是常见的压缩文件格式,用于集合多个文件在一个单一的可下载包中。这个压缩包似乎包含了与3D建模和游戏开发相关的素材。 在...
twenty20
20news数据集。... The 20 newsgroups collection has become a popular data set for experiments in text applications of machine learning techniques, such as text classification and text clustering.
game twenty four.exe
Twenty-First Century Intelligence
Trade Gothic-Bold Cond Twenty
1. **响应式设计**:Twenty模板采用了响应式布局,确保在不同设备(如桌面、平板、手机)上都能提供良好的视觉效果。它通过媒体查询(Media Queries)来调整内容的展示方式,以适应不同屏幕尺寸。 2. **语义化标签*...
在功能方面,Twenty模板可能包含了一些互动组件,例如滑动显示、轮播图、下拉菜单等,这些都是通过JavaScript和CSS3实现的。JavaScript在HTML5环境中扮演着增强用户体验的角色,它可以实现动态更新内容、表单验证、...
复数是由实部和虚部组成的数,可以用形式 \( a + bi \) 来表示,其中 \( a \) 和 \( b \) 是实数,\( i \) 是虚数单位,满足 \( i^2 = -1 \)。复分析主要研究复平面上的函数,包括它们的导数、积分、级数、解析延拓...