ES 8.14 向量搜索优化

news2024/11/26 7:36:11

参考:https://blog.csdn.net/UbuntuTouch/article/details/139502650

检索器(standard、kNN 和 RRF)
检索器(retrievers)是搜索 API 中的一种新抽象概念,用于描述如何检索一组顶级文档。检索器被设计为可以嵌套在树形结构中,因此任何检索器都可以拥有子检索器。检索器是一种标准、更通用且更简单的 API,它取代了其他各种搜索元素,如 kNN 和查询。在 8.14 版本中,我们引入了对三种类型的检索器的支持:

Standard — 提供标准查询功能
kNN — 启用基于 HNSW 的密集向量搜索
RRF — 使用倒数排名融合算法将不同的密集和稀疏向量排名结果集合并成一个单一的混合和排序的结果集
检索器方法的两个主要好处是:

所有检索器的结构都是相同的,因此它们更容易学习、编写和维护。
设计成可以在树结构中组合使用,提供了更多的灵活性来设计之前无法定义的查询 —— 例如,不将 kNN 或 RRF 作为顶级元素。
引入检索器是我们简化搜索使用、特别是向量搜索使用的又一步。这一主题包括了像自动向量标准化以实现更高效的余弦相似度和引入 RRF 以便无需调整即可实现高质量混合集的增强功能。我们将继续在这方面进行大量投资,并计划在未来通过我们新的 ES|QL 语言引入相关性排名。

有关将 RRF 与检索器一起使用的其他示例,请参阅此博客。

使用 SIMD (Neon) 针对 int8 向量优化向量距离函数
Elasticsearch 现在使用本机代码使用 SIMD (Neon) 进行向量比较,以提高 ARM AArch64 架构处理器上的性能。此增强的详细信息将在向量相似性计算 - 可笑的速度中讨论。最重要的是,int8 向量的段合并速度比这些处理器上的速度快几倍(通常快 3-6 倍)。此改进为其他任务释放了资源,并加快了段大小优化过程。

这是一系列向量相似性性能改进的又一步。将来,我们打算在其他上下文中使用这种优化,例如改善查询延迟。

密集向量场默认采用 Int8 量化
许多模型生成带有 float32 元素的向量。然而,在检查现实生活场景时,很快就会发现 int8 元素提供了更好的承诺,具有更小的索引(更低的成本)、改进的摄取性能和改进的查询延迟。所有这些都是在几乎不影响排名质量的情况下实现的。有时在质量指标(例如 NDCG 或召回率)排名中可以发现的微小影响可以通过增加正在考虑的候选者数量来轻松减轻。但即使没有这一点,最终用户通常也不会注意到这种变化,从业务角度来看也是如此。

考虑到这一点,我们在 8.12 中向 int8 引入了标量量化。在检查了此功能的生产使用后,我们决定将其设为新索引的默认行为。提供这样的合理默认值可以让用户更轻松地迈出向量搜索的第一步。

参考:回顾相关性:平衡关键字和语义搜索_关键词搜索和语义搜索-CSDN博客

词汇搜索工具箱
像 BM25 这样的文本搜索算法已经存在了几十年,事实上 BM25 经常与文本搜索同义使用。 这篇博文详细介绍了 BM25 的工作原理。

分析器、分词器、过滤器、字段权重和增强都是我们的词法搜索工具箱中的工具,它们使我们能够以非常特定的方式转换文本,以支持一般和非常专业的搜索用例。

但我们还有很多其他工具可供使用:

重新排名是该工具箱中的另一个强大工具,无论是学习排名、语义重新排名等。
同义词在关键字搜索中大量使用,以区分俚语、特定领域的行话等。 通用模型可能无法很好地处理非常小众的同义词。
这些工具用于影响相关性,但更重要的是适应业务规则。 业务规则是自定义规则,它们的用例差异很大,但通常包括使结果集多样化或基于上下文查询结果或其他个性化因素显示赞助内容。

Elasticsearch:实用 BM25 - 第 2 部分:BM25 算法及其变量_bm25算法得到结果样式-CSDN博客

语义搜索并不完美
语义搜索在代表你寻找的内容意图方面非常有效,即使返回的结果不包含你指定的确切关键字,也能返回匹配的结果。然而,如果你正在开发一个搜索应用并将语义搜索纳入现有技术栈,那么语义搜索并非没有一些缺陷。

这些缺陷主要分为三类:

成本
语义搜索本身尚未具备的功能
语义搜索单独无法很好处理的查询
成本可能是金钱(训练或许可模型、计算),也可能是时间。时间可以是延迟(摄入或搜索推断延迟),也可以是开发时间的成本。我们不希望在那些可以用现有工具轻松解决的问题上浪费宝贵的工程时间,而是将这些时间用于解决需要工程关注的难题。

还有许多人们在其搜索解决方案中希望拥有的功能;例如,高亮显示、拼写纠正和错字容忍。这些都是语义搜索当前原生支持度较低的功能,但许多 UI/UX 人员将这些视为用户功能的基本要求。

至于语义搜索可能不擅长处理的查询,通常是一些特定领域的查询。例如:

像型号编号这样的精确匹配
领域专业术语

我们还必须考虑包括业务规则(例如基于流行度、转化率或活动的提升)在内的要求,这些语义搜索本身可能无法本地处理。

查询理解是另一个问题。这可能是简单的数字转换和度量单位处理,也可能是非常复杂的处理,比如处理否定语句。你可能曾经有过令人沮丧的搜索经历,例如搜索 “I want a restaurant that doesn't serve meat - 我想找一家不提供肉类食品的餐厅”。LLM 在这里返回素食餐厅可能还可以,但大多数语义搜索会返回提供肉类食品的餐厅!

混合搜索的优势所在

混合搜索结合了两全其美的优点:它将 BM25 文本搜索的精确性和功能性与向量搜索的语义理解相结合。这导致了更好的召回率和更高的整体相关性。

让我们来看一些例子:

房地产:Modern farmhouse with lots of land and an inground pool in the 12866 zip code - 位于 12866 邮政编码区的现代农舍,拥有大片土地和一个地下游泳池。是否有游泳池及其邮政编码可以作为过滤条件,而风格描述可以使用语义搜索。
电子商务:Comfortable Skechers with memory foam insoles in purple - 带有记忆海绵鞋垫的紫色舒适斯凯奇鞋。颜色和品牌可以作为过滤条件,其余部分可以通过语义搜索来处理。
求职:Remote software engineer jobs using Elasticsearch and cloud native technologies - 使用 Elasticsearch 和云原生技术的远程软件工程师职位。职位名称和远程工作偏好可以作为过滤条件,而工作技能可以通过语义搜索来处理。

在 Elasticsearch 中,混合搜索是什么样子的?
当前,“hybrid search - 混合搜索” 这个术语有点流行,不同的场景下人们可能会有不同的理解。在一些系统中,如果你有一个单独的向量数据库,这可能涉及到对不同数据存储的多次调用,并将它们与一个服务结合起来。但是,Elasticsearch 的一个超能力是所有这些都可以结合在一个单一的索引和一个搜索调用中。

在 Elasticsearch 中,混合搜索可能像一个布尔查询那样简单。这里有一个 Elasticsearch 中布尔查询结构的示例,它结合了文本搜索、KNN 搜索、文本扩展查询和其他支持的查询类型。当然,这可以与重新评分以及其他使 Elasticsearch 如此强大的功能结合使用。布尔查询是将这些文本和向量搜索结合成一个单一查询的非常简单的方法。

在 8.12 版本中

另一种选择是使用 retrievers,从 Elasticsearch 8.14.0 开始,检索器是描述这些复杂检索管道的更简单的方法。 下面是一个示例,它将标准查询与 kNN 查询结合起来作为 retriever,所有这些都汇总起来以使用倒数排名融合 (RRF) 对结果进行排名。

合并结果集
现在你有了一个混合搜索查询,如何将所有这些合并成一个单一的结果集呢?这是一个难题,特别是当分数几乎肯定会因结果检索方式的不同而大相径庭时。

经典的方法,使用布尔查询示例,是采用线性组合,在较大的查询中对每个单独子句应用提升。这是一种经过验证的、老式的技术,我们都熟悉并喜爱,但它可能会很棘手。它需要调整才能得到正确的结果,而且你可能永远也无法做到完美。

如果你使用 retrievers,你也可以使用 RRF。这更容易 - 你可以依赖一个算法,而不需要做任何调整。但也存在一些折衷 - 你对结果集的精细控制更少。RRF 不考虑 BM25 的提升,因此如果你在业务规则上进行提升,可能无法立即获得想要的结果。

最终,你应该选择的方法取决于你的数据和你的用例。

调整词汇搜索相关性
一旦你创建了查询,为了提高相关性进行调整是一个难题,但你有几种可用的工具:

业务指标。从很多方面来说,这些是最重要的指标:用户是否点击了结果,在电子商务用例中,更好的是他们是否完成了购买?你的转化率是否在增加?用户是否花了相当多的时间阅读你网站上的内容?这些都是用户体验的衡量标准,但它们是通过分析收集的,它们是是否你的搜索提供了实际有用的结果的直接证明。对于像 RAG 这样的用例,结果是定制的、主观的,并且可能会发生变化,这可能是真正衡量你的搜索变化影响的唯一方法。
用户调查。为什么不问问用户他们认为结果好还是不好呢?你必须考虑一些因素,比如用户是否会提供真实的回答,但这是了解用户对你的搜索引擎的看法的好方法。
定量衡量相关性的方法,如 MAP 和 NDCG。这些指标需要判断列表,然后也可以用于学习排序。
然而,人们可能会陷入的最大陷阱是为一个或几个 “pet - 宠物” 查询进行调整:你或者你的老板输入的少数查询。你可以改变算法的所有内容,以获得该查询的最佳结果,但这可能会在下游产生连锁效应,因为现在你无意中已经搞乱了大部分其他查询。
 

语义搜索不会取代 BM25 搜索,而是对现有搜索技术的增强。 混合搜索解决了语义搜索固有的许多问题,并且在召回率和功能方面都是两全其美。 语义搜索确实在长尾查询和躯干查询中大放异彩。 查询规则和同义词等工具可以帮助提供最佳的搜索体验,同时释放开发人员宝贵的时间来专注于解决重要问题。

参考:Elasticsearch:介绍 kNN query,这是进行 kNN 搜索的专家方法_knnquery-CSDN博客

Elasticsearch:实用 BM25 - 第 2 部分:BM25 算法及其变量_bm25算法得到结果样式-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度學習筆記12-優化器對比(Tensorflow)

🍨 本文為🔗365天深度學習訓練營 中的學習紀錄博客🍖 原作者:K同学啊 | 接輔導、項目定制 一、我的環境 電腦系統:Windows 10 顯卡:NVIDIA Quadro P620 語言環境:Python 3.7.0 開發工具&…

白蚁监测装置:支持北斗定位

TH-BY2白蚁监测控制管理系统原理 采用白蚁喜欢吃的食物做诱饵,吸引白蚁取食,取食过程中触动报警装置。报警装置发出信号,通过物联网传输到监控系统,经过数据处理,监测结果呈现给用户。用户通知白蚁防治专业人员&#x…

部署远程控制台访问服务Rttys,第三部分服务端(安装Rttys)

安装服务端Rttys之前可选先在客户端安装rtty。服务端采用GO语言实现,前端界面采用vue实现。 CMAKE的安装和客户端RTTY的安装请参考前两篇文章: Linux远程连接程序工具选型 Webssh与Rtty 部署远程控制台访问服务Rttys,第一部分客户端&#…

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码 可封装APP,适合做猫狗宠物类的发信息发布,当然懂的修改一下,做其他信息发布也是可以的。 Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码

常用算法及参考算法 (1)累加 (2)累乘 (3)素数 (4)最大公约数 (5)最值问题 (6)迭代法

常用算法及参考算法 &#xff08;1&#xff09;累加 &#xff08;2&#xff09;累乘 &#xff08;3&#xff09;素数 &#xff08;4&#xff09;最大公约数 &#xff08;5&#xff09;最值问题 &#xff08;6&#xff09;迭代法 1. 累加 #include <stdio.h>int main() {…

怎么把网页上的接口信息导入postman

第一步 打开f12&#xff0c;右键选中需要的接口。选择copy-copy as cURL 第二步 打开postman&#xff0c;选择"Raw Text"&#xff0c; 把刚才复制的curl粘贴到空白位置&#xff0c;点击Continue - 最后的效果。导入的接口自带cookie&#xff0c;不用再输入cookie&a…

Cosmopolitan:一次构建,多平台原生运行的C语言库行!

Cosmopolitan&#xff1a;C语言的跨平台革命&#xff0c;无需虚拟机&#xff0c;直接运行于任何环境。- 精选真开源&#xff0c;释放新价值。 概览 Cosmopolitan是一个创新的C语言库&#xff0c;旨在实现C程序的"一次编写&#xff0c;多处运行"&#xff0c;类似于Ja…

【深度学习驱动流体力学】配置安装 OpenFOAM 及其所需的ThirdParty-10与QT5工具

本文以ThirdParty-10 为例,ThirdParty-10 是 OpenFOAM 软件包中的一个重要组件目录&#xff0c;包含了一系列外部的第三方库和工具&#xff0c;这些库和工具对于 OpenFOAM 的编译和运行至关重要。该目录提供了各种脚本和配置文件&#xff0c;用于简化这些第三方库的下载、编译和…

文生视频开源产品的一些调研(一)

笔者尝试AI视频生成的几个特点&#xff1a; 玄学prompt&#xff0c;每个视频的prompt可能也需要微调很多次&#xff0c;需要找到使用模型的最佳prompt词组合&#xff0c;不恰当的比喻&#xff0c;骑自行车&#xff0c;座位高度等都是人与车彼此熟悉玄学生成&#xff0c;因为需…

Ubuntu与RedHat Linux的不同

部署Ubuntu 安装在服务器上的系统一般追求极致的稳定&#xff0c;所以安装系统时为了避免潜在的问题&#xff0c;所以选的时候应该往后推选几个版本 首先因为现在使用的电脑是MacBook&#xff0c;还是最新的Mac所以在部署的时候要注意其安装的支持芯片架构&#xff08;最新的…

Gitlab SSH无法连接但是HTTP可以连接

项目场景&#xff1a; Gitlab在docker中布置好之后测试&#xff0c;发现SSH无法连接但是HTTP可以连接 提示&#xff1a;这是一个无效的源路径 问题描述 http可以识别为git项目&#xff0c;而ssh无法识别成git项目。 原因分析&#xff1a; 三种猜想 端口号被占用 尝试查看…

UE5开发游戏Tutorial

文章目录 PlayerStart 初始化设置默认 LevelBP_Character 初始化BP_Character 添加动画BP_Character 攻击BP_Enemy 初始化 以及 AI 运动Camera Collision 相机碰撞BP_Character 生命以及伤害Wave Spawner 波生成UI 初始化以及 Damage Screen指定位置随机生成添加声音环境 Envir…

Apache Doris 全新分区策略 Auto Partition 应用场景与功能详解 | Deep Dive系列

编辑&#xff1a;SelectDB 技术团队 在当今数据驱动的时代&#xff0c;如何高效、有序地管理数据库中的海量数据成为挑战。为了处理庞大的数据集&#xff0c;分布式数据库引入了类似分区和分桶策略&#xff0c;通过将数据按特定规则划分成较小的单位并分布到不同节点上&#x…

Azure创建虚拟机

Azure创建虚拟机 一、创建步骤(1)登录到Azure portal(2)启动新实例(3)填写必要信息选择系统镜像(4)选择实例类型(5)配置管理员帐户和入站端口规则(6) 磁盘:保持默认(7) 网络:保持默认(8) 管理:保持默认(9) Monitoring:Boot diagnostics选择Disable(10) 最后直接点击查看 + …

2024年第三届数据统计与分析竞赛(A题)数学建模完整思路+完整代码全解全析

本次A题主要涉及正态分布、数据处理、自然语言处理等知识点 问题一题目重述&#xff1a;根据附件中抖音用户的评论数据&#xff0c;对抖音 APP 的“评分”和“点赞数”进行数据统计与分析&#xff0c;并使用假设检验判断这两个指标的分布是否服从正态分布。 接下来对问题一进…

深度学习工具jupyter的new没有环境选项以及遇到的EnvironmentLocationNotFound:Not such a environment

jupyter安装使用 安装完Anaconda&#xff08;安装Anaconda具体请参考其他教程&#xff09;后&#xff0c;一般默认有安装jupyter打开 注意当前是base环境&#xff0c;后期使用jupyter需要切换环境 我们找到文件地址。用记事本打开 可以搜索&#xff1a;c.NotebookApp.noteb…

redis持久化方式—AOF

redis为什么需要持久化 redis是内存数据库&#xff0c;redis所有的数据都保存在内存中 如果此时pc关机或重启&#xff0c;那么内存中的用户数据岂不是丢失了&#xff1f;redis这么不安全吗&#xff1f; 作为数据库&#xff0c;保证数据的安全&#xff0c;持久是基本需求&…

RERCS系统开发实战案例-Part05 FPM Application的Feeder Class搜索组件的实施

1、通过事务码 SE24对Feeder Class实施 1&#xff09;接口页签的简单说明&#xff1a; ① IF_FPM_GUIBB&#xff1a;通用UI构建块&#xff0c;整个UIBB模块的基础接口&#xff1b; ② IF_FPM_GUIBB_SEARCH&#xff1a;通用搜索UI构建块&#xff0c;搜索组件UIBB的基础接口&…

操作系统入门 -- CPU调度算法

操作系统入门 – CPU调度算法 在了解完进程和线程的概念后&#xff0c;我们就需要了解当一个进程就绪后系统会进行怎样的资源分配并运行进程&#xff0c;因此我们就需要了解CPU的调度算法 1.CPU调度 1.1概念 CPU调度即按照某种算法将CPU资源分配给某个就绪的进程。 1.2调度…

外链是否会增加流量?

外链确实可以间接地帮助增加网站流量&#xff0c;不过要了解的是这不是直接影响&#xff0c;首先&#xff0c;外链主要是提升你的网站在搜索引擎中的整体权重。简单地说&#xff0c;当你的网站被很多其他的网站通过dofollow链接指向时&#xff0c;搜索引擎会认为你的网站内容质…