Mapreduce 矩阵相乘应用--计算文本间的相似度
2017-06-01 23:00
609 查看
最近在处理文本之间相似度的时候,遇到这样的问题:现在每天要计算800w文本两两之间的相似度。
给出的输入数据样例是这样的:
第一个字段为文本的ID,其余字段为 词|权重 ……。 原本作矩阵我采取的通用做法为缓存小表。然后将大表作为输入,然后进行计算。 现在数据规模变大了,当然要采取另外的一种方式进行处理。
计算模型:
其次,在使用上述方法的时候,需要对新闻和词建立统一的索引。比如 “科技”这个词的索引为0, “文化”这个词的索引为1,换句话说,就是将矩阵的横纵坐标对应到每个词和新闻当中。
最后计算相似度的时候,输入数据要存成两份,一份作矩阵A,一份作为矩阵A的转置,然后进行相乘。
ps:这里说明一下,在使用mapreduce 中的MultipleInputs的时候,我设置了两个Map,一个处理A矩阵,一个处理A矩阵的转置,发现不可以。因为MultipleInputs这个类只能针对不同的路径采取不同的Map和InputFormat。所以如果路径相同了。那么后面的会覆盖掉前面的。
给出的输入数据样例是这样的:
第一个字段为文本的ID,其余字段为 词|权重 ……。 原本作矩阵我采取的通用做法为缓存小表。然后将大表作为输入,然后进行计算。 现在数据规模变大了,当然要采取另外的一种方式进行处理。
数据存储
从要求中可以分析出,这个矩阵是一个稀疏矩阵,因为毕竟每个文本只能包含少部分词语。 因此采用稀疏矩阵的方式进行存储。只存储那些非零的数值。具体而言,存储矩阵的文件每一条记录的结构如上图所示,(文本ID 词 权重)计算模型:
在本需求中的应用
通过以上的方法可以看到,这种方法是用大量的硬盘空间来换取内存空间。因为每个词的权重 要重发发送很多变。其次,在使用上述方法的时候,需要对新闻和词建立统一的索引。比如 “科技”这个词的索引为0, “文化”这个词的索引为1,换句话说,就是将矩阵的横纵坐标对应到每个词和新闻当中。
最后计算相似度的时候,输入数据要存成两份,一份作矩阵A,一份作为矩阵A的转置,然后进行相乘。
ps:这里说明一下,在使用mapreduce 中的MultipleInputs的时候,我设置了两个Map,一个处理A矩阵,一个处理A矩阵的转置,发现不可以。因为MultipleInputs这个类只能针对不同的路径采取不同的Map和InputFormat。所以如果路径相同了。那么后面的会覆盖掉前面的。
相关文章推荐
- 余弦相似度的计算方法及在文本相似度方面的应用
- CNN在NLP领域的应用(2) 文本语义相似度计算
- TF-IDF在关键词自动提取、计算文本相似度和摘要自动生成上的应用
- 余弦定理的应用:基于文字的文本相似度计算
- 文本比较算法Ⅲ——计算文本的相似度
- 《云计算》学习笔记2——Google的云计算原理与应用(GFS和MapReduce)
- 文本相似度的计算-向量空间模型
- MapReduce框架中矩阵相乘的算法思路及其实现
- 文本比较算法Ⅲ——计算文本的相似度
- UVA442 Matrix Chain Multiplication 矩阵运算量计算(栈的简单应用)
- TF_IDF模型和文本相似度的计算
- 文本相似度计算--余弦定理和广义Jaccard系数
- 海量数据相似度计算之simhash短文本查找
- 文本相似度计算
- 文本相似度计算
- 文本相似度计算基本方法小结
- 文本相似度计算--余弦定理和广义Jaccard系数
- 利用MPICH2计算矩阵相乘的简单算法
- lucene计算文本相似度算法
- 关于文本相似度计算开发包的构想