《大数据》笔记 相似项发现

来源:互联网 发布:在哪里能购买淘宝号 编辑:程序博客网 时间: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.直接检查文档本身(避免不相似的文档恰好签名相似,非必要)

原创粉丝点击