什么是局部敏感哈希?

简介: 局部敏感哈希(LSH)是一种将高维数据映射为低维编码的技术,使相似数据更可能生成相近或相同的哈希值。不同于传统哈希对微小变化敏感,LSH通过随机超平面划分空间,使邻近点在多个划分中大概率落入同侧,从而获得相似哈希码。常用海明距离衡量哈希值相似性,适用于近似最近邻搜索与大规模文本去重等场景。

借助非精准检索的思路,我们可以将高维空间的点也进行区域划分,然后为每个区域都生成一个简单的一维编码。这样,当我们要查找一个点最邻近的 k 个点的时候,直接计算出区域编码就能高效检索出同一个区域的所有对象了。

也因此,我们就能得出一个结论,那就是同一个区域中的不同的点,通过统一的计算过程,都能得到相同的区域编码。这种将复杂对象映射成简单编码的过程,是不是很像哈希的思路?

所以,我们可以利用哈希的思路,将高维空间中的点映射成低维空间中的一维编码。换句话说,我们通过计算不同文章的哈希值,就能得到一维哈希编码。如果两篇文章内容 100% 相同,那它们的哈希值就是相同的,也就相当于编码相同。

不过,如果我们用的是普通的哈希函数,只要文档中的关键词有一些轻微的变化(如改变了一个字),哈希值就会有很大的差异。但我们又希望,整体相似度高的两篇文档,通过哈希计算以后得到的值也是相近的。因此,工业界设计了一种哈希函数,它可以让相似的数据通过哈希计算后,生成的哈希值是相近的(甚至是相等的)。这种哈希函数就叫作 局部敏感哈希(Locality-Sensitive Hashing)。

其实局部敏感哈希并不神秘。让我们以熟悉的二维空间为例来进一步解释一下。

在二维空间中,我们随意划一条直线就能将它一分为二,我们把直线上方的点的哈希值定为 1,把直线下方的点的哈希值定为 0。这样就完成一个简单的哈希映射。通过这样的随机划分,两个很接近的点被同时划入同一边的概率,就会远大于其他节点。也就是说,这两个节点的哈希值相同的概率会远大于其他节点。

当然,这样的划分有很大的随机性,不一定可靠。但是,如果我们连续做了 n 次这样的随机划分,这两个点每次都在同一边,那我们就可以认为它们在很大概率上是相近的。因此,我们只要在 n 次随机划分的过程中,记录下每一个点在每次划分后的值是 0 还是 1,就能得到一个 n 位的包含 0 和 1 的序列了。这个序列就是我们得到的哈希值,也就是区域编码。

因此,对于高维空间,我们构造局部敏感哈希函数的方案是,随机地生成 n 个超平面,每个超平面都将高维空间划分为两部分。位于超平面上面的点的哈希值为 1,位于超平面下方的点的哈希值为 0。由于有 n 个超平面,因此一个点会被判断 n 次,生成一个 n 位的包含 0 和 1 的序列,它就是这个点的哈希值。这就是一个基于超平面划分的局部敏感哈希构造方法。(为了方便你直观理解,我简单说成了判断一个点位于超平面的上面还是下面。在更严谨的数学表示中,其实是求一个点的向量和超平面上法向量的余弦值,通过余弦值的正负判断是 1 还是 0。这里,你理解原理就可以了,严谨的数学分析我就不展开了。)

如果有两个点的哈希值是完全一样的,就说明它们被 n 个超平面都划分到了同一边,它们有很大的概率是相近的。即使哈希值不完全一样,只要它们在 n 个比特位中有大部分是相同的,也能说明它们有很高的相近概率。

上面我们说的判断标准都比较笼统,实际上,在利用局部敏感哈希值来判断文章相似性的时候,我们会以表示比特位差异数的 海明距离(Hamming Distance)为标准。我们可以认为如果两个对象的哈希值的海明距离低于 k,它们就是相近的。举个例子,如果有两个哈希值,比特位分别为 00000 和 10000。你可以看到,它们只有第一个比特位不一样,那它们的海明距离就是 1。如果我们认为海明距离在 2 之内的哈希值都是相似的,那它们就是相似的。

相关文章
|
机器学习/深度学习 缓存 人工智能
大语言模型中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?
Transformer的基石自2017年后历经变革,2022年RoPE引领NLP新方向,现已被顶级模型如Llama、Llama2等采纳。RoPE融合绝对与相对位置编码优点,解决传统方法的序列长度限制和相对位置表示问题。它通过旋转矩阵对词向量应用角度与位置成正比的旋转,保持向量稳定,保留相对位置信息,适用于长序列处理,提升了模型效率和性能。RoPE的引入开启了Transformer的新篇章,推动了NLP的进展。[[1](https://avoid.overfit.cn/post/9e0d8e7687a94d1ead9aeea65bb2a129)]
3040 0
|
SQL 机器学习/深度学习 人工智能
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
本文系统性地阐述了自然语言转SQL(NL2SQL) 技术如何让非技术背景的业务分析师实现数据自助查询,从而提升数据驱动决策的效率与准确性。
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
|
7月前
|
存储 Python 容器
简化Python类:使用数据类(dataclasses)
简化Python类:使用数据类(dataclasses)
573 18
|
7月前
|
人工智能 自然语言处理 机器人
2026年OpenClaw(Clawdbot)接入QQ机器人阿里云官方保姆级教程
在2026年AI自动化办公与即时通讯协同需求持续攀升的当下,OpenClaw(原Clawdbot、曾用名Moltbot)凭借“自然语言驱动、全场景任务自动化、多终端无缝适配”的核心优势,成为个人办公提效、轻量团队协同、社群管理的优选AI工具。作为GitHub星标量超19万的开源AI自动化代理平台,它打破了传统AI仅能对话的局限,真正实现“能听指令、能做实事”——无论是文档生成、日程提醒、文件整理,还是联网搜索、简单代码开发、跨工具协同,只需一句口语化指令,就能自动完成全流程操作,无需手动干预。其开源特性更支持用户根据需求灵活扩展功能,适配多样化使用场景,完美贴合现代办公与社群运营的高效需求。
4748 1
|
10月前
|
机器学习/深度学习 人工智能 安全
【专利技术】破解“眼见不为实”困局:高维数据多模态伪造检测专利落地,筑牢数字内容安全防线(第3期)
合肥高维数据获国家发明专利授权,其“融合多模态信息的深度伪造检测技术”通过视觉与音频协同分析,精准识别AI伪造视频,有效应对虚假新闻、身份诈骗等风险,已应用于媒体、金融、政务及个人隐私保护等领域,筑牢数字安全防线。
487 0
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
889 2
|
存储 安全 Linux
嵌入式Linux系统bringup 启动全景解析
嵌入式Linux系统bringup 启动全景解析
810 0
|
存储 SQL 关系型数据库
binlog、redolog和undolog三者有何区别?
MySQL中的binlog、redo log和undo log是日志文件,各有特定作用。binlog用于数据备份、恢复和复制,适用于所有存储引擎。redo log记录事务修改,用于崩溃恢复和数据持久性,仅InnoDB存储引擎支持。undo log保存事务修改前的状态,用于事务回滚和MVCC,也仅InnoDB支持。它们在功能和记录内容上有明显区别,有助于事务管理和数据库一致性。
1504 0
|
索引 Python
真的!千万不要忽略这些python常见报错信息_nameerror name ‘a‘ is not defined
真的!千万不要忽略这些python常见报错信息_nameerror name ‘a‘ is not defined
|
机器学习/深度学习
下三角矩阵(Lower Triangular Matrix)
下三角矩阵(Lower Triangular Matrix)是一种特殊形式的矩阵,其非零元素仅位于主对角线以下。在数学和工程领域中,下三角矩阵通常用于线性代数和微积分等问题。以下是一些关于下三角矩阵的特点和应用:
3060 1