论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
分布式数据库
›
Elasticsearch:过滤 HNSW 搜索,快速模式
Elasticsearch:过滤 HNSW 搜索,快速模式
写过一篇
金牌会员
|
昨天 21:02
|
显示全部楼层
|
阅读模式
楼主
主题
822
|
帖子
822
|
积分
2466
作者:来自 Elastic Benjamin Trent
通过我们的 ACORN-1 算法实现,探索我们对 Apache Lucene 中的 HNSW 向量搜索所做的改进。
多年来,Apache Lucene 和 Elasticsearch 一直支持使用 kNN 查询的过滤搜索,允许用户检索符合指定元数据过滤器(metadata filter)的最近邻居。然而,处理半限定性(semi-restrictive)过滤器时性能总会受到影响。在 Apache Lucene 中,我们引入了 ACORN-1 的变体 —— 一种用于过滤 kNN 搜索的新方法,可实现高达 5 倍的速度提升且召回率几乎没有降落的搜索速度。
本博客将讨论过滤 HNSW 搜索所面临的挑战,解释了为什么随着过滤的增加性能会变慢,以及我们如何使用 ACORN-1 算法改进 Apache Lucene 中的 HNSW 向量搜索。
为什么搜索较少的文档现实上速度更慢
与直觉相反,过滤文档(从而减少候选数量)现实上会使 kNN 搜索变得更慢。对于传统的词汇搜索,更少的文档意味着更少的评分操作,意味着更快的搜索。然而,在 HNSW 图中,主要成本是识别 k 个最近邻居所需的
向量比较次数
。在某些过滤器集巨细下,向量比较的次数可能会显著增加,从而低沉搜索性能。
这是未过滤图形搜索的一个例子。请注意,有约莫 6 个向量运算。
由于 Apache Lucene 中的 HNSW 图在构建时并不了解过滤标准,因此它纯粹基于向量相似性进行构建。当应用过滤器检索 k 个最近邻居时,搜索过程会遍历更多的图。发生这种情况的原因是,局部图邻域内的自然最近邻可能会被过滤掉,从而需要更深入的探索并增加向量比较的次数。
请注意入口点和第一个有效过滤集之间的过滤 “差距”。在典型的图表中,可能会存在这样的差距,导致探索过早结束并导致召回率不佳。
我们必须加快速度
由于该图并未考虑过滤条件,我们需要对图进行更深入的探索。此外,为了避免陷入死胡同,我们必须对被过滤掉的节点实行向量比较。那么,如何在避免卡住的同时减少向量操作的数量呢?这正是Liana Patel等人在他们的 ACORN 论文中所办理的核心问题。
虽然本文讨论了多种图形技能,但我们关心的 Apache Lucene 具体算法是他们的 ACORN-1 算法。主要思想是你只探索满足你的过滤的节点。为了补偿增加的希罕性,ACORN-1 将探索范围扩展到相近区域之外。现在,我们不再只是探索直接的邻居,还探索每个邻居的邻居。这意味着对于具有 32 个毗连的图,探索不会只查看最近的 32 个邻居,而是会尝试在 32*32=1024 个扩展邻域中探求匹配的邻居。
在 Lucene 中,我们通过以下方式对 ACORN-1 算法进行了稍微的调解。仅当邻域中超过 10% 的向量被过滤掉时,才会探索扩展邻域。此外,如果我们已经获得至少 neighborCount * 1.0/(1.0 - neighborFilterRatio) 的分数,就不会探索扩展邻域。这使得搜索者能够使用毗连更紧密的邻域,此中邻域连通性与过滤器高度干系。
我们还注意到,无论是在逆干系过滤器(例如,仅匹配远离查询向量的向量的过滤器)还是极其严格的过滤器中,仅探索每个邻居的邻域是不够的。当没有找到通过过滤器的有效向量时,搜索器还将尝试比邻居的邻居分支得更远。然而,为了防止在图中迷失,这种额外的探索是有限的。
数字不会说谎
在多个真实天下的数据集中,这种新的过滤方法带来了
显著的速度提升
。以下是对 100 万 Cohere 向量按 0.05% 进行随机过滤的结果:
左上方是 “获胜”,表明该候选人明显更胜一筹。然而,为了达到相同的召回率,需要调解搜索参数(例如 num_candidates)。
为了进一步研究随着更多向量通过过滤器而导致的改进减少,我们对 8M Cohere Wiki 文档数据集进行了另一项测试。一样平常来说,无论过滤的向量数量有多少,你都希望获得更高的召回率,同时访问的向量更少。量化这一点的一个简单方法是检查
召回率与访问率的比率
。
在这里,我们看到新的过滤搜索方法如何实现更好的召回率 vs. 访问率。
显然,当达到 60% 左右时,改进水平将会降落或者消失。因此在 Lucene 中,只有当 40% 以上的向量被过滤掉时,才会使用这个新算法。
即使我们的夜间 Lucene 基准测试也因这一厘革而取得了令人瞩目标进步。
必须快点
通过元数据过滤 kNN 搜索是现实用例的关键。在 Lucene 10.2 中,我们将其速度提高了 5 倍,使用了更少的资源,而且保持了较高的召回率。我非常高兴能够在将来的 Elasticsearch v9 版本中将它交到用户手中。
Elasticsearch 包含许多新功能,可帮助你为你的用例构建最佳的搜索办理方案。深入了解我们的示例条记本以了解更多信息,开始免费云试用,或立即在本地呆板上试用 Elastic。
原文:Filtered HNSW search, fast mode - Elasticsearch Labs
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
写过一篇
金牌会员
这个人很懒什么都没写!
楼主热帖
hibernate入门
kubernetes数据持久化StorageClass动态 ...
回忆我的第一个软件项目
管理软件定制公司 广州管理软件定制开 ...
OpenHarmony开源鸿蒙与HarmonyOS商业鸿 ...
Debian/Ubuntu使用apt安装php8.x
26基于java的电影院售票管理系统设计 ...
Java EnumMap putAll()方法具有什么功 ...
Jvm调优
基于LSTM的多变量多输出温湿度预测 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表