最小哈希签名

参考:大佬1|大佬2

主要目的:用于文本查重比较,文档相似度比较。

估计的原理:两个集合经随机排列转换后得到的两个最小哈希值相等的概率等于这两个集合的jaccard相似度(如在两集合n次随机中有a次最小哈希值相等,相等的概率=a/n)【最小哈希的关键+目前不会证明】


$0


这里我们用到的jaccard相似度用于比较有限样本集之间的相似性和差异性。

给定两个集合A、B,jaccard系数定义为A与B交集的大小与并集大小的比值,系数越大相似度越高。

A=∅,B=∅的时候,jaccard=1.

$1


最小哈希首先针对特征矩阵。

比如全集{a,b,c,d,e}.S1={a,d},S2={c},S3={b,d,e},S4={a,c,d}

这个就是特征矩阵。

PS:假设文档为ABCD,可以以2为切割特征,AB,BC,CD。

最小哈希就是对特征矩阵进行行变换,最小哈希值就是变换后行排序下第一个为1的行号。

比如现在h(S1)=a,h(S2)=c,h(S3)=b,h(S4)=a.

具体的使用最小hash算法,将一个特征矩阵进行压缩,即构造签名矩阵,签名矩阵的每一列是n个hash函数的值,并且近似估计原始数据的jaccard的值。

接下来我们通过把行号映射出去来实现伪行排序【也属于一种不断打乱按次序的一种】

$2


模拟计算签名矩阵的方法:

先考虑第0行:可以得到:

一直顺序计算到最后一行,每次只取最小值(找到对应的行比较当前最小哈希值和映射行号的大小):

可以通过签名矩阵估计原始的jaccard相似度。

SIM(S1,S4)=1,而实际相似度为4/6=2/3。以上只是一个估计值。在大规模数据下[多个哈希],估计值和真实值相近。

不知道为啥画的矩阵和公式都没了。改天再补吧

你可能感兴趣的:(最小哈希签名)