《大数据》笔记 相似项发现
来源:互联网 发布:在哪里能购买淘宝号 编辑:程序博客网 时间:2024/06/06 01:12
1.近邻相似度
1.1集合的Jaccard相似度
两个集合的交集除以并集
1.2 文档相似度
抄袭文档
镜像页面
同源新闻稿
晕死...怎么计算文档相似度???????
1.3 协同过滤
就是推荐系统。。。看9.3节
2.文档的shingling
问题的解答来了
2.1 k-shingle
字符串中长度为k的子串
例:{abcdabd} k = 2
k-shingle : {ab,bc,cd,da,bd}
对空白字符可以处理或不处理(废话!)
2.2 shingle大小的选择
邮件可选k=5
研究论文k=9
理解:用shingling求出集合,再用Jaccard求相似度。。。CNKI查重貌似也是这个原理
2.3对shingle进行哈希
把k位字符串映射成int类型的整数
作用:压缩数据
使用9-shingle而不用4-shingle的原因:9-shingle的区分能力强(废话!)9-shingle更能充分利用int的2^32空间(不只是充分利用,都超过了....)
2.4 基于停用词划分shingle
这里一个shingle = 一个停用词+后续的两个词
停用词就是a the for it is to you 之类的比较酱油的词
3.保持高相似度的集合摘要表示
3.1集合的矩阵表示
集合可以表示成特征矩阵
=====================
元素 S1 S2 S3 ...
a 1 0 1
b
c
d
=====================
S1,S2,S3表示各个集合,a,b,c,d表示全集(S1并S2并S3)中的所有元素,当某元素在某集合中出现时记1,否则记0。
特征矩阵并不真正用来存储(太稀疏)
3.2最小哈希
最小哈希值 = 集合进行随机行排列后第一个列值为1的行号
如
S1
a 0
b 1
c 1
随机行排列后成:
S1
b 1
c 1
a 0
h(S1) = b
3.3最小哈希和Jaccard相似度
最小哈希值相等的概率等于两个集合的Jaccard相似度
证明:把(S1,S2都为1的行)称作X行,总共有x行
(S1,S2一个为1一个为0)的行称作Y行,总共有y行
(都为0)的行称作Z行,总共有z行
Z行对结果不产生影响,可以无视。对X,Y行进行随机排列,第一行为X行的概率为x/(x+y),恰为Jaccard相似度。
3.4最小哈希签名
矩阵中的每一行本来是代表每个元素在各个集合中是否出现,最小哈希签名将每一行替换为经过哈希后第一个1所出现的行号,每一个行对应一个哈希函数的结果。
3.5最小哈希签名的计算
步骤
1.选择n个哈希函数,在原矩阵后加n列,保存经过哈希后的新行号。
2.建立新矩阵,列为集合,行为每个哈希,初始化为(无穷大)
3.对于原矩阵的每一行,当某集合S的值为1时,替换新矩阵S对应的列值为哈希结果(若新值大于旧值则不替换)。
见p53
相似度估值=(两个集合哈希值相等的行数)/(总行数)
4.文档的局部敏感哈希算法
文档(就是上面出现的集合S1,S2,S3什么的)太多时,对它们两两比较速度太慢
局部敏感哈希算法就是要先“预选”出“疑似相似”的文档(候选对),再对这些候选对进行二次筛选,可以大大降低时间复杂度,但可能出现伪正例(把相似度低的判断为候选对,在二次筛选中被筛掉)和伪反例(把相似度高的排除在外,无法进入二次筛选就直接out了,不适合精度要求较高的情况)。
4.1面向最小哈希签名的LSH
方法:把签名矩阵分成b个行条,对于每个行条,将集合两两比较,完全相等的放入同一个桶中(即判断为候选对)。遍历每个行条的所有桶,把桶中的文档j集进行二次筛选。
p57。
4.2行条化策略的分析
设有b个行条,每个行条有r行,两个文档之间的相似度为s
某个行条中所有签名都相等(成为候选对)的概率为s^r
某个行条中不成为候选对的概率为1-s^r
所有行条中只要有一个行条签名都相等,即可称为候选对,概率为1-(1-s^r)^b
以s为自变量,称为候选对的概率为因变量,所画的图形是S形曲线。
控制正反例和伪反例的核心就是控制(使S曲线斜率最大的相似度)的值,称为阈值。当阈值小的时候(想象斜率大的那一段疯狂左移),即使相似度很小也有很大的成为候选对的概率;当阈值大的时候(斜率高的那段右移),即使相似度大也不容易称为候选对。
阈值的近似估计是(1/b)^(1/r) .... 不知道怎么算出来的
4.4 综合
a..对每篇文档构建k-shingle集合,将k-shingle映射为int值(只为了缩小存储空间,非必要)
b.建立矩阵
c.计算最小哈希签名
d.选择b和r的值(就是分行条)。若要避免正反例,则使阈值t尽量大(想象上面那个图);若要避免伪反例,则阈值尽量小。
e.构建候选对
f.对候选对进行二次筛选
g.直接检查文档本身(避免不相似的文档恰好签名相似,非必要)
- 《大数据》笔记 相似项发现
- 大数据:相似项发现
- 数据挖掘_相似项的发现
- 相似项发现-minhash
- 相似项发现-LSH
- 海量数据挖掘MMDS week7: 相似项的发现:面向高相似度的方法
- 相似项发现(一)
- 相似项发现(三)--LSH
- 相似项发现(四)--LSH深入
- 大数据学习笔记之五十 推荐算法的距离算法和相似度算法
- 大数据文本相似去重方案
- 数据挖掘笔记-寻找相似文章-Java
- 数据挖掘笔记-寻找相似文章-Python
- 大数据下的相似度计算--minHash
- 大数据JAVA实现 基于皮尔逊相关系数的相似度
- Pig 实例:发现相似专利
- 新的大数据的知识发现和数据挖掘
- 大数据笔记(一)
- ubuntu 以root身份 使用chromium浏览器
- HIbernate 中配置二级缓存Ehcache ,C3p0连接池,反向创建数据库
- 什么是MyBatis?
- java 关于split函数
- Hibernate工作机制
- 《大数据》笔记 相似项发现
- Struts2原理
- 学而知之
- VB制作透明控件。
- php实战第三天
- UItableview自适应高度
- Spring工作机制及为什么要用?
- vim 编译器的配置
- 国外程序员是如何准备面试的