信息检索(43):SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking

SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking

  • 摘要
  • 1 引言
  • 2 相关工作
  • 3 方法
    • 3.1 SparTerm
    • 3.2 SPLADE:稀疏词汇和扩展模型
  • 4 实验
  • 5 结论


发布时间(2021)


标题:稀疏词汇 + 扩展模型

摘要

稀疏的优点:
1)术语精确匹配
2)倒排索引效率
两部分:
1、显式稀疏正则化:explicit sparsity regularization
2、术语权重的对数饱和效应:explicit sparsity regularization
在神经信息检索中,正在进行的研究旨在改进排名管道中的第一个检索器。学习密集嵌入以使用有效的近似最近邻方法进行检索已被证明效果很好。同时,人们对学习文档和查询的稀疏表示的兴趣日益浓厚,这些表示可以继承词袋模型的理想属性,例如术语的精确匹配和倒排索引的效率。在这项工作中,我们提出了一种新的第一阶段排名器,该排名器基于显式稀疏正则化和对术语权重的对数饱和效应,从而产生高度稀疏的表示和与最先进的密集和稀疏方法相比具有竞争力的结果。我们的方法很简单,在一个阶段进行端到端训练。我们还通过控制稀疏正则化的贡献来探索有效性和效率之间的权衡。

1 引言

BERT [7] 等大型预训练语言模型的发布震撼了自然语言处理和信息检索领域。这些模型表现出通过简单微调就能适应各种任务的强大能力。2019 年初,Nogueira 和 Cho [17] 在 MS MARCO 段落重排序任务中取得了领先优势,为基于 LM 的神经排序模型铺平了道路。由于严格的效率要求,这些模型最初被用作两阶段排序流程中的重排序器,其中第一阶段检索(或候选生成)是使用依赖于倒排索引的词袋模型(例如 BM25)进行的。
尽管 BOW 模型仍然是强大的基线 [27],但它们受到长期存在的词汇不匹配问题的困扰,即相关文档可能不包含查询中出现的术语。因此,有人尝试用学习的(神经)排序器替代标准 BOW 方法。 设计这样的模型在效率和可扩展性方面带来了一些挑战:因此需要一种可以离线完成大部分计算并且在线推理速度快的方法。使用近似最近邻搜索的密集检索已显示出令人印象深刻的结果 [8, 15, 26],但由于无法明确模拟术语匹配,因此仍然与 BOW 模型相结合。因此,最近人们对学习查询和文档的稀疏表示的兴趣日益浓厚 [1, 4, 19, 28, 29]。 通过这样做,模型可以继承 BOW 模型的理想属性,例如(可能潜在的)术语的精确匹配、倒排索引的效率和可解释性。此外,通过对隐式或显式(潜在的、语境化的)扩展机制进行建模(类似于 IR 中的标准扩展模型),这些模型可以减少词汇不匹配。
本文的贡献有三点:(1)我们在 SparTerm [1] 的基础上进行了改进,并表明对超参数进行轻微调整可以带来远超原始论文中报告结果的改进;(2)我们提出了基于对数激活和稀疏正则化的 SParse 词汇和数据扩展 (SPLADE) 模型。SPLADE 可执行有效的文档扩展 [1, 16],与 ANCE [26] 等密集模型的复杂训练流程相比,其结果具有竞争力;(3)最后,我们展示了如何控制稀疏正则化来影响效率(就浮点运算次数而言)和有效性之间的权衡。

2 相关工作

基于 BERT Siamese 模型 [22] 的密集检索已成为问答和 IR 中候选生成的标准方法 [8, 10, 12, 15, 25]。虽然这些模型的主干保持不变,但最近的研究强调了训练策略的关键方面,以获得最先进的结果,从改进的负采样 [8, 25] 到蒸馏 [11, 15]。 ColBERT [13] 更进一步:推迟的 token 级交互允许有效地将模型应用于第一阶段检索,受益于建模细粒度交互的有效性,但代价是存储每个(子)术语的嵌入 - 引发了人们对该方法对于大型集合的实际可扩展性的担忧。据我们所知,很少有研究讨论使用近似最近邻 (ANN) 搜索对 ​​IR 指标的影响 [2, 23]。由于 MS MARCO 集合的规模适中,结果通常通过精确的强力搜索来报告,因此无法表明有效计算成本
密集索引的替代方案是基于术语的索引。在标准 BOW 模型的基础上,Zamani 等人首次引入了 SNRM [28]:该模型通过对表示进行 ℓ1 正则化,将文档和查询嵌入到稀疏的高维潜在空间中。然而,SNRM 的有效性仍然有限,其效率也受到了质疑 [20]。最近,有人尝试将知识从预训练的 LM 转移到稀疏方法。 基于 BERT,DeepCT [4–6] 专注于在完整词汇空间中学习语境化术语权重——类似于 BOW 术语权重。然而,由于与文档相关的词汇保持不变,这种方法无法解决词汇不匹配的问题,正如使用查询扩展进行检索所承认的那样 [4]。这个问题的第一个解决方案是使用生成方法(如 doc2query [19] 和 docTTTTTquery [18])扩展文档,以预测文档的扩展词。 文档扩展会向文档中添加新术语(从而解决词汇不匹配问题),并重复现有术语,通过提升重要术语来隐式地重新加权。然而,这些方法受到训练方式(预测查询)的限制,这种方式本质上是间接的,限制了它们的进展。最近的研究(如 [1, 16, 29])选择了解决这个问题的第二种方法,即估计文档每个术语所隐含的词汇表每个术语的重要性,即计算文档或查询标记与词汇表中所有标记之间的交互矩阵。 接下来是一个聚合机制(对于 SparTerm [1] 大致是 sum,对于 EPIC [16] 和 SPARTA [29] 是 max),它允许计算词汇表每个术语、完整文档或查询的重要性权重。然而,EPIC 和 SPARTA(文档)表示在构造上不够稀疏——除非诉诸 top-𝑘 池化——与 SparTerm 相反,因此可以实现快速检索。此外,后者不包括(像 SNRM)显式稀疏正则化,这会阻碍其性能。我们的 SPLADE 模型依赖于这种正则化以及其他关键变化,从而提高了此类模型的效率和有效性。

3 方法

SparTerm:
1)对于词汇表中的每个词的权重都与query/doc进行运算
2)通过门控获得稀疏向量:门控有两种方式
  a)手动设置参数
  b)参数可学习
在本节中,我们首先详细描述 SparTerm 模型 [1],然后介绍我们的模型 SPLADE。

3.1 SparTerm

SparTerm 根据 Masked Language Model (MLM) 层的 logits 预测 BERT WordPiece 词汇表 (|𝑉 | = 30522) 中的术语重要性。更准确地说,让我们考虑一个输入查询或文档序列(WordPiece 标记化之后)𝑡 = (𝑡1, 𝑡2, …, 𝑡𝑁 ),以及其对应的 BERT 嵌入 (ℎ1, ℎ2, …, ℎ𝑁 )。 我们考虑标记 𝑗 (词汇表) 对于标记 𝑖 (输入序列) 的重要性 𝑤𝑖𝑗:
其中 𝑔𝑗 是后面描述的二进制掩码(门控)。上面的等式可以看作是查询/文档扩展的一种形式,如 [1, 16] 中所示,因为对于词汇表的每个标记,模型都会预测一个新的权重 𝑤𝑗 。SparTerm [1] 引入了两种稀疏化方案,可以关闭查询和文档表示中的大量维度,从而可以有效地从倒排索引中检索:
仅词汇是 BOW 掩蔽,即如果标记 𝑗 出现在 𝑡 中,则 𝑔𝑗 = 1,否则为 0;
损失函数:对比损失
局限性。
1)SparTerm 扩展感知门控有些复杂,
2)并且模型无法进行端到端训练:门控机制是事先学习的,并在使用 L𝑟𝑎𝑛𝑘 微调匹配模型时进行固定,
因此阻止模型学习排名任务的最佳稀疏化策略。此外,词汇和扩展感知两种策略的表现几乎一样好,这让人对扩展的实际好处产生质疑。

3.2 SPLADE:稀疏词汇和扩展模型

下面,我们建议对 SparTerm 模型进行细微但必要的改动,以大幅提高其性能。
模型。我们对公式 2 中的重要性估计进行了微小的改动,引入了对数饱和效应,这可以防止某些项占主导地位,并自然地确保表示中的稀疏性:
虽然直观地看,使用对数饱和可以防止某些项占主导地位——与 IR 和 log(tf) 模型中的公理方法相似 [9]——但隐含的稀疏性乍一看可能令人惊讶,但根据我们的实验,它获得了更好的实验结果,并且已经允许在没有任何正则化的情况下获得稀疏解。
排名损失。给定一个批次中的查询 𝑞𝑖、一个正文档 𝑑 + 𝑖、一个(硬)负文档 𝑑 − 𝑖(例如来自 BM25 采样)以及批次中的一组负文档(来自其他查询的正文档){𝑑 − 𝑖,𝑗 }𝑗,我们考虑来自 [8] 的排名损失,它可以解释为最大化文档 𝑑 + 𝑖 在文档 𝑑 + 𝑖 、𝑑− 𝑖 和 {𝑑 − 𝑖,𝑗 } 中相关的概率:

4 实验

我们在完整排名设置下,使用 MS MARCO 段落排名数据集 1 训练并评估了我们的模型。该数据集包含约 880 万段段落,以及数十万个带有浅层注释的训练查询(平均每个查询约 1.1 个相关段落)。开发集包含 6980 个带有相似标签的查询,而 TREC DL 2019 评估集为 43 个查询提供了来自人工评估员的细粒度注释 [3]。

5 结论

最近,基于 BERT 的密集检索已证明其在第一阶段检索中的优势,从而对传统稀疏模型的竞争力提出了质疑。在这项工作中,我们提出了 SPLADE,这是一种重新审视查询/文档扩展的稀疏模型。我们的方法依赖于批内负样本、对数激活和 FLOPS 正则化来学习有效且高效的稀疏表示。 SPLADE 是初始检索的一个有吸引力的候选者:它可以与最新的最先进的密集检索模型相媲美,其训练过程简单明了,其稀疏性/FLOPS 可以通过正则化明确控制,并且可以对倒排索引进行操作。 由于其简单性,SPLADE 为进一步改进这一研究领域奠定了坚实的基础。

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

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

相关文章

实现可扩展的电商返利平台:技术选型与挑战

实现可扩展的电商返利平台:技术选型与挑战 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在当今数字化和电商兴盛的时代,返利平台成为…

[程序员] 外企工作的英语重要性

作为一名程序员,英语的必备性是不可或缺,尤其是在一个外企! 因为在工作中,英语是非常重要的一门基础技术,所有的产品代码/第三方开源软件都是英语书写,包括代码逻辑,变量/函数/类定义&#xff…

Python酷库之旅-第三方库openpyxl(02)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…

C#程序的递归方法调用

一个方法可以自我调用。这就是所谓的 递归。下面的实例使用递归函数计算一个数的阶乘: using System;namespace CalculatorApplication {class NumberManipulator{public int factorial(int num){/* 局部变量定义 */int result;if (num 1){return 1;}else{result …

RabbitMQ实践——最大长度队列

大纲 抛弃消息创建最大长度队列绑定实验 转存死信创建死信队列创建可重写Routing key的最大长度队列创建绑定关系实验 在一些业务场景中,我们只需要保存最近的若干条消息,这个时候我们就可以使用“最大长度队列”来满足这个需求。该队列在收到消息后&…

Python打印奇偶数

1 问题 怎么通过键盘输入一个数字,若该数字位各个位上的数字和为奇数,则将该数各位数倒叙打印;若该数字各个位数之和为偶数,则直接打印该数字。 2 方法 (1)先输入一个数字,用int()函数将其取整 …

SpringCloud微服务框架的原理及应用详解(三)

本系列文章简介: 随着云计算、大数据和物联网等技术的飞速发展,企业应用系统的规模和复杂度不断增加,传统的单体架构已经难以满足快速迭代、高并发、高可用性等现代业务需求。在这样的背景下,微服务架构应运而生,成为了…

在Windows上用MinGW编译OpenCV项目运行全流程

一、准备软件 OpenCV源码CMake工具MinGW工具链(需要选用 posix 线程版本:原因见此) 二、操作步骤 官网提供了VC16构建版本的二进制包,但是没有给出GCC编译的版本。所以如果使用MinGW进行构建,那就只能从源码开始构建…

make与makefile

目录 一、make的默认目标文件与自动推导 二、不能连续make的原因 执行原理 touch .PHONY伪目标 make指令不回显 makefile多文件管理 简写依赖方法 三、回车与换行 四、缓冲区 一、make的默认目标文件与自动推导 假设这是一个makefile文件,make的时候默认生…

Java学习 - MySQL存储过程、函数和触发器练习实例

存储过程 存储过程是什么 存储过程是一组已经编译好的SQL语句存储过程优点有什么 安全 性能高 提高代码复用性创建存储过程的语法 DELIMITER $ # 不能加分号CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型) BEGIN存储过程语句块 END;$DELIMITER ;创建一个无参的存储…

K-means聚类算法详解与实战

一、引言 K-means聚类算法是一种无监督学习算法,旨在将数据点划分为K个不同的聚类或群组,使得同一聚类内的数据点尽可能相似,而不同聚类间的数据点尽可能不同。在图像处理、数据挖掘、客户细分等领域有着广泛的应用。本文将通过图文结合的方…

sizeof 和 strlen 比较

sizeof 和 strlen 在 C 语言中都是用于获取某种“大小”的,但它们之间有着显著的区别。 sizeof sizeof 是一个运算符,用于计算数据类型或对象在内存中的大小(以字节为单位)。它可以在编译时确定结果,因为它计算的是类…

AcWing 3358:放养但没有完全放养 ← 按位匹配

【题目来源】https://www.acwing.com/problem/content/3361/【题目描述】 一个鲜为人知的事实是,奶牛拥有自己的文字:「牛文」。牛文由 26 个字母 a 到 z 组成,但是当奶牛说牛文时,可能与我们所熟悉的 abcdefghijklmnopqrstuvwxyz…

Origin电源维修高压发生器GEXUS-3 GEXUS-15R-02U

GEXUS-3电源维修 Origin高压发生器维修 Origin电源维修 光电设备电源维修 Origin高压电源维修故障分析应注意两点: 故障分析检测和故障硬件更换,根据高压电源故障提示和工作表现初步判断故障的类型和哪些硬件出了问题,再根据初步判断缩小检测…

java实现持续集成

要使用Java实现Jenkins持续集成,你可以使用Jenkins的Java客户端库来执行一些常见的操作,例如创建任务,触发构建等。下面是一个简单的示例代码,展示了如何使用Java实现Jenkins持续集成: java import com.offbytwo.jenk…

了解Spring的BeanPostProcessor

了解Spring的BeanPostProcessor Spring框架提供了一种机制,允许在Spring容器实例化Bean之前和之后进行自定义的修改。这个机制就是BeanPostProcessor接口。BeanPostProcessor是Spring的核心接口之一,用于在Spring容器创建和初始化Bean的过程中进行干预和…

Java-拼接字符串数组(String.join()方法)

问题引入 刷算法题lc2288的时候遇见的一个小细节,记录一下,有兴趣的朋友可以做一下,练习一下哈哈~ 此题需要使用大家都比较熟悉的split方法将句子按照空格拆分为字符串数组。 然后再在数组中对每一个字符串操作,操作完成后要求…

【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)

【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结)1、业务说明2、接口开发2.1、预约看房管理2.1.1.保存或更新看房预约2.1.2. 查询个人预约…

【linux】shell脚本中设置字体颜色,背景颜色详细攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Nginx Proxy 代理测试

目录 https://blog.csdn.net/Lzcsfg/article/details/139781909 一. 实验准备 二. 配置反向代理 三. 配置二层代理 解释流程 一. 实验准备 关闭防火墙和selinux,准备三台同一网段的虚拟机 localhostRoucky_linux9.4192.168.226.20localhostRoucky_linux9.419…