不久前(6.29),参加了ChinaHadoop的夏季沙龙,听了人人的大牛讲了基于Map-Reduce的相似度计算的优化,感觉对Map-Reduce编程模型的理解又进一步加深了,在这里把该算法总结成博文,以期能够更加透彻的理解该算法。
相似度的计算在文本的分类、聚类、推荐系统、反Spam中应用广泛。本文以文本的相似度计算为例,讲述如何基于MR计算相似度。文本相似度的计算一般先使用VSM(向量空间模型)将文本表示成向量,向量的每个分量都代表某个词语在文档中的权重,权重的计算可以用词频或者TF-IDF等算法得到。
本文中,我们使用向量的内积来表示文本的相似度:
从而,我们知道,对文本相似度计算有贡献的是在两个文本中同时出现过的词语。
而一个数据集的文本相似度计算问题是计算该数据集中每个文本对的相似度。同许多问题一样,在文本数目比较小的时候,内存可以完全载入这些向量,可以很快的计算;但是当文本数目变大到一定程度,程序就会运行的很慢,一是因为内存不能装载下,不停的内存换入换出十分耗时,二是因为该问题的时间复杂度是O(N3),N变大会导致程序的时间成立方级增长。
那么如何使用Map-Reduce框架解决这个问题呢?
图 1 文本-词语矩阵或者用户-特征矩阵
其中,U代表文本,F代表词语。如果直接以U为键进行Map-Reduce,那么会遇到一个问题,因为要计算数据集中所有的二元文本对的相似度,所以不得不将所有的数据发往每一个节点,或者只有一个Reduce任务工作,以计算每个二元文本对的相似度。
所以,为了解决这个问题,我们将矩阵转置,以F为键。这样,解决该问题就由两个Map-Reduce过程完成。第一个MR过程称为倒排索引,对每个文档,对其中的每个词语,以词语为键,文档标号与词语在该文档中的权重为值输出,这样,我们就得到如(F4,[(U1,0.1),(U2,0.9),(U7,0.5)])格式的输出。第二个MR过程计算文本相似度,以上一个MR过程的输出为输入,在Map过程中以文本对为键,以权重值的乘积为输出,比如上面的F4输出,map后变为[((U1,U2),0.09),((U1,U7),0.05),((U2,U7),0.45)],这样,就得到了在所有的在两个文本中共同出现的词语针对该两个文本的权重乘积;然后在reduce过程中将相同键的值相加,就得到了所有的二元文本对的文本相似度。完整的Map-Reduce样例如图2[2]所示:
图 2 矩阵转置后的Map-Reduce过程
经过这种设计之后,我们就可以使用Map-Reduce过程处理文本相似度问题了。
我们还可以通过Stripe算法[3]来优化IO,Stripe算法的详细可以参考引申链接3,它与上图方法的不同之处的根本在于输出的表示形式,文本相似度问题的输出是一个对称矩阵,而上图中的输出的表示方法是以二元对为键,以相似度为值,在Stripe算法中,输出的表示则是以单个文档为键,以一个关联数组为值,关联数组中的键为文档,值为关联数组中的键与输出键对应的两个文档的相似度,上图的输出使用Stripe算法的输出表示为(d1,[(d2,1),(d3,4)]) ,(d2,[(d3,2)]),当然,根据输出的形式,上图中的Pairwise Similarity部分的map与shuffle的输出都做出相应变化,据说,该算法可以节省1/3的空间。
还能做的优化就是负载均衡方面的考虑了。利用贪婪算法切分负载,对于任务队列中的每一个任务,将其放到负载最小的机器上面去。这种方法对数据实时切分,作为Map的输入。
还有一种优化是热点消除,使用Mirror Mark算法对比较大的任务进行切分,MirrorMark算法的基本思想是将所有的数据复制成多份到多台机器上,每台机器上只对一部分数据进行计算,Mirror是指数据存储多份,Mark是指数据分配到机器前对要在该机器上计算的数据做标记,在机器上只计算标记的数据;Mirror Mark算法能够使运行时间最长的任务运行时间变短,从而降低整个Map-Reduce的时间。
实际上,对于文本-词语矩阵或者用户-特征矩阵,计算相似度的问题其实可以看做是矩阵乘以矩阵的转置的问题。图2所示的MR过程实际上对矩阵的乘法做了两个方面的优化,一是按照用户对或者文本对进行分布式划分,二是利用了矩阵的稀疏性,不计算特征值为0的部分。
相关推荐
文中列出了一系列的关键词,如:向量空间、Map-Reduce、约束连接、路径查询、执行效率、错误率、Top-k、相似度连接等。这些关键词揭示了论文的研究内容和方向,涵盖大数据处理、查询优化和数据挖掘等多个领域。 ###...
2. Map类:执行用户-物品相似度计算或物品-物品相似度计算。 3. Reduce类:汇总Map阶段的结果,生成预测评分。 4. 主程序类:设置Hadoop作业参数并提交作业。 为了保证代码的可读性和易理解,源代码应包含清晰的...
3. **相似度计算**:推荐算法的核心是计算用户之间的相似度。这里可以采用Jaccard相似度或Adamic/Adar指数等方法。Jaccard相似度比较两个用户的朋友集合交集与并集的比例,而Adamic/Adar指数考虑了共同朋友的度(即...
4. **协同过滤**(Collaborative Filtering):在推荐系统中,Map阶段计算用户-物品的相似度,Reduce阶段生成推荐列表。 5. **神经网络**:在分布式环境中,MapReduce 可以用于训练大型神经网络,如 Map阶段进行前...
文中提出的改进方法将改进的综合语义相似度计算与MapReduce函数结合,利用MapReduce的并行处理能力,实现知识匹配过程的高效运行。改进方法能够提高知识匹配的准确性和时效性,这一点通过实验仿真结果得到了验证。...
它将复杂的并行计算任务分解为两个主要阶段:Map(映射)和Reduce(化简)。在这个综合案例中,我们将探讨四个具体的应用场景,分别是社交网络综合评分案例、微博精准营销案例、物品推荐案例以及QQ好友推荐案例。 1...
本系统基于物品的协同过滤推荐算法构建个性化推荐系统,分析用户的行为信息构造评分机制来计算出推荐物品的显式分数,然后构建物品显式分数与用户的多维矩阵,利用余弦相似度基于Map-reduce技术计算物品之间的相似度...
在基于MapReduce的云数据挖掘模型中,K-means算法可以被转化为Map和Reduce函数来实现分布式计算。K-means算法的核心思想是通过迭代计算,将数据点划分为K个簇,使得簇内的数据点相似度高,而簇间的数据点相似度低。...
这种方法对于搜索引擎的排名、文本相似度计算以及信息检索等应用非常有用。在实际项目中,可能会使用Hadoop或者其他支持MapReduce的框架来实现这个过程。 总结来说,基于MapReduce的TF-IDF计算是一个将分布式计算与...
Reduce阶段进行相似度计算和推荐生成。这种分布式计算模式显著提高了处理大规模数据的速度。 五、GRMS系统 GRMS(Generic Recommendation Management System)可能是这个项目的代码库名称,它可能包含实现上述功能...
3. **相似度计算**:使用协同过滤或基于内容的推荐算法,MapReduce可以并行计算用户之间的相似度,比如基于共同好友、共同兴趣等。 4. **推荐生成**:最后,根据用户间的相似度,MapReduce可以生成个性化的推荐列表...
在处理大量数据时,相似项的发现是一个非常重要的任务,例如文档的相似度计算、协同过滤等。本部分介绍了近邻搜索的应用,文档的Shingling技术,以及通过哈希函数来保持相似度的集合摘要表示。局部敏感哈希(LSH)...
WordCount Map-Reduce算法例子 Retrive 文件下载 IP 获得IP地址示例 ip QQ纯真数据库示例 HtmlParser 网页内容提取库HtmlParser的源码项目 nekohtml-1.9.7 nekohtml的源码项目 RhinoTest 测试js解析 ExtractContext ...
该文献中提到的改进措施包括在基于内容的推荐中引入了机器学习方法——支持向量机(SVM),以及在协同过滤推荐中引入区分度来改善相似度计算。SVM是一种常用的分类方法,能够通过寻找最优的分类超平面来提高模型的...
基于物品相似度的协同过滤推荐的思想大致可分为两部分: 1.计算物与物之前的相似度 2.根据用户的行为历史,给出和历史列表中的物品相似度最高的推荐 通俗的来讲就是: 对于物品 A,根据所有用户的历史偏好,喜欢...
Map阶段将任务分解,Reduce阶段对结果进行聚合。然而,MapReduce在处理图数据时,网络通信成本高,因为它需要频繁地传输数据。 3. **分布式图数据处理平台**:如Apache Giraph和Hama等,这些平台专门设计用于在...
每对物品的相似度计算可以看作一个键值对,键是物品对,值是相似度分数。 3. **分发和并行计算**:由于MapReduce的并行特性,这个计算过程可以在多台机器上同时进行,大大提高了效率。Map任务将处理一部分数据,...
在MapReduce框架下,Map任务负责处理用户-商品交互数据,生成用户相似度对,Reduce任务则负责计算每个用户的推荐商品列表。 首先,Map阶段,输入的数据通常是用户购买、浏览、评价等行为记录,每条记录包含用户ID和...
- MapReduce程序:包含Map和Reduce的具体实现,以及相似度计算逻辑。 - 运行脚本:用于提交Hadoop作业,执行推荐系统计算。 - 结果解析:将MapReduce输出的结果进行解析,生成最终的推荐列表。 总的来说,通过...