改进 Elastic Stack 中的信息检索:引入 Elastic Learned Sparse Encoder,我们的新检索模型

news2024/11/27 22:44:38

作者:Thomas Veasey,Quentin Herreros

 

在本博客中,我们讨论了我们一直在使用预先训练的语言模型增强 Elastic® 开箱即用检索功能所做的工作。

在本系列的上一篇博客文章中,我们讨论了在零样本设置中应用密集模型进行检索的一些挑战。 这是众所周知的,BEIR 基准测试也强调了这一点,该基准测试汇集了不同的检索任务,作为人们对应用于不可见数据集的模型所期望的性能的代理。 零样本设置中的良好检索正是我们想要实现的,即一键式体验,允许使用预先训练的模型搜索文本字段。

这项新功能适合 Elasticsearch _search 端点,就像另一个查询子句,即 text_expansion 查询。 这很有吸引力,因为它允许搜索工程师继续使用 Elasticsearch® 已经提供的所有工具来调整查询。 此外,为了真正实现一键式体验,我们将其与新的 Elasticsearch 相关性引擎集成。 然而,本博客不是专注于集成,而是深入研究我们选择的模型架构以及我们为训练它所做的工作。

在这个项目开始时我们还有另一个目标。 自然语言处理(NLP)领域正在快速发展,新的架构和训练方法正在迅速引入。 虽然我们的一些用户将掌握最新的发展并希望完全控制他们部署的模型,但其他用户只是想使用高质量的搜索产品。 通过开发自己的训练管道,我们拥有了一个用于实施和评估最新想法的平台,例如新的检索相关预训练任务或更有效的 distillation 任务,并将最好的想法提供给我们的用户。

最后,值得一提的是,我们认为此功能是对 Elastic Stack 中现有模型部署和向量搜索功能的补充,而这些功能是那些更自定义的用例(例如跨模式检索)所需要的。

测试结果

在查看架构的一些细节以及我们如何训练我们的模型(Elastic Learned Sparse Encoder)之前,回顾一下我们得到的结果是很有趣的,因为最终布丁的证明在于吃。

正如我们之前讨论的,我们使用 BEIR 的子集来评估我们的性能。 虽然这绝不是完美的,并且不一定代表模型在你自己的数据上的行为方式,但我们至少发现在此基准上做出重大改进具有挑战性。 因此,我们相信我们在这方面取得的改进会转化为模型的真正改进。 由于基准测试的绝对性能数据本身并没有特别丰富的信息,因此很高兴能够与其他强大的基准进行比较,我们将在下面进行比较。

下表显示了 Elastic Learned Sparse Encoder 与带有英语分析器的 Elasticsearch BM25 的性能比较,按我们评估的 12 个数据集细分。 我们取得了 10 胜 1 平 1 负的成绩,NDCG@10 的平均进步为 17%。

NDCG@10 用于 BM25 和 Elastic Learned Sparse Encoder 的 BEIR 数据集(上面称为“ELSER”,注意数字值越高越好)

在下表中,我们将我们的平均表现与其他一些强基线进行了比较。 Vespa 结果基于 BM25 的线性组合及其 ColBERT 实现(如此处报告),Instructor 结果来自本文,SPLADEv2 结果取自本文,OpenAI 结果报告此处。 请注意,我们已将 OpenAI 结果分开,因为它们使用 BEIR 套件的不同子集。 具体来说,他们对 ArguAna、Climate FEVER、DBPedia、FEVER、FiQA、HotpotQA、NFCorpus、QuoraRetrieval、SciFact、TREC COVID 和 Touche 进行平均。 如果你点击该链接,您会发现他们还会报告以百分比表示的 NDCG@10。 我们建议读者访问上面的链接以获取有关这些方法的更多信息。

BEIR 数据集与其他数据集的平均 NDCG@10 各种高质量基线(越高越好)。 注意:OpenAI 选择了不同的子集,我们单独报告了该集的结果。

 

最后,我们注意到,人们广泛观察到,统计(BM25)和基于模型的检索或混合搜索的集成往往在零样本设置中表现优于任一方法。 在 8.8 中,Elastic 已经允许通过线性增强对 text_expansion 执行此操作,如果你校准数据集,则效果很好。 我们还在研究倒数排序融合(RRF),它在没有校准的情况下表现良好。 请继续关注本系列的下一篇博客,其中将讨论混合搜索。

在了解了我们的模型的表现之后,我们接下来讨论它的架构以及它如何训练的一些方面。

什么是学习稀疏模型以及它们为什么有吸引力?

我们在之前的博客文章中表明,虽然经过微调非常有效,但密集检索在零样本设置中往往表现不佳。 相比之下,跨编码器架构不能很好地扩展检索,但它倾向于学习强大的查询和文档表示,并且在大多数文本上都能很好地工作。 有人认为,造成这种差异的部分原因是查询和文档仅通过相对较低维度的向量 “点积(dot product)” 进行交互的瓶颈。 基于这一观察,最近提出了一些模型架构来尝试减少这一瓶颈,它们是 ColBERT 和 SPLADE。

从我们的角度来看,SPLADE 还有一些额外的优势:

  1. 与 ColBERT 相比,它的存储效率极高。 事实上,我们发现文档段落平均扩展到大约 100 个标记,并且我们看到与正常文本索引的大小大致相同。
  2. 有一些注意事项,检索可以使用倒排索引,我们在 Lucene 中已经有非常成熟的实现。 与人工神经网络相比,它们对内存的使用效率非常高。
  3. 它在训练时提供自然控制,使我们能够以检索质量换取检索延迟。 特别是,我们下面讨论的 FLOPS 正则化器允许人们为预期恢复成本的损失添加一项。 我们计划在迈向 GA 时利用这一点。

与密集检索相比,最后一个明显的优势是 SPLADE 允许人们通过一种简单且计算高效的路线来突出显示生成匹配的单词。 这简化了长文档中相关段落的显示,并帮助用户更好地了解检索器的工作原理。 总而言之,我们认为这些为我们首次发布此功能提供了采用 SPLADE 架构的令人信服的案例。

关于这个架构有很多很好的详细描述 —— 如果你有兴趣深入研究,例如,这是创建模型的团队写的一篇很好的文章。 简而言之,这个想法不是使用分布式表示,比如平均 BERT 标记输出嵌入,而是使用标记逻辑或标记预测的对数概率来进行屏蔽词预测。

当语言模型用于预测屏蔽词时,它们通过预测词汇表标记的概率分布来实现这一点。 WordPiece 的 BERT 词汇表包含许多常见的真实单词,例如 cat、house 等。 它还包含常见的词尾 —— 比如 ##ing(## 只是表示它是延续)。 由于单词不能任意交换,因此对于任何给定的掩码位置将预测相对较少的标记。 SPLADE 将通过屏蔽文本中每个单词最强烈预测的标记作为表示一段文本的起点。 如前所述,这是该文本的自然解缠或稀疏表示。

 

将单词预测的这些标记概率视为粗略地捕获上下文同义词是合理的。 这导致人们将学习到的稀疏表示(例如 SPLADE)视为接近文本自动同义词扩展的东西,我们在该模型的多个在线解释中看到了这一点。

我们认为,这往好了说是过于简单化,往坏了说是误导。 SPLADE 以微调一段文本的最大 token logits 为起点,但随后会训练相关的预测任务,该任务至关重要地考虑了查询和文档中所有共享 token 之间的交互。 这个过程在某种程度上重新缠结了标记,这些标记开始表现得更像向量表示的组件(尽管在非常高维的向量空间中)。

我们在开展这个项目时对此进行了一些探索。 当我们尝试在事后扩展中删除低分和明显不相关的标记时,我们发现它降低了基准套件中的所有质量指标,包括精度(!)。 如果它们的行为更像分布式向量表示,则可以解释这一点,其中将各个组件归零显然是无意义的。 我们还观察到,我们可以简单地随机删除 BERT 的大部分词汇,并且仍然训练高效的模型,如下图所示。 在这种情况下,必须重新调整部分词汇的用途,以弥补缺失的单词。

具有不同词汇量的学生模型的边际 MSE 验证损失

最后,我们注意到,与规模确实非常重要的生成任务不同,检索并没有明显受益于拥有庞大的模型。 我们在结果部分看到,与一些较大的生成模型中的数亿甚至数十亿参数相比,这种方法仅用 100M 参数就能实现近乎最先进的性能。 典型的搜索应用程序对查询延迟和吞吐量有相当严格的要求,因此这是一个真正的优势。

探索训练设计空间

在我们的第一篇博客中,我们介绍了有关训练密集检索模型的一些想法。 实际上,这是一个多阶段过程,通常会选择一个已经经过预训练的模型。 此预训练任务对于在特定下游任务上获得最佳结果非常重要。 我们不会进一步讨论这个问题,因为迄今为止这还不是我们的重点,但请注意,像许多当前有效的检索模型一样,我们从  co-condenser pre-trained model 开始。

设计训练管道时,有许多潜在的途径可供探索。 我们探索了很多,可以说,我们发现对基准进行持续改进具有挑战性。 许多在纸面上看起来很有希望的想法并没有带来令人信服的改进。 为了避免这篇博客变得太长,我们首先快速概述训练任务的关键要素,并重点介绍我们引入的一项新颖性,它提供了最显着的改进。 独立于具体因素,我们还对 FLOPS 正则化的作用进行了一些定性和定量观察,我们将在最后讨论。

在训练检索模型时,有两种常见的范式:对比方法和蒸馏方法。 我们采用蒸馏方法是因为这在本文中被证明对于训练 SPLADE 非常有效。 蒸馏方法与常见范式略有不同,后者将大型模型缩小为小型但几乎同样准确的 “副本”。 相反,这个想法是提取交叉编码器架构中存在的排名信息。 这提出了一个小小的技术挑战:由于表示不同,因此目前还不清楚应该如何通过正在训练的模型来模仿交叉编码器的行为。 我们使用的标准思想是用三元组(query、relevant docuemnt、irrelevent document)的形式呈现两个模型。 教师模型(teacher model)计算分数差,即 score(query, relevant document) − score(query, irrelevant document),我们训练学生模型(student model)使用 MSE 重现该分数差,以惩罚其所犯的错误。

让我们思考一下这个过程的作用,因为它激发了我们希望讨论的训练细节。 如果我们回想起使用 SPLADE 架构的查询和文档之间的交互是使用每个标记的非负权重的两个稀疏向量之间的点积来计算的,那么我们可以将此操作视为想要增加查询和得分最高的文档权重向量。 将此视为类似于将两个文档的权重向量跨越的平面中的查询 “旋转” 到最相关的一个,这不是 100% 准确,但不会产生误导。 在许多批次中,此过程逐渐调整权重向量的起始位置,以便查询和文档之间的距离捕获教师模型提供的相关性分数。

这导致了对复制教师分数的可行性的观察。 在正常的蒸馏中,我们知道只要有足够的能力,学生就能够将训练损失减少到零。 跨编码器蒸馏的情况并非如此,因为学生分数受到其权重向量上的点积引起的度量空间属性的约束。 交叉编码器没有这样的约束。 对于特定的训练查询 q1 和 q2 以及文档 d1 和 d2,我们很可能必须同时安排 q1 接近 d1 和 d2,以及安排 q2 接近 d1 但远离 d2。 这不一定是可能的,并且由于我们在分数中对 MSE 进行惩罚,因此一个效果是按照我们可以实现的最小余量对与这些查询和文档相关的训练三元组进行任意重新加权。

我们在训练模型时得到的观察之一是老师远非绝对正确。 我们最初通过手动调查被分配异常低分的查询相关文档对来观察到这一点。 在此过程中,我们客观地发现了遗漏的 query - document 对。 除了评分过程中的人工干预之外,我们还决定探索引入更好的老师。

根据文献,我们使用 SBERT 系列的 MiniLM L-6 作为我们的初始老师。 虽然这显示了在多种环境下的强劲表现,但根据他们的排名质量,有更好的教师。 一个例子是基于大型生成模型的排名器:monot5 3b。 下图中,我们比较了这两个模型的 query - document 得分对分布。monot5 3b 分布显然不太均匀,我们发现当我们尝试使用其原始分数训练学生模型时,性能饱和度明显低于使用 MiniLM L-6 作为老师的情况。 和以前一样,我们假设这归因于在零附近峰值中的许多重要分数差异,训练担心而不是与长下尾相关的无法解决的问题而迷失。

对于来自 NQ 数据集的查询文档对的随机样本,Monot5 3b 和 MiniLM L-6 分数分布在匹配范围内。 注意:X 轴不显示任一模型返回的实际分数。

 

很明显,所有排名者在其分数的单调变换方面都具有相同的质量。 具体来说,只要 f 是单调递增函数,我们使用 Score(query, document) 还是 f(score(query, document)) 都没有关系; 任何排名质量衡量标准都是相同的。 然而,并非所有这些职能都是同等有效的教师。 我们利用这一事实来平滑 monot5 3b 分数的分布,突然间我们的学生模型经过训练并开始击败之前的最佳模型。 最后,我们使用了两位老师的加权合奏。

在结束本节之前,我们想简单提一下 FLOPS 正则化器。 这是改进的 SPLADE v2 训练过程的关键要素。 本文提出了一种惩罚与倒排索引检索的计算成本直接相关的指标的方法。 特别是,它鼓励根据对倒排索引检索成本的影响,从查询和文档表示中删除那些提供很少排名信息的标记。 我们有三个观察结果:

  1. 我们的第一个观察结果是,当正则化器仍在预热时,绝大多数 token 实际上已被丢弃。 在我们的训练方案中,正则化器对前 50,000 个批次使用二次预热。 这意味着在前 10,000 个批次中,它不超过其最终值的 1/25 th,而且我们确实看到,此时分数裕度中 MSE 对损失的贡献比正则化损失大几个数量级。 然而,在此期间,训练数据激活的每批查询和文档标记的数量分别从平均 4k 和 14k 左右下降到 50 和 300 左右。 事实上,99% 的 token 修剪都发生在这个阶段,并且似乎很大程度上是由删除实际上损害排名性能的 token 驱动的。
  2. 我们的第二个观察结果是,我们发现它有助于检索模型的泛化性能。 减少正则化的数量并替换导致更多稀疏性的正则化器(例如绝对权重值的总和),都会降低我们基准测试的平均排名性能。
  3. 我们的最终观察结果是,较大批次和多样化批次都会对检索质量产生积极影响。

既然它的主要目的是优化召回成本,那么为什么会这样呢? FLOPS 正则化器定义如下:它首先对所有查询中的每个标记的权重进行平均,并分别对其包含的文档进行平均,然后将这些平均权重的平方相加。 如果我们认为该批次通常包含一组不同的查询和文档,那么这就像一种惩罚,鼓励类似的措施停止单词删除。 针对许多不同查询和文档出现的 token 将主导损失,因为很少激活的 token 的贡献除以批量大小的平方。 我们假设这实际上有助于模型找到更好的检索表示。 从这个角度来看,正则化项只能观察批次中查询和文档的 token 权重,这一事实是不可取的。 这是我们想重新审视的一个领域。

结论

我们简要概述了模型选择、其基本原理以及我们在新的 text_expansion 查询的技术预览中发布的功能背后的训练过程的某些方面,以及与新的 Elasticsearch 相关性引擎的集成。 迄今为止,我们专注于零样本设置中的检索质量,并在各种强大的基线上展示了良好的结果。 随着我们向 GA 迈进,我们计划在该模型的实施方面做更多的工作,特别是围绕提高推理和检索性能。

请继续关注本系列的下一篇博客文章,我们将在继续探索使用 Elasticsearch 的令人兴奋的新检索方法的同时,研究使用混合检索来组合各种检索方法。

Improving information retrieval in the Elastic Stack: Introducing Elastic Learned Sparse Encoder, our new retrieval model | Elastic Blog

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

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

相关文章

全网最细,接口自动化测试hook机制使用详细,进阶高级...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 requests 库只支持…

Sa-Token,一款更加轻量的权限认证框架

今天给大家介绍一个轻量级 Java 权限认证框架,我们之前一直采用最多的鉴权框架是OAuth2.0或者SpringSecurity,但是两者的配置都相当复杂,学习成本也非常高,所以我一直在试图寻找更好的解决办法,这几天在搭建权限体系平…

密码学学习笔记(五):Hash Functions - 哈希函数1

简介 什么是密码学中的哈希函数? 哈希函数是一种快速算法,它接受任何长度的输入,并产生一个固定长度的随机输出,称为摘要(digest),比如: MD4, MD5: 128-bit output (broken) •SHA-1: 160-bit output (b…

Infinite Zoom 丝滑循环小视频生成方法

使用Infinite Zoom插件在Stable Diffusion中可以制作无限缩放效果视频的过程。 文章目录 插件安装插件功能Main选项卡Video选项卡OutpaintPost process 插件使用 插件安装 在Stable-Diffusion-webui安装Infinite Zoom插件。启动Stable-Diffusion-webui,选择扩展-从…

使用css的:before属性在文字前加短竖线

有时候我们需要在文字或者标题前加个短竖线&#xff0c;有的人会使用 border 来模拟一个竖线&#xff0c;其实大可不必&#xff0c;我们可以利用元素的 :before 属性来实现&#xff0c;效果如下&#xff1a; 具体的代码如下&#xff0c; HTML&#xff1a; <span class&quo…

【计算机网络】第 1 课 - 数据的三种交换方式

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、电路交换 3、分组交换 4、三种交换方式的对比 4.1、电路交换优点 4.2、电路交换缺点 4.3、报文交换优点 4.4、…

【抽象拓扑排序】ABC216 D

D - Pair of Balls (atcoder.jp) 题意&#xff1a; 有2*n个球&#xff0c;每个球涂n种颜色&#xff0c;每种颜色恰好涂两个球&#xff0c;把这些球放进m个栈里&#xff0c;每次操作可以弹出两个相同颜色的球&#xff0c;问是否存在方案使得将所有栈清空 思路&#xff1a; 注…

Day44——动态规划part6

完全背包 private static void testCompletePack(){int[] weight {1, 3, 4};int[] value {15, 20, 30};int bagWeight 4;int[] dp new int[bagWeight 1];for (int i 0; i < weight.length; i){ // 遍历物品for (int j weight[i]; j < bagWeight; j){ // 遍历背包…

2023.07.06 homework

1&#xff09;止水夹打开&#xff0c;连通器相通 2&#xff09;左侧水位高11cm 的水位下降 y cm 3&#xff09;右侧水位低 4cm 的水位上涨 x cm 4&#xff09;最终两边水位相等保持一个平面上 11cm - y 4cm x 5&#xff09;左侧的水下降的体积跑哪里去了&#xff0c;填到…

flask和Vue3的前后端数据传输

&#xff08;一&#xff09;基于flask&#xff0c;构建一个后端 后端就采用flask的一般构建方法&#xff0c;然后用 flask-restful 构建一个接口&#xff0c;接口返回为json数据。 datas [{id: 1, name: xag, 年龄: 18}, {id: 2, name: xingag, age: 19}]class UserView(Res…

基于单片机的智能太阳能手机充电器的设计与实现

功能介绍 以STM32/51单片机作为主控系统&#xff1b;LCD1602液晶显示当前电压值&#xff1b;太阳能电池板采集当前光照转换为电能&#xff0c;然后TP4056锂电池充放电模块给锂电池进行充电&#xff0c;充完后自动断电&#xff0c;防过充&#xff1b;通过CE8301模块对锂电池电压…

3D空间的旋转的各种等价形式

旋转矩阵 欧拉轴和角度&#xff08;旋转矢量&#xff09; 欧拉旋转 四元数

如何部署LVS + keepalived 负载均衡高可用集群

目录 一、LVS架构 概念 L4和L7负载均衡的区别 keepalive故障自动切换 抢占与非抢占 二、keepalived管理LVS负载均衡器 LVS集中节点的健康检查 三、部署LVS keeplived 高可用集群 第一步 关闭防火墙和安全机制 第二步 安装工具 第三步 手动配置模块 第四步 编辑策略…

解决OpenJDK 64-Bit Server VM warning

解决OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 问题解决关闭Xshare关闭提示&#xff08;如果你使用的是IDEA的话&#xff09; 问题 在写spring boot项目调试的时候&#xff0c;发…

超級SEO助手,如何批量发布文章?

超級SEO助手,如何批量发布文章&#xff1f; 目前超级SEO助手产品已经正式上线&#xff0c;但是还是有很多同学不会自动化发布文章&#xff0c;所以今天我就详细讲解下整个流程。 在发布文章之前首先确认你已经接入了对应的接口渠道&#xff0c;比如Wordpress、DeDeCMS、Z-Blog、…

FlinkCDC第三部分-同步mysql到mysql,ctrl就完事~

本文介绍了不同源单表-单表同步&#xff0c;不同源多表-单表同步。 Flink版本&#xff1a;1.16 环境&#xff1a;Linux CentOS 7.0、jdk1.8 基础文件&#xff1a;flink-1.16.2-bin-scala_2.12.tgz、flink-connector-jdbc-3.0.0-1.16.jar、flink-sql-connector-mysql-cdc-2.3…

手机也能做3D建模人物,你知道吗?

3D建模人物是当今设计界越来越流行的一个领域。3D建模人物可以指的是使用3D技术来建立和表现各种类型的人物模型。无论是在游戏设计、电影特效还是虚拟现实等领域&#xff0c;3D建模人物都扮演着重要的角色。 与传统的手工绘图相比&#xff0c;现代设计师可以使用各种3D建模软…

全网最细,Fiddler抓包实战教程-辅助接口测试(三)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 AutoResponder 请…

计算机丢失msvcr110.dll解决办法,那种更加简单

"msvcr110.dll" 是一个动态链接库文件&#xff0c;用于支持 Microsoft Visual C 运行时库&#xff08;Runtime Library&#xff09;版本 11.0。它包含了在 Visual C 程序中使用的函数和变量。当一个程序编译完成后&#xff0c;它仍然需要一些运行时库来在操作系统上运…

LLM模型中英文评测基准

文章目录 中文评测基准C-EvalGaokaoAGIEvalPromptCBLUE 英文评测基准MMLUOpen LLM Leaderboard 中文评测基准 Awesome-Chinese-LLM&#xff1a;https://github.com/HqWu-HITCS/Awesome-Chinese-LLM 该项目收集和梳理中文LLM相关的开源模型、应用、数据集及教程等资料&#xff…