大规模文档相似度计算—基于MapReduce框架
来源:互联网 发布:手机淘宝如何给差评 编辑:程序博客网 时间:2024/06/05 19:33
现有Doc-word矩阵,采用余弦计算两两文档之间的相似度。在实际问题中,矩阵通常是很稀疏的,为了减少计算量,通常采用倒排索引的数据结构[1], 将包含相同word的doc映射到同一个节点上, 这样只需计算相似度不为0的文档之间的相似度, 从而减少计算量,具体过程如图1所示。
图1. 建立倒排索引计算文档相似度(来源于参考文献[1])
上述方法虽然避免了计算相似度为0的文档之间的相似度,但是当有些word对应的文档数很大时,就会出现严重的数据倾斜问题。如果如图2所示中word “B” 对应文档数有8个, 在该节点下需计算8*(8-1)/2=28个文档对之间的相似度。
图2 建立倒排索引
当某个word对应的文档个数很多时,一种解决思路是采用矩阵分块的思想,将其打散到多个节点,分别进行处理[2]。令M表示一个节点上最多可以处理的文档对个数,blocksize表示一个块中有多少个文档,blocknum表示分多少块,docnumi表示wordi对应的文档个数,则有:
令doc_vec表示包含word的文档-权重向量,di表示向量第i个元素。Bi表示di划分到块的序号, 计算公式为:
然后依次遍历分块,对每个di重新构造blocknum个(newkey,newvalue)对,其中
具体过程参见图2. 这样每个节点保证不会超过M个文档对需要处理,提升了运算效率。然后在reduce阶段对相同文档对之间的相似度相加,最终得到相似度不为0的两两文档之间的相似度。
图3 分块索引
图4 reduce阶段计算文档之间的相似度
参考文献
1. Tamer Elsayed, Jimmy Lin, Douglas W. Oard. Pairwise Document Similarityin Large Collections with MapReduce. Proceedings of ACL-08:HLT, pp265-268.
2. http://blog.csdn.net/lilyth_lilyth/article/details/9269693
- 大规模文档相似度计算—基于MapReduce框架
- 大规模文档相似度计算—基于MapReduce框架
- spark或者mapreduce文档相似度计算
- WMD:基于词向量的文档相似度计算
- lsi计算文档相似度
- doc2vec计算文档相似度
- 计算文档的相似度
- 自然语言处理(2)——文档相似度计算
- 基于word2vec与Word Mover Distance的文档相似度计算
- 计算两个文档的相似度
- 使用gensim计算文档的相似度
- gensim similarity计算文档相似度
- NLP计算文档相似度之doc2vec
- NLP计算文档相似度之LSH
- 如何计算两个文档的相似度
- SparkMLlib---基于余弦相似度的用户相似计算
- SparkMLlib---基于余弦相似度的用户相似计算
- 基于Map-Reduce的相似度计算
- mybatis 中 #{} 和 ${} 的不同之处
- 基2FFT时间抽取和频域抽取算法比较
- 【itercast OSI 七层网络模型 学习笔记】Layer 1 物理层
- Tomcat设计模式-责任链模式(二)pipeline valve
- xe4 编译 独立运行
- 大规模文档相似度计算—基于MapReduce框架
- Oracle 组件 系列 小结
- 像发私信一样做营销 看老外是怎么做邮件营销
- 根据数据控制权限
- android上传文件php服务器接收代码
- ubuntu下NFS服务的安装与配置
- ios 内存使用陷阱 和imageNamed 、imageWithContentsOfFile:
- centos6.4如何安装中文输入法?
- 完整性约束条件