问题描述
这个问题的输入是一个文本语料库,输出是语料库中相似度大于某个阈值的所有文本对,阈值可以是0.9或者0.8.
举个例子,比如我的输入是下面的语料库,我的阈值是0.6,我的相似度度量用的是文本中以字为单位的jaccard相似度
1. 福禄很可爱
2. 福禄真可爱
3. 福禄是可爱
4. 阿里巴巴牛逼
5. 阿里巴巴很牛逼
我的输出是:
文档ID文档ID相似度
1 2 0.66
1 3 0.66
4 5 0.8
暴力求解
看我上面的例子你可能觉得这很简单吗?大不了我用暴力计算,来一个二重循环,把语料库整个遍历一遍,不就算出来了吗?如果语料库中的文本数少,这么搞当然可以。
假设语料库中的文本数是N,这么算的复杂度是O(n^2),对海量文本来说,这简直是灾难,此路不通;
map-reduce思路
大数据时代,我们其实不缺计算资源,暴力求解的思路可以有map reduce的方法来求解
图1就是这个问题的一个map reduce解法的例子 ,其中RID代表文档号,a列是原始文本