大语言模型-RetroMAE-检索预训练模型

一、背景信息:

RetroMAE是2022年10月由北邮和华为提出的一种密集检索预训练策略。
RetroMAE主要应用于检索模型的预训练,模型架构为非对称的Encoder-Decode结构。

二、整体结构:

RetroMAE的模型架构为非对称的Encoder-Decode结构。

Encoder部分: 是由类似于BERT的Encoder组成(12层Transformer的Encoder),用于生成句向量。
Decoder部分: 仅有由一层类似于Transformer的Decoder构成,用于重建句子。

1、token级别的预训练:比如MLM或者Seq2Seq,难以获得高质量句向量。
2、对比学习:受限于数据增强的质量,需要大量负样本。
3、自重建方法:不受数据增强跟负样本采样策略的影响,但对对编码质量要求高,训练数据也要求被充分利用到。

RetroMAE中的掩码

在Encoder阶段,对sentence进行15%~30%的mask,通过Encoder得到句子向量的表示(这里用Encoder的[CLS] token表示)。
在Decoder阶段,句子被进一步加大噪音,mask的比例为50%~70%,通过增加mask的比例来提升任务的复杂性。
而整个预训练的任务则为:在encoder阶段,对被掩码的部分进行重构,也就是MLM(Masked Language Modeling),在decoder阶段对整个句子进行重构,整体loss函数为:

在这里插入图片描述

三、Encoder模块

假设,句子输入为X;Encoder部分随机mask(15%~30%)后为 X ~ e n c \tilde{X} _{enc} X~enc;Encoder编码器用 Φ e n c ( ) \Phi_{enc}() Φenc()表示。
因此经过Encoder后得到的句子向量: h X ~ ← Φ e n c ( X ~ e n c ) {h} _{\tilde{X}} \gets \Phi_{enc}(\tilde{X} _{enc}) hX~Φenc(X~enc)

四、Decoder模块

相比于Transformer中的Decoder结构,RetroMAE做了一些改进,并将其称为Enhanced-Decoder。

Enhanced-Decoder的核心想法,为以下两点:

  • 可以从输入数据中获取更多信息
  • 可以根据不同来源的数据训练模型

因此,Enhanced-Decoder在attention模块同时使用了两个输入流 H 1 、 H 2 H_{1}、H_{2} H1H2;输入流 H 1 H_{1} H1保留了较多输入数据的信息。
H 1 ← [ h X ~ + p 0 , . . . , h X ~ + p N ] H 2 ← [ h X ~ , e x 1 + p 0 , . . . , e x N + p N ] \begin{matrix} H_{1} \gets [h_{\tilde{X}}+p_{0},...,h_{\tilde{X}}+p_{N}] \\H_{2} \gets [h_{\tilde{X}}, e_{x_{1}}+p_{0},...,e_{x_{N}}+p_{N}] \end{matrix} H1[hX~+p0,...,hX~+pN]H2[hX~,ex1+p0,...,exN+pN]
其中,句子输入为X;Decoder部分随机mask(50%~70%)后为 X ~ d e c \tilde{X} _{dec} X~dec; e x i e_{x_{i}} exi表示没有掩码过的词向量; p i p_{i} pi表示对应的位置向量;
此外,因为Transformer中的attention的掩码矩阵是一个的下三角矩阵优势在于增强模型生成能力,而检索通常更关注于模型的表示能力需要看到上下文,因此这里引入了Position-Specific Attention Mask。
继而Enhanced-Decoder的attention层为以下形式:

Q = H 1 W Q Q = H_{1}W_{Q} Q=H1WQ , K = H 2 W K K=H_{2}W_{K} K=H2WK , V = H 2 W V V=H_{2}W_{V} V=H2WV

M i j = { 0 , a t t e n d e d − ∞ , m a s k e d M_{ij}=\left\{\begin{matrix}0,attended \\-∞,masked \end{matrix}\right. Mij={0attendedmasked

A = s o f t m a x ( Q T K d + M ) V A = softmax(\frac{Q^{T}K}{\sqrt{d}}+M) V A=softmax(d QTK+M)V

最终RetroMAE的损失由encoder部分的MLM损失,deocder部分自重建的交叉熵损失两部分相加得到。
L d e c = ∑ x i ∈ X C E ( X i ∣ Φ d e c ( X ~ d e c ) ) L_{dec} = \sum_{x_{i}\in X}^{} CE(X_{i}| \Phi_{dec}(\tilde{X} _{dec})) Ldec=xiXCE(XiΦdec(X~dec))
L = L e n c + L d e c L = L_{enc}+L_{dec} L=Lenc+Ldec

其中, L e n c L_{enc} Lenc为由encoder部分的损失, L d e c L_{dec} Ldec为由deocder部分的损失,CE为交叉熵损失函数。

Reference

RetroMAE: Pre-Training Retrieval-oriented Language Models Via Masked Auto-Encoder

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

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

相关文章

C++学习笔记-operator关键字:重载与自定义操作符

在C编程中,operator关键字扮演着极其重要且独特的角色。它允许开发者为内置类型或自定义类型重载或定义新的操作符行为。这一特性极大地增强了C的表达能力,使得代码更加直观、易于理解和维护。本文将深入探讨C中operator关键字的使用,包括操作…

Interesting bug caused by getattr

题意:由 getattr 引起的有趣的 bug 问题背景: I try to train 8 CNN models with the same structures simultaneously. After training a model on a batch, I need to synchronize the weights of the feature extraction layers in other 7 models. …

Elasticsearch:Golang ECS 日志记录 - zap

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。 编码器以 JSON 格式记录日志,并在可能的情况下依赖默认的 zapcore/json_encoder。它还处理 ECS 错误格式的错误字段记录。 默认情况下,会添…

OpenWrt 为软件包和docker空间扩容

参考资料 【openwrt折腾日记】解决openwrt固件刷入后磁盘空间默认小的问题,关联openwrt磁盘扩容空间扩容【openwrt分区扩容】轻松解决空间可用不足的尴尬丨老李一瓶奶油的YouTube 划分空间 参考一瓶奶油的YouTube 系统 -> 磁盘管理 -> 磁盘 -> 修改 格…

【机器学习】不同操作系统下如何安装Jupyter Notebook和Anaconda

引言 Jupyter Notebook 是一个非常流行的开源Web应用程序,允许你创建和共享包含代码、方程、可视化和解释性文本的文档 文章目录 引言一、如何安装Jupyter Notebook1.1 对于Windows用户1.2 对于macOS用户1.3 对于Linux用户: 二、如何安装Anaconda2.1 对于…

Vue中filter的使用

在 Vue.js 中,filter() 方法用于创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。filter() 不会改变原数组,而是返回一个新的数组。 语法 array.filter(callback(element[, index[, array]])[, thisArg])callback:…

基于Element UI内置的Select下拉和Tree树形组件,组合封装的树状下拉选择器

目录 简述 效果 功能描述 代码实现 总结 简述 基于Element UI内置的Select下拉和Tree树形组件,组合封装的树状下拉选择器。 效果 先看效果: 下拉状态: 选择后状态: 选择的数据: 功能描述 1、加载树结构&…

Linux云计算 |【第一阶段】SERVICES-DAY2

主要内容: DNS服务基础及搭建、特殊解析(针对地址库文件:DNS轮询 DNS泛域名解析 DNS别名)、缓存DNS(全局转发forwarders)、DNS递归迭代(子域授权)、DNS主从架构搭建、DNS主从数据同步 一、DNS工…

【技术升级】Docker环境下Nacos平滑升级攻略,安全配置一步到位

目前项目当中使用的Nacos版本为2.0.2,该版本可能存在一定的安全风险。软件的安全性是一个持续关注的问题,尤其是对于像Nacos这样的服务发现与配置管理平台,它在微服务架构中扮演着核心角色。随着新版本的发布,开发团队会修复已知的…

光伏模拟器应用

太阳能光伏 (PV) 模拟器是一种可编程电源,用于模拟太阳能电池板。模拟器具有快速瞬态响应,可响应负载条件的变化并保持电压-电流特性的输出。 用户可以根据系统规格定义太阳能电池板配置,并通过选择环境条件来选择适当的环境条件进行模拟。用…

安全产品在防御勒索病毒中的作用

在数字时代,网络安全威胁日益严峻,其中勒索病毒尤为猖獗,它通过加密受害者的数据并要求赎金换取解密密钥,给个人和企业带来了巨大的经济损失。然而,关于安全产品是否真正有效的问题一直存在争议。本文将通过一个模拟实…

pytest+allure

安装 下载:github win环境下载zip 环境变量: pycharm: pip install allure-pytest 验证安装 生成结果: if __name__ __main__:pytest.main([-s,test_createTag2.py,--alluredir,result]) 生成报告: allure gener…

如何查看Kafka的偏移量offset

本文介绍三种方法查看Kafka的偏移量offset。 1. API:ConsumerRecord的offset()方法查看offset。 2. API:KafkaConsumer的position(TopicPartition partition)方法查看offset。 3. 命令行:kafka-consumer-groups.sh命令查看offset。 前提条…

pglogical扩展的基本用法介绍

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:14 文档用途 本文翻译了pglogical扩展的官方文档,介绍了pglogical扩展的各类管理函数及使用限制,详情请看下文. 一、节点管理 节点可以使用以下…

前置-Linux相关知识速记

linux Linux命令大全 [!IMPORTANT] chown-chmod-ls-chgrp-cdpwd-mkdir-rmdir-cp-rm-mv-cat-tac-nl-more-less-head-tail 应用领域 通常服务器使用 LAMP(Linux Apache MySQL PHP)或 LNMP(Linux Nginx MySQL PHP)组合。 目前…

STM32 BootLoader 刷新项目 (五) 获取软件版本号-命令0x51

STM32 BootLoader 刷新项目 (五) 获取软件版本号-命令0x51 下面我们来讲解第一个指令,获取软件版本号命令-0x51. 在BootLoader中获取软件版本号的操作有多个重要的作用,具体如下: 版本管理: 识别当前版本:通过获取软…

无人机上磁航技术详解

磁航技术,也被称为地磁导航,是一种利用地球磁场信息来实现导航的技术。在无人机领域,磁航技术主要用于辅助惯性导航系统(INS)进行航向角的测量与校正,提高无人机的飞行稳定性和准确性。其技术原理是&#x…

vue3 + antd vue 纯前端 基于xlsx 实现导入excel 转 json,将json数据转换XLSX导出(模版下载)

一、导入 0、关键代码 // 安装插件 npm i xlsx/yarn add xlsx // 导入xlsx import * as XLSX from xlsx; 点击提交的时候才整理数据。上传的时候文件保存在 state.form.file[0] 中的 // 定义字段映射关系 const fieldMap {sheet2json: {技能名称: skill_name,技能等级: …

qt事件类型列表

t提供了一系列丰富的事件类型,这些事件允许应用程序响应各种用户输入、系统通知以及其他类型的交互。以下是一些常见的Qt事件类型及其用途概述: QEvent::None (0): 无事件,用于初始化或作为默认值。 QEvent::Timer (1): 定时器事件&#xff…

(三)C语言的变量与常量

一.C语言中标识符(变量)的命名规则 (1)可以由数字、字母、下划线_组成 (2)不能以数字开头 (3)不能是关键字 (4)区分大小写 二.在C语言中定义常量的方法及其区别 1.使用#define宏定义:#define LENGTH 10 2.使用const关键字:const int LENGTH 10 或 i…