ES 8.14 向量搜索优化

参考: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.rhkb.cn/news/357942.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础学习-数组

目录 数组定义 注意点: 地址值是数组在内存中实际存储的地址。 案例遍历:遍历数组得到每一个元素,求数组里面所有数据和 案例:定义数组,遍历能被3整除的数字 案例:遍历一个数组,奇数将当前…

docker搭建mongo分片集群

1、mongo分片集群 MongoDB分片集群是一种可扩展的数据库架构,用于处理大量数据和高并发访问。它将数据分成多个分片,并将这些分片分布在多个服务器上,从而实现数据的平衡存储和并行处理 。 通过使用MongoDB的分片集,可以实现数据…

艺体培训机构管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,教师管理,学员管理,活动管理,课程管理,选课信息管理 前台账户功能包括:系统首页,个人中心,论…

Spring Boot+vue社区养老系统(智慧养老平台)

使用技术: springbootvueMySQL 主要功能: 管理员 登录个人资料密码管理, 用户管理:床位类型管理,床位管理,护工管理,老人管理 咨询登记管理,预约登记管理,老人健康信 息管理,费用管理等功能.护工角色包含以下功能: 护工登录,个…

数据库精选题(二)(引言+关系代数)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据库 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 常见概念 一、什么是数据库&#xf…

查找和排序

目录 一、查找 1.1查找的基本概念 1.2顺序查找 1.3折半查找(二分查找) 1.4散列表的查找 1.4.1基本概念 1.4.2散列函数的构造方法 1.4.3解决冲突的方法 二、排序 2.1排序的基本概念 2.2插入排序 2.2.1直接插入排序: 2.2.2希尔排序…

C++回溯算法(2)

棋盘问题 #include<bits/stdc.h> using namespace std; void func(int,int); bool tf(int,int); void c(); int n,k; char a[110][110]; int cnt20; int main() {cin>>n>>k;for(int i0;i<n;i){for(int j0;j<n;j){cin>>a[i][j];}}func(0,0);cout…

北京BJ90升级新款迈巴赫大连屏四座头等舱行政四座马鞍

北京BJ90升级奔驰迈巴赫头等舱行政四座大联屏的内饰效果会非常出色&#xff0c;将为车辆带来更豪华、高端的内饰氛围。以下是升级后可能的效果&#xff1a; • 科技感提升&#xff1a;奔驰的中控系统一直以来都以其先进的科技和用户友好的界面而闻名。升级后&#xff0c;北京B…

EndNote 21 for Mac v21.3 文献管理软件安装

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行安装EndNote212、升级 三、运行1、打开软件&#xff0c;测试 安装完成&#xff01;&#xff01;&#xff01;四、注意事项 效果 一、下载软件 下载软件 链接&#xff1a;http://www.macfxb.cn 二、开始安装 1、双击…

深信服科技:2023网络钓鱼趋势分析报告

随着互联网的快速发展和广泛应用&#xff0c;网络钓鱼活动带来的安全隐患愈演愈烈。因应威胁发展&#xff0c;我 们编撰了此份分析报告&#xff0c;旨在全面了解其发展态势&#xff0c;并提醒相关部门、企业和公众加强防范。 在本报告中&#xff0c;我们将详细梳理网络钓鱼的近…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 07:编码中的假象

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

USB - USB在消费领域的应用

Switching in USB Consumer Applications 通用串行总线&#xff08;USB&#xff09;已成为满足终端设备之间日益增长的快速数据传输需求的主流接口--例如&#xff0c;在个人电脑和便携式设备&#xff08;如手机、数码相机和个人媒体播放器&#xff09;之间下载和上传数据。 The…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-37微调

37微调 import os import torch import torchvision from torch import nn import liliPytorch as lp import matplotlib.pyplot as plt from d2l import torch as d2l# 获取数据集 d2l.DATA_HUB[hotdog] (d2l.DATA_URL hotdog.zip,fba480ffa8aa7e0febbb511d181409f899b9baa5…

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadStringOperationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查字符串值合法性 确认字符串格式 优化代码逻辑 增加…

pcl::PointXYZRGBA造成点云无法显示

如果pcd文件没有rgba信息&#xff0c;使用pcl::PointXYZRGBA类型打开会提示以下信息&#xff1a; Failed to find match for field rgba另外&#xff0c;显示出来的点云是黑色&#xff0c;如果使用默认背景色为黑色&#xff0c;就无法显示点云了。 如果设置其它背景色&#xf…

多分类情绪识别模型训练及基于ChatGLM4-9B的评论机器人拓展

你的下一个微博罗伯特何必是罗伯特 这是一篇我在使用开源数据集(Twitter Emotion Dataset (kaggle.com))进行情绪识别的分类模型训练及将模型文件介入对话模型进行应用的过程记录。当通过训练得到了可以输入新样本预测的模型文件后&#xff0c;想到了或许可以使用模型文件对新样…

LLM漫谈(七)| 使用PyTorch从零构建LLM

LLM是最流行AI聊天机器人的核心基础&#xff0c;比如ChatGPT、Gemini、MetaAI、Mistral AI等。在每一个LLM&#xff0c;有个核心架构&#xff1a;Transformer。我们将首先根据著名的论文“Attention is all you need”-https://arxiv.org/abs/1706.03762 来构建Transformer架构…

三国之家网站的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;论坛管理&#xff0c;公告管理&#xff0c;三国视频管理&#xff0c;基础数据管理&#xff0c;三国图文管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#…

Inception_V2_V3

Inception_V2_V3 CNN卷积网络的发展史 1. LetNet5(1998) 2. AlexNet(2012) 3. ZFNet(2013) 4. VGGNet(2014) 5. GoogLeNet(2014) 6. ResNet(2015) 7. DenseNet(2017) 8. EfficientNet(2019) 9. Vision Transformers(2020) 10. 自适应卷积网络(2021) 上面列出了发展到现在CNN的…

Flume基础教程

Apache Flume教程 资料来源&#xff1a;Apache Flume - Introduction (tutorialspoint.com) Flume是一个标准的、简单的、健壮的、灵活的、可扩展的工具&#xff0c;用于将从各种数据生产者(web服务器)中所产生的数据抽取到Hadoop中。在本教程中&#xff0c;我们将使用简单的…