如何对局部敏感哈希值进行相似检索?

简介: 利用SimHash与海明距离可判断文档相似性。为提升检索效率,Google采用抽屉原理:将64位哈希值均分4段,若两值海明距离≤3,则至少有一段完全相同。据此建立4个倒排索引,每段16位作键,查询时仅需匹配同段相同的文档,大幅缩小范围,实现海量数据下高效去重。

和其他局部敏感哈希函数一样,如果两个文档的 SimHash 值的海明距离小于 k,我们就认为它们是相似的。举个例子,在 Google 的实现中,k 的取值为 3。这个时候,检索相似文章的问题变成了要找出海明距离在 3 之内的所有文档。如果是一个个文档比对的话,这就是一个遍历过程,效率很低。有没有更高效的检索方案呢?

一个直观的想法是,我们可以针对每一个比特位做索引。由于每个比特位只有 0 和 1 这 2 个值,一共有 64 个比特位,也就一共有 2*64 共 128 个不同的 Key。因此我们可以使用倒排索引,将所有的文档根据自己每个比特位的值,加入到对应的倒排索引的 posting list 中。这样,当要查询和一个文档相似的其他文档的时候,我们只需要通过 3 步就可以实现了,具体的步骤如下:

  1. 计算出待查询文档的 SimHash 值;
  2. 以该 SimHash 值中每个比特位的值作为 Key,去倒排索引中查询,将相同位置具有相同值的文档都召回;
  3. 合并这些文档,并一一判断它们和要查询的文档之间的海明距离是否在 3 之内,留下满足条件的。

我们发现,在这个过程中,只要有一个比特位的值相同,文档就会被召回。也就是说,这个方案和遍历所有文档相比,其实只能排除掉「比特位完全不同的文档」。因此,这种方法的检索效率并不高。

这又该怎么优化呢?Google 利用 抽屉原理 设计了一个更高效的检索方法。什么是抽屉原理呢?简单来说,如果我们有 3 个苹果要放入 4 个抽屉,就至少有一个抽屉会是空的。那应用到检索上,Google 会将哈希值平均切为 4 段,如果两个哈希值的比特位差异不超过 3 个,那这三个差异的比特位最多出现在 3 个段中,也就是说至少有一个段的比特位是完全相同的!因此,我们可以将前面的查询优化为「有一段比特位完全相同的文档会被召回」。

根据这个思路,我们可以将每一个文档都根据比特位划分为 4 段,以每一段的 16 个比特位的值作为 Key,建立 4 个倒排索引。检索的时候,我们会把要查询文档的 SimHash 值也分为 4 段,然后分别去对应的倒排索引中,查询和自己这一段比特位完全相同的文档。最后,将返回的四个 posting list 合并,并一一判断它们的的海明距离是否在 3 之内。

通过使用 SimHash 函数和分段检索(抽屉原理),使得 Google 能在百亿级别的网页中快速完成过滤相似网页的功能,从而保证了搜索结果的质量。

相关文章
|
机器学习/深度学习 数据可视化 计算机视觉
轻量化Backbone | 如何改进MobileViT-v1与MobileViT-v2?MobileViT-v3带你实验
轻量化Backbone | 如何改进MobileViT-v1与MobileViT-v2?MobileViT-v3带你实验
1468 0
轻量化Backbone | 如何改进MobileViT-v1与MobileViT-v2?MobileViT-v3带你实验
|
9月前
|
消息中间件 Java 程序员
SpringCloud(2026)
本课程基于传智教育·黑马程序员教学资源,系统讲解Spring Cloud微服务架构实战,涵盖服务注册、远程调用、网关、配置中心等核心应用,并深入RabbitMQ消息队列、ElasticSearch搜索技术及高频面试题解析,结合AI辅助开发与实操训练,助力高效掌握企业级微服务开发与面试要点。
|
存储 算法 Java
哈希查找算法
哈希查找算法,又称散列查找算法,是一种通过哈希表快速定位目标元素的查找方法。其核心在于利用哈希函数将元素映射到表中的一个位置,从而实现高效查找,平均时间复杂度为O(1)。该算法适用于有序或无序序列,关键在于构建合适的哈希表并处理可能出现的哈希冲突。
1219 0
|
3月前
|
数据采集 自然语言处理 监控
电商评论API深度解析:淘宝、京东接口实战指南,解锁商品口碑数据价值
淘宝、京东作为国内头部电商平台,均开放了官方商品评论API接口。相较于爬虫抓取,官方API具备合规性强、数据稳定、字段标准、更新及时、风控友好五大核心优势,是开发者、运营人员、数据分析师获取电商评论数据的首选渠道,广泛应用于舆情监控、竞品分析、产品迭代、智能客服、口碑评分统计等场景。
|
7月前
|
安全 应用服务中间件 网络安全
2026年OpenClaw Docker生产环境部署指南:附阿里云1分钟安装OpenClaw+单机架构全流程
2026年,由奥地利开发者Peter Steinberger主导开发的OpenClaw AI执行引擎(曾用名Clawdbot、Moltbot)凭借“从给建议到做事情”的核心能力爆火开源领域,GitHub星标数突破18.6万,成为全球增速最快的开源项目之一。与传统对话式AI不同,OpenClaw定位“本地运行、可自托管的数字员工”,支持接入Claude、GPT、Ollama等主流大模型,兼容钉钉、飞书等十余种通讯渠道,通过技能插件无限扩展能力边界,覆盖办公自动化、代码辅助、跨应用协同等全场景,且基于MIT协议开源,支持免费使用与私有化部署。
3206 1
|
8月前
|
测试技术 Windows
【Azure 环境】在Windows环境中使用OpenSSL生成自签名证书链步骤分享
本文详解如何使用OpenSSL生成自签名证书链,包括根CA、中间CA和服务器证书,并最终打包为包含私钥的PFX文件,适用于内部系统或测试环境部署,步骤清晰,可复制即用。
883 3
|
机器学习/深度学习 数据处理
大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究
本文分析了大规模Transformer架构(如LLama)中归一化技术的关键作用,重点探讨了LayerNorm被RMSNorm替代的原因。归一化通过调整数据量纲保持分布形态不变,提升计算稳定性和收敛速度。LayerNorm通过均值和方差归一化确保数值稳定,适用于序列模型;而RMSNorm仅使用均方根归一化,省略均值计算,降低计算成本并缓解梯度消失问题。RMSNorm在深层网络中表现出更高的训练稳定性和效率,为复杂模型性能提升做出重要贡献。
3809 14
大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究
|
数据可视化 Ubuntu 数据挖掘
linux中使用R语言
R语言是一种专用于统计计算和数据分析的编程语言,以其强大的数据处理能力和丰富的可视化功能著称。在Linux中安装R非常简单,通过`sudo apt install r-base`即可完成。R支持基本数据分析和复杂的数据可视化,如使用ggplot2包绘制精美图形。此外,R还能生成甘特图等项目管理工具,帮助清晰展示项目进度。无论是数据处理还是可视化,R都表现出色,适合各种数据分析任务。
903 3
|
9月前
|
存储 算法 Java
03 | 哈希检索:如何根据用户 ID 快速查询用户信息?
本文介绍了哈希表的原理与实现。通过哈希函数将键转换为数组下标,利用数组的随机访问特性实现O(1)级查询。针对哈希冲突,讲解了开放寻址法和链表法两种解决方案,并分析其优劣。最后指出哈希表虽高效,但存在空间消耗大、无序等缺点,适用场景需权衡。
|
PyTorch TensorFlow API
大模型中 .safetensors 文件、.ckpt文件、.gguf和.pth以及.bin文件区别、加载和保存以及转换方式
本文讨论了大模型中不同文件格式如`.safetensors`、`.ckpt`、`.gguf`、`.pth`和`.bin`的区别、用途以及如何在TensorFlow、PyTorch和ONNX等框架之间进行加载、保存和转换。
7232 2

热门文章

最新文章