最小哈希

维基百科,自由的百科全书
 
 

跳到导航跳到搜索

计算机科学领域,最小哈希(或最小哈希式独立排列局部性敏感哈希)方法是一种快速判断两个集合是否相似的技术。这种方法是由Andrei Broder (1997,[1]发明的,最初在AltaVista搜索引擎中用于在搜索结果中检测并消除重复Web页面。[2]

它同样也应用于大规模聚类问题,比如通过文档间包含的词语相似性进行聚类。[1]

雅可比相似度与最小哈希值

两个集合AB雅可比相似度系数定义如下:[3]

{\displaystyle J(A,B)={{|A\cap B|} \over {|A\cup B|}}.}

它是一个0到1之间的数值上,当其为0时表示两个集合不相交,当其为1时表示两个集合相等,其他的情况则在0和1之间。它广泛地用于两集合间相似性的判断:当雅可比系数趋向于1时,两个集合更相似;反之,当雅可比系数趋向于0时,两个集合更不相似。

假定h是一个将AB中的元素映射到一些不相交整数的哈希函数,而且针对给定的S,定义hmin(S)为S集合中具有最小h(x)函数值的元素x。这样,只有当最小哈希值的并集A ∪ B依赖于交集A ∩ B时,有hmin(A) = hmin(B)。 因此,

Pr[hmin(A) = hmin(B)] = J(A,B).

另一方面来说,如果r是一个当hmin(A) = hmin(B)时值为1,其它情况下值为0的随机变量,那么r可认为是J(A,B)的无偏估计。尽管此时方差过高,单独使用时没什么用处。最小哈希方法的思想是通过平均用同一方式构造的许多随机变量,从而减少方差。

算法

多哈希函数的变种

最简单的最小哈希方法是使用k个不同的哈希函数,其中k是固定的整数参数,使用这k个函数所对应的khmin(S)值来描述每个集合S。 使用这种最简单的版本来判断J(A,B),假定y是使得hmin(A) = hmin(B)的哈希函数个数,使用y/k作为估计。则此估计是k个不同的0-1随机变量的平均值,其中每个随机变量当hmin(A) = hmin(B)值为1,反之为0,并且是J(A,B)的无偏估计。因此,该平均值同样也是一个无偏估计,而且通过0-1随机变量之和的标准Chernoff上界可得知,其期望误差是O(1/√k)。所以,针对任意给定的常数ε > 0,存在另一常数k = O(1/ε2),其估计的期望误差不超过ε。例如,使用400个哈希函数值来估计J(A,B),其期望误差将小于或等于.05。

单一哈希函数的变种

计算多个哈希函数的代价是相当昂贵的,因此有关最小哈希方法的另一种实现方法是仅使用单一的哈希函数来避免这个问题。对于每个集合,使用这个单一的哈希函数选出其中的多个值,而不是每个哈希函数选择一个值。假定h是一个哈希函数,k是一个固定整数。如果Sh域上k或更多元素的集合,则定义h(k)(S)为S中具有最小h值的k个元素所组成的子集。该子集h(k)(S)可用作集合S的一个签名,任意两个集合间的相似度可通过比较它们的签名来计算。

特别地,假定A and B为任意两个集合,X = h(k)(h(k)(A) ∪ h(k)(B)) = h(k)(A ∪ B)是A ∪ Bk个元素的集合,如果h是随机变量并且k个元素的任意子集等可能地被选择。也就是说,XA ∪ B简单随机样本Y = X ∩ h(k)(A) ∩ h(k)(B)是集合X中属于A ∩ B交集的元素。因此,|Y|/kJ(A,B)的无偏估计。单一哈希函数的估计与多个哈希函数产生的估计的不同在于Y总是有k个元素,而多个哈希函数由于两个不同的哈希函数可能会产生相同的最小值,因此可能会产生更少的样本元素。然而,当k相对集合大小来说很小时,该区别可忽略不计。

通过不重复取样的标准Chernoff上界,该估计的期望误差为O(1/√k),其性能与多个哈希函数方法相匹配。

耗时分析

|Y|/k估计通过给定集合的两个签名能够在O(k)能够计算出来,因此,当ε and k为常数时,从签名中计算相似度估计的时间也为常数,这样当众多两两相似度需要计算时,该方法在运行时间上与每个集合中元素的完全比较相比,能够有实质性的优化。

最小哈希式独立排列

为了实现上述的最小哈希方法,哈希函数h需要定义n元素上的一个随机排列,这里的n是指待比较的所有集合并集中不相交元素的总数。 但是由于存在n!个不同的排列,仅仅指定一个真正随机的排列就需要Ω(n log n)位,即使n一般时,这个数值也很大。基于这样的事实,与全局哈希相类似的理论,有大量的研究工作寻找“最小哈希式独立的”一簇排列,意指针对域的任意子集,任何元素都与其最小值是等可能的。已经证明,最小哈希式独立的排列簇至少必须包含:{\displaystyle lcm(1,2,...,n)\geq e^{n-o(n)}}个不同的排列,因此它需要Ω(n)位来指定一个排列,这个数值仍然很大。[2]

由于实践上不可行,引入了最小哈希式独立的两个变型概念:严格最小哈希式独立排列簇和近似最小哈希式独立排列簇。 严格的最小哈希式独立是指最小哈希式独立属性被限制在集合基数至多为k的一些集合中。[4] 近似最小哈希式独立最多有一个固定的概率ε变化为完全独立。[5]

应用

最小哈希的最初应用包括在Web文档中聚类并消除近似重复,这通过在那些文档中出现的词语集合来描述。[1][2] 相似的技术也应用于其他类型数据的聚类和近似重复消除,如图片:在图片数据中,一张图片可以通过分割用很多更小的子图片集合或更多复杂图片特征的描述集合来表示。[6]

Schleimer, Wilkerson & Aiken(2003)使用最小哈希技术作为数字文档剽窃检测方法的一部分,他们的方法将文档表示成给定长度的子串集合,将文档划分成更大固定长度的窗口,然后使用子串的最小哈希值作为每个窗口的描述值。如果文本的拷贝部分比两倍窗口尺寸还要长,则该描述值将肯定匹配保存在数据库中众多描述值中的一个,这样那个窗口就可以用来检查有多少内容是拷贝的。[7]

数据挖掘领域,Cohen et al.(2001)使用最小哈希技术作为关联规则学习的工具。给定一个数据库,其中每一项都有多个属性(可看作是每行为一个数据库项, 每列为一个属性的0-1矩阵),他们将最小哈希的近似度方法应用于Jaccard系数,用来辨别频繁共同出现的属性候选对,然后仅计算这些候选对的确切系数值,以确定哪些项目共同出现的频度低于一个给定的严格阈值。[8]

相关主题

最小哈希方法可看作是局部性敏感哈希的一个实例。局部性敏感哈希是使用哈希将大集合的数据对象映射到更小的哈希值的技术集合,通过这样的方法当两个对象距离相近时,它们的哈希值也可以相同。在最小哈希方法实例中,一个集合的签名可看作是它的哈希值。其它局部性敏感哈希技术还有针对集合间的海明距离,以及向量间的余弦距离等。另外,局部性敏感哈希还在最近邻搜索算法有着重要的应用。[9]

最小哈希 minhash的更多相关文章

  1. minHash最小哈希原理

    minHash最小哈希原理 收藏 初雪之音 发表于 9个月前 阅读 208 收藏 9 点赞 1 评论 0 摘要: 在数据挖掘中,一个最基本的问题就是比较两个集合的相似度.通常通过遍历这两个集合中的所有 ...

  2. 海量数据挖掘MMDS week2: 局部敏感哈希Locality-Sensitive Hashing, LSH

    http://blog.csdn.net/pipisorry/article/details/48858661 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  3. MinHash算法

    MinHash是用于快速检测两个集合的相似性的方法.改方法由Andrei Broder(1997)发明,并最初用于搜索引擎AltaVista中来检测重复的网页的算法.它同样可以用于推荐系统和大规模文档 ...

  4. 文本去重之MinHash算法

    1.概述     跟SimHash一样,MinHash也是LSH的一种,可以用来快速估算两个集合的相似度.MinHash由Andrei Broder提出,最初用于在搜索引擎中检测重复网页.它也可以应用 ...

  5. MinHash算法-复杂度待整理

    1MinHash简介 传统的hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法.传统hash算法产生的两个签名,如果相等,说明原始内容在一定概率下是相等的:如果不 ...

  6. 海量数据集利用Minhash寻找相似的集合【推荐优化】

    MinHash 首先它是一种基于 Jaccard Index 相似度的算法,也是一种 LSH 的降维的方法,应用于大数据集的相似度检索.推荐系统.下边按我的理解介绍下MinHash 问题背景 给出N个 ...

  7. 海量数据挖掘MMDS week7: 局部敏感哈希LSH(进阶)

    http://blog.csdn.net/pipisorry/article/details/49686913 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  8. MinHash 原理

    最小哈希原理介绍 MinHash是基于Jaccard Index相似度(海量数据不可行)的算法,一种降维的方法A,B 两个集合:A = {s1, s3, s6, s8, s9}  B = {s3, s ...

  9. 海量文件查重SimHash和Minhash

    SimHash 事实上,传统比较两个文本相似性的方法,大多是将文本分词之后,转化为特征向量距离的度量,比如常见的欧氏距离.海明距离或者余弦角度等等.两两比较固然能很好地适应,但这种方法的一个最大的缺点 ...

随机推荐

  1. 论consul正确的关闭姿势

    最近在工作中发现一个有意思的现象,我用 ctrl+c 关闭本地 consul 的时候,报警系统并没有发出告警,说我的 node 异常,自己看了一下代码,发现 consul 的关闭还是有点猫腻的,仔细来 ...

  2. 使用consul实现分布式服务注册和发现--redis篇

    安装consul client consul 客户端检脚本 ====================================================================== ...

  3. mysql在windows下的服务安装

    前提必须用管理员身份运行 1.删除Mysql服务,打开命令行,输入下面的指令 sc delete MySql 2.初始化一下数据,比如配置文件中设置了数据的存储路径,日志位置等:该命令必须用管理员身份 ...

  4. 【剑指offer】面试题 31. 栈的压入、弹出序列

    面试题 31. 栈的压入.弹出序列 NowCoder LeetCode 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如 ...

  5. Django总结篇

    1.0 简述http协议和常用请求头 http协议: ( 基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)) HTTP协议是Hyper Text Transfer Pro ...

  6. 全栈项目|小书架|服务器开发-Koa2 参数校验处理

    为什么需要做参数校验 在开发中,无论是App开发还是服务器接口开发, 我们无法去预测用户传入的数据,因此参数(数据)校验是开发中不可或缺的一环. 例如像App的注册登录表单提交页面,就要做好多层的判断 ...

  7. OI数学汇总

    最前面:\(\LaTeX\)可能需要加载一会,请耐心等待o~ 前言 数学在\(\text{OI}\)中十分重要.其中大多都是数论. 什么是数论? \[ 研究整数的理论 --zzq \] 本文包含所有侧 ...

  8. 从Iterator到async/await

    Generator和Async 引言 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程 ...

  9. vue动态加载图片

    如果是直接动态获取完整的图片地址可以使用以下方法 <template> <img :src="url"> </template> <scr ...

  10. vue中v-if和v-for指令最好不要同时使用

    建议不要在与v-for相同的元素上使用v-if.因为v-for指令的优先级高于v-if当它们处于同一节点.v-for 的优先级比 v-if 更高,这意味着 v-if 将分别重复运行于每个 v-for  ...