RetroMAE论文阅读

news2024/11/17 12:34:11

1. Introduction

在NLP常用的预训练模型通常是由token级别的任务进行训练的,如MLM和Seq2Seq,但是密集检索任务更倾向于句子级别的表示,需要捕捉句子的信息和之间的关系,一般主流的策略是自对比学习(self-contrastive learning)和自动编码(auto-encoding)。

  • self-contrastive learning的效果会被数据增强的质量所限制,且需要大量的负样本,而auto-encoding不受制于这两个问题
  • auto-encoding的研究重点在于encoding-decoding workflow的设计,对数据要求不高,但是下面两个因素会影响基于自动编码方法的性能:重建任务必须对编码质量有足够的要求;预训练数据需要被充分利用

本文的作者针对上面的两个因素,提出了一种面向检索的基于自动编码的预训练模型–RetroMAE:

在这里插入图片描述

  • 全新的自动编码流程:输入句子被掩码两次,第一次的掩码结果输入到编码器生成句子嵌入,另一个掩码结果结合生成的句子嵌入,输入到解码器中,通过MLM恢复原始句子;
  • 非对称的结构:编码器是一个全尺寸的BERT,用来生成有区别的句子嵌入;解码器只有一个单层的transformer。Encoder部分是一个全尺寸的BERT(有12层以及768个隐藏维度),Decoder部分是一个单层的Transformer
  • 非对称的掩码率:编码器的输入掩码率为15%-30%;解码器的掩码率为50%-70%。

总的来说:输入的句子在进入Encoder之前先进行15%~30%的适度mask,经过Encoder之后生成Sentence embedding;输入的句子在进入Decoder之前先进行50%~70%的mask,然后与Sentence embedding一起通过Decoder还原Sentence

论文

2. RetroMAE模型的优势

  • 传统的自回归可能会在解码过程中注意前缀(与GPT的mask方式相似),且传统的MLM(Masked Language Model)只mask一个较小比例的输入token(15%)。而RetroMAE会mask掉大部分的decoding输入,且使用简单的单层transformer作为decoder,这样的话在重建输入时仅仅利用decoder的input就不够了,会促使encoder去捕捉输入的深层语义信息。
  • 确保了训练信号完全由input sentence生成,是由自己提出的enhanced decoding实现的

3. 实现细节

  • 选择[CLS] token的最后一个hidden state作为sentence embedding
  • 在Decoder阶段masked input直接和sentence embedding进行拼接
    • 式(1)是sentence embedding的生成,输入通过编码器生成embedding
    • 式(2)是将sentence embedding和masked input拼在一起,其中 e x i e_{xi} exi表示token x i x_i xi的嵌入, p i p_i pi表示位置嵌入
    • 式(3)是还原输入的过程,CE表示cross-entropy loss
    • 图C的M矩阵表示第i个token是由第 i i i行可见的上下文重建的(可见的是蓝色的点),比如第0个token是由第1个context重建的,第1个token是由第0个和第2个token决定的。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • Enhanced Decoding
    从(2)和(3)两个式子中可以看到交叉熵损失只能从被掩码的tokens中进行训练获得,而且,每次重建都是基于相同的上下文,即 H X d e c H_{X_{dec}} HXdec。作者认为满足下列条件可以进一步增强预训练的效果:

    • 在输入句子中获得更多的训练信号
    • 基于多样的上下文执行重建任务

    所以作者提出了通过双流自我注意力和特定位置注意力掩码的增强解码,具体来说,作者生成了两个输入流: H 1 H_1 H1(query)和 H 2 H_2 H2 (context),解码操作(图C):
    在这里插入图片描述

其中h_x是sentence embedding,e_x_i是token embedding(没有被掩码的token embedding),p_i是position embedding。然后作者引进了特定位置的注意力掩码矩阵M,自注意力计算如下:

在这里插入图片描述

在原始的注意力机制中,Q、K、V的计算都是同一输入,而作者计算Q时选用 H 1 H_1 H1作输入,计算K和V时用 H 2 H_2 H2作输入,这样就可以基于的是多样的上下文输入进行重建句子。然后输出的A和 H 1 H_1 H1进行残差连接被用来重建原始输入,通过以下目标函数进行优化:

在这里插入图片描述

最终的目标函数是编码器损失和解码器损失之和。
要知道每个token x i x_i xi是基于对矩阵M的第 i i i行可见的上下文进行重建的,所以根据下面的规则生成掩码矩阵:

在这里插入图片描述

当我们重建 x i x_i xi这个token时,需要找出不同的上下文,所以在这里进行了抽样,s指的是抽样的token的集合, x j ∈ s ( X ≠ i ) x_j\in s(X_{\ne i}) xjs(X=i)表示当 x j x_j xj在抽样的token里,或者当 i ≠ 0 i\ne 0 i=0 j = 0 j=0 j=0时,该位置在掩码矩阵中的值设为0,其它位置的值设为 − ∞ -\infty ,如图C所示。如此一来,模型可以获得更多的训练信号

  • 整体的RetroMAE算法如下所示:

在这里插入图片描述

4. Experiment

作者评估了由 RetroMAE 的预训练编码器生成的句子嵌入的检索性能,其中探讨了两个主要问题:

(1) 与通用预训练模型和面向检索的预训练模型相比,RetroMAE 对零样本和有监督的密集检索的影响。

(2)RetroMAE中四个技术因素的影响:增强解码、解码器大小、解码器掩码率和编码器掩码率。

main results:
  • 在BEIR基准上进行零样本密集检索性能对比
    在这里插入图片描述
  • 基于DPR微调方法的有监督评估结果
    在这里插入图片描述
  • 基于ANCE微调方法的有监督评估结果

在这里插入图片描述

  • 与同类方法的预训练模型 coCondenser的对比

在这里插入图片描述

  • 通过知识蒸馏方法的性能对比

在这里插入图片描述

消融实验

解码方法、解码器规模、解码器的掩码率和编码器的掩码率的影响:
在这里插入图片描述

可以看到不使用增强解码的性能明显比使用增强解码的性能要低;

虽然解码器的transformer的层数从1增加到3性能并没有下降多少,但是会产生严重的计算成本,所以结合准确率和计算成本,单层的transformer更适合解码器;

对于解码器的掩码率带来的影响,作者分了两个部分:一个是使用增强解码,另一部分未使用增强解码。可以看到随着掩码率的提升,最终的性能也会跟着提升,使用增强解码的性能在掩码率为0.5时到达峰值,未使用增强解码的一组的性能在掩码率为0.7时达到峰值;

对于编码器的掩码率,作者发现调整为30%时性能会提升,但是增加到90%时性能会急剧下降,这表示适当提高掩码率有利于增强模型的学习能力,但是过高的掩码率会导致原本的语义信息的缺失。

5. conclusion

作者提出了 RetroMAE,这是一种新的掩码自动编码框架,用于面向检索的预训练语言模型:输入句子被随机的掩码,然后输入到编码器和解码器,然后句子嵌入与解码器的掩码输入进行结合以重建原始输入。作者引入了非对称模型结构(全尺寸编码器和单层解码器)和非对称掩码率(编码器的中等焱玛利率和解码器的高掩码率),这使得重建要求足够高。作者还提出了增强解码,充分利用了预训练数据。可以看到作者提出的模型在零样本密集检索以及有监督的密集检索性能都有所提升。

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

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

相关文章

【图像分类】【深度学习】【Pytorch版本】 GoogLeNet(InceptionV2)模型算法详解

【图像分类】【深度学习】【Pytorch版本】 GoogLeNet(InceptionV2)模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】 GoogLeNet(InceptionV2)模型算法详解前言GoogLeNet(InceptionV2)讲解Batch Normalization公式InceptionV2结构InceptionV2特殊结构GoogLeNet(I…

Spring Cloud学习(五)【Feign 远程调用】

文章目录 RestTemplate方式调用存在的问题Feign的介绍定义和使用Feign客户端Feign 的自定义配置Feign 性能优化Feign 的最佳实践 RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差&am…

【架构】后端项目经典分层架构介绍

文章目录 前言分层架构项目实践示例项目结构 其他知识 前言 开发后端项目时,我们最常见的一种架构模式就是分层架构 。 所谓的分层架构,就是把系统自上而下分为多个不同的层,每一层都有特定的功能和职责,且只和自己的直接上层与…

order by的注入与Insert ,update和delete注入

order by的注入 Insert ,update和delete注入

【计算机毕业设计】基于微信小程序实现校园综合服务平台-芒果校园(源码+路演ppt)

项目场景: 这个是之前在准备比赛做的项目,本来拿来去参加的,后面因为一些原因,这个项目被搁置了,今天打开源码 好在还在,但当我打开的时候,接口发生了一些变化,例如 getLocation();…

最新大麦订单生成器 大麦订单图一键生成

1、8.6全新版 本次更新了四种订单模板生成 多模板自由切换 2、在软件中输入生成的信息,这里输入的是商品信息,选择生成的商品图片,最后生成即可 新版大麦订单生成 四种模板图样式展示 这个样式图就是在大麦生成完的一个订单截图&#xff…

YOLOv8-seg改进:复现HIC-YOLOv5,HIC-YOLOv8-seg助力小目标分割

🚀🚀🚀本文改进:HIC-YOLOv8-seg:1)添加一个针对小物体的额外预测头,以提供更高分辨率的特征图2)在backbone和neck之间采用involution block来增加特征图的通道信息;3)在主干网末端加入 CBAM 的注意力机制; 🚀🚀🚀HIC-YOLOv8-seg小目标分割检测&复杂场景…

顺序图——画法详解

百度百科的定义: 顺序图是将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时&…

【Excel】补全单元格值变成固定长度

我们知道股票代码都为6位数字,但深圳中小板代码前面以0开头,数字格式时前面的0会自动省略,现在需要在Excel表格补全它。如下图: 这时我们需要用到特殊的函数:TEXT或者RIGHT TEXT函数是Excel中一个非常有用的函数。TEX…

短视频矩阵系统源码--剪辑/矩阵/分发/直播

短视频矩阵系统源码--剪辑/矩阵/分发/直播 短视频矩阵系统开发,首先对服务器要求: 源码所需服务器配置 1、规格:最低8核16G 2、硬盘:系统盘40-100G,数据盘不低于100G 3、带宽:10M 4、系统:…

PHP 服装销售管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 服装销售管理系统是一套完善的web设计系统mysql数据库 ,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php服装销售管理系统1 二、功能介绍 (1)员工管理:对员工信息…

力扣:160. 相交链表(Python3)

题目: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,…

NO.304 二维区域和检索 - 矩阵不可变

题目 给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1, col1) ,右下角 为 (row2, col2) 。 实现 NumMatrix 类: NumMatrix(int[][] matrix) 给定整数矩阵 …

vscode 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPower

vscode 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPower 第一次用vscode,然后遇到这个问题,在设置里搜索 terminal.integrated.defaultProfile.windows 将这里的null改成"Command Prompt" 重启就可以了

《数字图像处理-OpenCV/Python》连载(41)图像的旋转

《数字图像处理-OpenCV/Python》连载(41)图像的旋转 本书京东优惠购书链接:https://item.jd.com/14098452.html 本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html 第 6 章 图像的几何变换 几何变换分…

C语言--前置++与后置++

:自增1 注意区分前置和后置 前置:先,后使用 后置:先使用,后 --:自减1 注意区分前置和后置 前置:先-- ,后使用 后置,先使用,后-- int main() {int i 10;//int j i;//前置,先…

k8s上对Pod的管理部分详解

目录 一.Pod结构介绍 1.user container 2.pause 二.Pod工作形式介绍 1.自主式pod 2.控制器管理下的pod 三.对Pod的操作介绍 1.run/apply -f/create -f运行pod 2.get查看pod信息 3.exec操作运行中的pod (1)进入运行中的pod (2&…

【Linux系统概念】

Linux系统概念 1 用户1.1 su和sudo1.1.1 /etc/sudoers 1.21.3 2345 1 用户 1.1 su和sudo 为什么会有su和sudo命令? 在实际工作当中需要在Linux不同用户之间进行切换。 root用户权限最高很多时候需要root用户才能执行一些关键命令。所以需要临时切换为root用户。工…

Snipaste截图工具--------开机后自启动设置

1,找到安装Snipaste的目录,创建快捷方式 2,按winR打开运行框(输入shell:startup) 3,将刚才创建的快捷方式拖入此文件夹

pytorch代码实现注意力机制之Flatten Attention

Flatten Attention 介绍:最新注意力Flatten Attention:聚焦的线性注意力机制构建视觉 Transformer 在将 Transformer 模型应用于视觉任务时,自注意力机制 (Self-Attention) 的计算复杂度随序列长度的大小呈二次方关系,给视觉任务…