共现矩阵解题报告.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
共现矩阵解题报告 ASSIGNMENT #2: WORD CO-OCCURRENCE MATRIX 单子非 1. 摘要 共现矩阵问题统计文档中每两个词出现在同一个句子中的次数,统计共现矩阵对语义分析、 数据挖掘都有重要意义。 本报告中,作者使用Hadoop 编程,计算了莎士比亚文献集的共现矩阵。作者采用了Stripe 的方法对数据传输格式进行了优化,将数据传输量减小了一半;并采用In-Map Combing 策略和 定制Combiner 类,大幅减小了数据的规模。Map 的输出value 格式采用了hadoop 的Text 类, 以字符串方式传输并进行解析,方法简便。 最后,作者对得到的共现矩阵数据进行了解析,发现绝大多数词对的共现次数小于等于5, 共现次数最高的单词大多是英语常用高频词;通过对非常用高频词的解析,还发现了一些有趣的 现象,如:这些文献中大量使用古英语人称代词和语体,以及文献的主题多为王室相关。 2. 简介 共现矩阵问题的定义如下:在文档集合中,任意两个单词共同出现在同一句子中的次数构 成一个矩阵,我们要编程求这个矩阵。考虑到问题的大规模数据量和可扩展性,我们用hadoop 编程,使用MapReduce 算法求解。 Hadoop 编程中,用户可定制的部分有Mapper、Reducer、Combiner 和Partition 四部分。我 们这里主要关注Mapper、Reducer 和Combiner 的编写。 最朴素的算法是基于pair 的算法。 3. 算法实现 3.1. PAIR 方法 下面简单介绍朴素的Pair 方法。 Mapper:map 方法处理每个句子,切词之后二重循环遍历句中每个单词a 和b,将 a, b, 1作为Mapper 的输出发送。输出格式中,key 为二元组a, b,value 为整数,代表出现频率。 Reducer:reduce 方法收集到的数据中,key 为a, b,代表统计的两个单词,确定了共现矩 阵中的一个元素;value 为listint,将其元素累加后,可以直接得到两个词的共现次数x 。输出 a, b, x 。 Combiner :可以直接使用Reducer,在同一个Mapper 中对多个map 方法的结果进行合并, 减小数据量。 复杂度分析: Pair 方法中,考虑单词量为n,平均单词数据量为d 的句子,则传输key 的总数据量为: 。 设每个value (均为1)的数据量为e,则传输value 的总数据量为: 。总数据量为 。 Pair 方法的简单优化:考虑矩阵的对称性,可以限定二元组a, b,令a 的hashcode 小于等 ⁄ 于b (即按照字典序a=b ),则可减小一半的数据量,优化为。 。 3.2. STRIPE 方法及实现 Stripe 方法的思想为:如果令pair 方法中的key 只取词对的第一个单词a ,value 格式为listb, x,其中b 为与a 共现的单词,x 为共现次数。则传输复杂度可以得到优化:设句中的单词数目 为n,任意组传输的数据中a, b 中a 的出现次数由n-1 次减为1 次,b 的出现次数仍为n 次,另 外1 的传输次数由1 次变为n-1 次。由于1 的传输复杂度比起单词可以忽略,故整体数据量基本 上减小了一半。 3.2.1. 使用 TEXT 承装输出列表 要完成这样的传输,我们需要定制value 的传输数据格式为pairString, Integer 。然而笔者 采用了另一种简单易行的办法:将value 中的所有String 全部写入一个String ,value 的格式为Text 进行传输。这样虽有一些浪费(传输空格和数字使传输量有所增加),但方便编写。 最初执行这个方法时,我省略了所有的1,只传输以空格分隔的单词。这个方法无需传输单 词出现次数,可以用于Mapper 的输出。 如:hello hadoop bye hadoop 这一句子,传输的第一对数据为: “hello”, “hadoop bye hadoop”

文档评论(0)

荔力 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档