文章目录
相似项发现
1.相似度
1.集合的Jaccard相似度
Jaccard系数主要用于计算样本间的相似度。Jaccard系数的计算方式为:样本交集个数和样本并集个数的比值:
Jaccard系数相反的即为jaccard距离:
2.文档的shingling
1.k-shingle
定义:文档中任意长度为k的子串
2.k大小的选择
文档中常见字符个数为n,那么 应该远大于文档长度
3.对shingle进行哈希
将长度为k的字符串映射为哈希桶编号,把通编号看成最终的shingle,如果使用9-shingle然后映射成4字节整数,那么效果要优于直接使用4-shingle。
3.保持相似度的集合摘要表示
1.集合的矩阵表示
如果包含相应元素,则对应位置设为1
元素 | ||||
---|---|---|---|---|
a | 1 | 0 | 0 | 1 |
b | 0 | 0 | 1 | 0 |
c | 0 | 1 | 0 | 1 |
d | 1 | 0 | 1 | 1 |
e | 0 | 0 | 1 | 0 |
2.最小哈希
将矩阵重新排列,对于每个集合,第一个不为0的数对应的元素就是最小哈希值
元素 | ||||
---|---|---|---|---|
b | 0 | 0 | 1 | 0 |
e | 0 | 0 | 1 | 0 |
a | 1 | 0 | 0 | 1 |
d | 1 | 0 | 1 | 1 |
c | 0 | 1 | 0 | 1 |
比如:
3.最小哈希与Jaccard相似度
两个集合经过随机排列转换之后,得到的两个最小哈希值相等的概率的等于两个集合的Jaccard相似度
【证明】考虑集合 ,共x行两列均为1,y行两列分别为1和0,z行两列均为0,那么Jaccard相似度为 ;对矩阵随机排列转换,从上到下扫描,在碰到那些y之前碰到x的概率是 ,(相当于在X+Y的样本中第一次抽取到X的概率),这也是 的概率。
4.最小哈希签名
对大规模矩阵进行排列转换不可行,但是我们可以使用n个哈希函数替代n个排列转换。
行 | ||||||
---|---|---|---|---|---|---|
0 | 1 | 0 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 0 | 2 | 3 |
2 | 0 | 1 | 0 | 1 | 3 | 2 |
3 | 1 | 0 | 1 | 1 | 4 | 0 |
4 | 0 | 0 | 1 | 0 | 0 | 3 |
那么签名矩阵为
1 | 3 | 0 | 1 | |
0 | 2 | 0 | 0 |
如何计算呢,以 为例,对于 ,由哈希得到的最小值(此处是0)开始,从小到大找到对应的 的值,如果为1那么就填入签名矩阵,并且不在往下找, 同理。
4.文档的局部敏感哈希
1.面向最小哈希签名的LSH
对最小哈希签名矩阵,将其划分为b个行条,每个行条由r行组成,对每个行条使用独立的桶数组,即使是不同行条中的相同向量列,也不会哈希到同一桶中。
对于
肯定会被哈希到同一个桶,其他不相同的列仍然有三次机会成为候选对,签名矩阵越相似,成为候选对的概率越大,这使得相似的列更有可能成为候选对。
2.一个完整的发现相似项的方法
- 选择某个k,对每篇文档构建k-shingle集合。将k-shingle集合映射成更短的桶编号(后一步可选)。
- 将文档k-shingle对照shingle排序。
- 选择最小哈希签名长度n。将上一步排好序的表计算最小哈希签名。
- 选择阈值t来定义达到的相似程度。选择行条数b和每个行条中的行数r,使得br=n,t近似为
- 使用LSH技术构建候选对
- 检查每个候选对的签名,确定他们一致性的比例是否大于t。
5.距离测度
- 欧式距离
- Jaccard距离
- 余弦距离
- 编辑距离
- 海明距离
6.局部敏感函数理论
1.局部敏感函数族要求
- 尽可能选择近距离对
- 统计上相互独立:联合概率=独立事件概率乘机
- 在以下两个方面有很高的效率:很短时间内识别候选对;组合在一起可以跟很好的避免伪正例或伪反例
2.敏感函数族定义
对于候选对x、y, 是某个距离测度d下的两个距离值,如果函数族F的每个函数都满足以下条件,则成为敏感的:
- 如果 ,那么 的概率至少是
- 如果 ,那么 的概率最大是
如图所示
3.局部敏感函数族放大
1.与构造:将函数族中r个函数作用在x、y上,如果全都有 ,那么才有
2.或构造:将函数族中r个函数作用在x、y上,如果有一个 ,那么就有
7.面向高相似度的方法
1.相等项发现
- 对文档头部少许字符进行哈希,然后只对进入同一桶的文档进行比较
- 对整篇文章哈希
- 对所有文档随机选择固定点,并依据此进行哈希
2.集合的字符串表示方法
- 将全集中的所有元素按照固定规则排序
- 将所有集合按照规定排序规则表示
如将字母组成的集合按照字母表顺序排序,那么集合 表示为
3.基于长度的过滤
- 将所有字符串按长度排序
- 假定两个字符串Jaccard距离上界是J
- 对于字符串s和他后面的t,交集不大于 ,并集不小于 ,Jaccard相似度最大
- 为了是s和t能够对比,必须有
4.前缀索引
- 将字符串前p个字符组成前缀
- Jaccard距离下届J
- 任意其他满足 的字符串t的前缀没有在s的前缀出现
- 那么s和t的Jaccard相似度为
- p至少为
5.位置信息的使用
- Jaccard距离下届J
- 对符号建立索引的同时,也对其位置进行索引,如 表示x在前缀中的位置i
- 分别从s、t的i、j个字符开始比较时,