MapReduce ---- TD-IDF

1、TF-IDF

  TF-IDF(term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明。描述单个term与特定document的相关性。

  TF(Term Frequency): 表示一个term与某个document的相关性。公式为: term在document中出现的次数/document中所有term出现的总次数.

  IDF(Inverse Document Frequency):表示一个term表示document的主题的权重大小。

  主要是通过包含了该term的docuement的数量和docuement set的总数量来比较的。出现的次数越多,权重越小。公式是log(D/Dt)   D是文档集合大小

Dw是包含了该Word的文档的总数。根据关键字k1,k2,k3进行搜索结果的相关性就变成TF1*IDF1 + TF2*IDF2 + TF3*IDF3。比如document1的term总量

为1000,k1,k2,k3在document1出现的次数是100,200,50。包含了 k1, k2, k3的docuement总量分别是1000, 10000,5000。document set的总

量为10000。

  TF1 = 100/1000 = 0.1;                           TF2 = 200/1000 = 0.2;                           TF3 = 50/1000 = 0.05;

  IDF1 = log(10000/1000) = log(10) = 2.3; IDF2 = log(10000/100000) = log(1) = 0;  IDF3 = log(10000/5000) = log(2) = 0.69;

  这样关键字k1,k2,k3与docuement1的相关性= 0.1*2.3 + 0.2*0 + 0.05*0.69 = 0.2645;其中k1比k3的比重在document1要大,k2的比重是0.

  TF/IDF 的概念就是一个特定条件下、关键词的概率分布的交叉熵(Kullback-Leibler Divergence)。

  TF和IDF的其他解释可参阅《数学之美》(吴军著),这本书超赞。

2、MapReduce 计算

  不讨论实现的细节,只考虑如何构造其中的Key和value。

  为了计算TF-IDF ,需要分别计算TF和IDF,TF为单词在文档中的频率,因此首先需要知道单词 word在文档Doc中出现的频度,其次需要知道当前Doc中单词的个数。

第一个JOB计算word在Doc中的频度。

  MAP的输入:Key:行号 Value为对应文档的一行。在map函数中将每一行切分为一个个的单词,当然这么做其实是不完全正确的,比如对于词组 set

out,其原本的意思是出发,但是将其按单词进行划分后变为 set 和out,这不是我们原本的意愿。在此,为了简单起见我们忽略这些细节。MAP的输出:

[email protected]   1。也就是 单词@文档名称 作为Key,Value为 1,表示 单词Word在Doc中出现了一次。

  MapReduce的会根据Key排序并组合相应的Value,因此JOB1的Reduce输入为:Key:[email protected]  Value:1,1,1,1... 因此可以统计出单词Word在

Doc中一共 出现了多少次。将Reduce的输出设为:Key:Doc  Value:Word->N。表示文档Doc中单词Word出现了N次。经过MapReduce的shuffle过程

后,Reduce的输出变为:Key:Doc  Value:Word1->N1  Word2->N2,... ... ,Wordk->Nk。JOB1的Reduce输出可以作为JOB2-Map的输入。

  到此,第一个JOB就统计了单词在不同文档的频度,Reduce的输出为第二个JOB的输入。

  第二个JOB计算一个文档所有单词的个数和某一单词在文档中的频率TF。

  MAP的输入:Key:Doc  Value:Word1->N1,Word2->N2,... ...  。因此Map函数中可以计算一个文档中单词的总数Total,文档中每个单词的

个数是已知的,因此可以计算单词Word针对文档Doc的TF。将当前MAP的输出设为:Key:Word,Value:Doc  N/Total ,也就是单词作为Key,所在文档

Doc和对应的TF作为Value。经过shuffle后,JOB2-Reduce的输入:Key:Word,Value:Doc1 N1/Total  Doc2 N2/Total ... ... ,此时知道单词Word

在Doc1,Doc2... 等文档中出现,通过MapReduce获取文档总数,就可以计算Word针对每个文档Doc的IDF值,此时Reduce的输出变为:Key:[email protected] Value:TF IDF TF*IDF。

  至此,TF-IDF的计算完毕。对上述过程的优化,后续探讨。

  

  

时间: 2024-07-30 19:56:10

MapReduce ---- TD-IDF的相关文章

MapReduce实现TF-IDF详解

TF-IDF算法简介 TF-IDF概念 TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度.字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降.TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级.除了TF-IDF以外,因特网上的搜寻引擎

云计算大会有感—MapReduce和UDF

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.参会有感 首先还是非常感谢CSDN能给我票,让我有机会参加这次中国云计算峰会.感觉不写点什么对不起CSDN送我的门票(看到网上卖一千多一张呢). 还是得从国家会议中心说起,两年前lz曾经在那当过IDF的志愿者,当时是纯体力劳动,负责给参会人员发一些杂志什么的,当时苦逼的为了多蹭一个盒饭躲到柜子后面直到开饭.真没想到两年后可以以来宾的身份参加国家会议中心的大会(虽然午餐还是苦逼的盒饭吧),这次真的可以走进主

Hadoop MapReduce开发最佳实践(上篇)

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

MapReduce 应用:TF-IDF 分布式实现

概述 本文要说的 TF-IDF 分布式实现,运用了很多之前 MapReduce 的核心知识点.算是 MapReduce 的一个小应用吧. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 本文作者:Q-WHai 发表日期: 2016年6月24日 本文链接:http://blog.csdn.net/lemon_tree12138/article/details/51747801 来源:CSDN 更多内容:分类 >> 大数据之 Hadoop 学前导读 本文并不打算再

运用mapreduce计算tf-idf

问题描述:给定一个大文件,文件中的内容每一行为:文档名,文档内容. input 文档名1,word1 Word2 ....... 文档名2,word1 Word2 ....... output word  文档名  tfidf值 package com.elex.mapreduce; import java.io.IOException; import java.net.URI; import java.util.HashMap; import java.util.Iterator; impor

CSS,bootstrap表格控制当td内容过长时用省略号表示,以及在不使用bootstrap时过长也用省略号表示

首先需要在table中设置table-layout:fixed; <table style="table-layout:fixed"></table> 然后在表头th中设置每列的宽度 <table style="table-layout:fixed"> <th width="10%">Title01</th> <th width="20%">Title02

MapReduce实现手机上网流量分析

一.问题背景 现在的移动刚一通话就可以在网站上看自己的通话记录,以前是本月只能看上一个月.不过流量仍然是只能看上一月的. 目的就是找到用户在一段时间内的上网流量. 本文并没有对时间分组. 二.数据集分析 可以看出实际数据集并不是每个字段都有值,但是还好,完整地以tab隔开了,数据格式还是不错的,我们需要的上行下行数据都有,没有缺失值.其实这个需要在程序中处理,如果不在的话 该怎么办. 1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196

mapreduce和spark的原理及区别

Mapreduce和spark是数据处理层两大核心,了解和学习大数据必须要重点掌握的环节,根据自己的经验和大家做一下知识的分享. 首先了解一下Mapreduce,它最本质的两个过程就是Map和Reduce,Map的应用在于我们需要数据一对一的元素的映射转换,比如说进行截取,进行过滤,或者任何的转换操作,这些一对一的元素转换就称作是Map:Reduce主要就是元素的聚合,就是多个元素对一个元素的聚合,比如求Sum等,这就是Reduce. Mapreduce是Hadoop1.0的核心,Spark出现

基于 Eclipse 的 MapReduce 开发环境搭建

文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6055850.html 上周末本来要写这篇的,结果没想到上周末自己环境都没有搭起来,运行起来有问题的呢,拖到周一才将问题解决掉.刚好这周也将之前看的内容复习了下,边复习边码代码理解,印象倒是很深刻,对看过的东西理解也更深入了. 目录 1.概述 2.环境准备 3.插件配置 4.配置文件系统连接 5.测试连接 6.代码编写与执行 7.问题梳理 7.1 console 无日志输出问题 7.2