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的输出:
Word@Doc 1。也就是 单词@文档名称 作为Key,Value为 1,表示 单词Word在Doc中出现了一次。
MapReduce的会根据Key排序并组合相应的Value,因此JOB1的Reduce输入为:Key:Word@Doc 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:Word@Doc Value:TF IDF TF*IDF。
至此,TF-IDF的计算完毕。对上述过程的优化,后续探讨。
MapReduce ---- TD-IDF的更多相关文章
- 【Elasticsearch学习】文档搜索全过程
在ES执行分布式搜索时,分布式搜索操作需要分散到所有相关分片,若一个索引有3个主分片,每个主分片有一个副本分片,那么搜索请求会在这6个分片中随机选择3个分片,这3个分片有可能是主分片也可能是副本分片, ...
- SQL Server优化技巧之SQL Server中的"MapReduce"
日常的OLTP环境中,有时会涉及到一些统计方面的SQL语句,这些语句可能消耗巨大,进而影响整体运行环境,这里我为大家介绍如何利用SQL Server中的”类MapReduce”方式,在特定的统计情形中 ...
- 运用mapreduce计算tf-idf
问题描写叙述:给定一个大文件,文件里的内容每一行为:文档名,文档内容. input 文档名1,word1 Word2 ....... 文档名2,word1 Word2 ....... output w ...
- Hadoop MapReduce开发最佳实践(上篇)
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- 【Hadoop学习之十二】MapReduce案例分析四-TF-IDF
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 概念TF-IDF(term fre ...
- 云计算大会有感—MapReduce和UDF
(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.參会有感 首先还是非常感谢CSDN能给我票,让我有机会參加这次中国云计算峰会.感觉不写点什么对不 ...
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- mapreduce中一个map多个输入路径
package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...
随机推荐
- C++ extern "C",C与C++的区别
1. C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同. 2 ...
- Facebook发布C++ HTTP框架Proxygen
Facebook 宣布发布C++ HTTP 框架 Proxygen,其中包括了一个 HTTP server.Proxygen 是 oxygen 的谐音,支持 SPDY/3 和 SPDY/3.1,未来还 ...
- 项目中关于AJAX的使用总结
一.使用情况:AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下使用.AJAX的核心:向服务器发送多个请求而无需用户等待来至服务器的响应. 二.AJAX的优势 1. ...
- windows下mysql数据库表名大小写不敏感
最近新入职,领导让做个小功能先练练手.是一个添加分类的功能,有添加和列表,很简单.功能做完后提交,结果在线上出现一个大大的500. 但是我再本地环境下是正常的,我以为可能是php的版本不一致导致的问题 ...
- html5 OPOA
1.0 one page one application 一个应用只有一个页面,对用户的表现来说的. 2.0 起源于web的MIS系统 MIS(管理信息系统) 3.0 银行客户端 4. ...
- 根据群ID和用户Id查询 + string QueryQunByUserIdAndQunId(int userId, int qunId) V1.0
#region 根据群ID和用户Id查询 + string QueryQunByUserIdAndQunId(int userId, int qunId) V1.0 /// <summary ...
- Oracle EBS-SQL (PO-4):检查采购订单明细.sql
SELECT PHA.SEGMENT1 订单号, pha.approved_flag 批准状态, pha.closed_code 订 ...
- eclipse中调出android sdk manager和android virtual device manager图标
有时候在安装ADT插件后,eclipse菜单栏上不会显示android sdk manager和android virtual device manager两个图标, 这个时候,如果安装ADT插件的步 ...
- USB OTG学习
1. 概要 OTG设备使用插头中的ID引脚来区分A/B Device,ID接地被称作为A-Device,为连接时候的USB Host,A-Device始终为总线提供电力,ID悬空被称作为B-Devic ...
- Qt入门学习——Qt 5 帮助文档的使用
Qt入门学习——Qt 5 帮助文档的使用 学习图形界面开发,肯定离不开帮助文档的使用,因为它不像 C 语言那样就那么几个函数接口,图形接口的接口可以用海量来形容,常用的我们可能能记住,其它的真的没有必 ...