实验报告
实验名称:文档相似性分析
一、实验目的
1.学习利用hadoop处理大数据。
2. 通过实验加强mapreduce编程能力。
3. 进一步理解shingling+minhash+lsh方法。
二、实验内容
1.安装vmware、hadoop、centos操作系统。
2. 使用给定的数据集,完成对文档相似性分析的实验任务。
三、实验环境
centos操作系统、eclipse
四、实验原理
4.1 shingling
在一堆非常多的文档中,找到相似的文档,或者对文档间的相似性进行评估。
当应用于此类目的的时候,我们最常用的用来表示一篇文档的方法是:shingling。
1. k-shingles
可以把一篇文档看成一个字符串。那么一篇文档的k-shingle就是在这篇文档中出过现的任何长度为k的字符串。k-shingles就是该篇文档所有k-shingle的集合,在进行处理之前需要去掉文档中不必要的标点符号和多余的空格、换行。那么k的大小决定于什么因素呢? 与文档的长度和所有的字符个数有关。k的取值一般要满足一个规则:k的取值应该能够满足,任何一个给定的shingle出现在任何给定的文档中的概率都非常低。一般对于邮件类的文档,k取值为5是最为合适的。假设在邮件中一般只会出现字母字符和空格字符。那么将会有27^5=14,348,907个可能的shingles。而一般的Email的字符长度会远小于14million。而在实际的测试中k=5也确实是表现的非常好。而对于长文档,如研究论文等k取9是一个安全的取值。
2. Hashing Shingles
我们可以选择一个hash函数来将k-shingle映射成为数值,这样对文档的表示形式就是一群整数的集合。
4.2 保持相似度的集合摘要(MinHashing)
可以发现,文档的shingles集合是非常大的,尽管我们用hash将其映射为4byte或者更大的整数。假设我们有上百万的文档,那么内存中就会放不下这些shingles的集合。
我们的目标就是把大数据量的shingles集合变换为非常小的代表(称之为签名)。而且这样的签名应该有这样的性质: 能够很容易的对两个签名集合进行比较,并且能够较简单的计算两个签名集合的jaccard距离;而且,签名集合计算出来的的相似度(jaccard距离)应该和实际的相差不大,签名集合越大