数学之美:信息指纹及其应用

前面在介绍网络爬虫时说道为了避免重复爬取,爬虫需要维护一个url表来标记是否已经访问该url。一个问题是这个url只是我们用于验证是否访问,而没有其他作用。但网页url长度很长,占据100字节左右,这大大浪费了资源。所以需要我们对url进行信息压缩,要求压缩后的url占据内存少,且不会出现重复问题。这就像对信息建立类似人类的指纹,用于验证信息。这就涉及到加密算法md5,sha256等的使用。相信大家都使用过对密码的不对称加密。这类hash算法在特征工程中也有一定作用。ctr领域由于大部分特征都是categorical,造成特征空间极其庞大,使用hash算法在一定程度上可以压缩特征空间大小。

判定集合相同:

判断集合“AAA BBB CCC”和集合“BBB CCC AAA”是否相同,允许次序不同。最糟糕做法是对集合元素一一作比较,复杂度O(N**2);另一种是对两个集合进行排序,然后顺序比较,复杂度(NlogN);还可以对一个集合建立哈希表,然后与另一个集合做比,复杂度(N),但占据额外空间。最好办法是对集合中每个元素做哈希,然后相加,对比:

判定集合基本相同:

但是如果有人对集合稍微修改一点,上述方法就会出问题。如集合“AAA BBB CCC”和集合“BBB CCC DDD”。这是我们可以按照某种规则,对两个集合随机抽取部分进行验证。如只取前两个元素。

在比较网页相同时,由于页面过大,不会将整个网页进行比较,而是从网页中取几个词做hash比较。在网页中常见词一般都会出现,不能作为两篇文章的特征,而少见词只出现一次,可能是噪音。我们可以利用TD-IDF特性找出词鉴能力强的几个词做比较。

上面算法稍作改进可以用于判断文章抄袭,具体做法是将文章分割成小段,对片段提取特征词集合,然后计算指纹,进行比较,找出大致相同的文字。最后根据时间找出原创和抄袭。

youtube防盗版:

根据视频的存储机制,找出关键帧,计算指纹进行比较。

信息指纹重复可能性:

相似哈希(SimHash):

相似哈希可以用来判断两个页面的相似性,两个哈希差越小其页面相似性越大。如果两个页面完全相同,相似哈希也会相同;如果只有少数权重小的词不同,其余数相同,几乎相似哈希也会相同。如果两页面相似哈希不同,但差距很小,则页面也很相似。原理如下:

其实这种方法也很好理解,如果两个网页相似性非常高的话,只有部分极少出现词不同。通过各网页计算出来的相同词的TF-IDF大部分非常接近。通过哈希后二进制哈希在大多数位上也非常相似,这时根据二进制位重新组成新的实数,并再转换成二进制,在一定程度上可以将那些出现极少的词带来的噪声给覆盖掉。

猜你喜欢

转载自blog.csdn.net/qq_16234613/article/details/82711982