BART模型和 Electra模型对比

news2024/11/28 8:43:08

总结

Electra模型在使用较少的计算资源的情况下能够达到跟大语言模型相近的效果。但BART模型对于传统的BERT中加入了不同种制造noise的方式,是BERT和GPT的结合体。Electra模型主要是Generator模型和Discriminator模型的结合体。

未知参数设置,两个模型在SQuAD(问答QA) 任务上的对比

网络上目前没有找到其他人有关掩码预测任务(MLM)或者(QA)任务的模型对比文件,只能根据原论文其中的实验结果简单对比。具体对比如下所示。个人觉得没有什么对比意义,需要复现相关实验,在实验中设置相同的参数相同的任务去计算相同指标进行对比。

在这里插入图片描述

BART模型

BART模型主要是结合了BERT的双向编码器(bidirectional encoder)和GPT的自左而右的decoder的特点。在seq2seq的transformers的模型基础上,结合了上下文语境的问题。能应用于生成任务和文本理解任务。详细图示如图所示。
在这里插入图片描述

BART模型跟GPT和BERT的联系不同

BART源自于BERTGPT模型,结合了两个模型的优点,但对于传统的BERT的单一noise——随机用[MASK]token去掩盖单词。BART在encoder中结合了多个生成noise的方式。具体如下。

  • Token masking , 随机将一个token替换为[MASK]【训练推断单个token的能力】
  • Token deletion, 随机删除某些token【训练推断单个token内容以及位置的能力】
  • Text infilling, 将一段连续的token【span】(1~num)替换为一个[MASK],长度服从 λ = 3 \lambda=3 λ=3的泊松分布【训练推理一段内容有多少个token的能力】
  • Sentence Permuation, 将一段句子的顺序打乱(最终输出原句子)【训练推理前后句关系的能力】
  • Document Rotation, 将序列中随机选取一个token,让这个token成为document的开头【提高找到document开头的能力】
    具体的noise的表现形式如下图所示。(蓝色为正确文本,红色为不同破坏输入的方式)
    在这里插入图片描述

BARTmask-fill模型具体调用过程

BART在掩码预测任务中仍然使用BartForConditionalGeneration模型。在huggingface所提及的mask-filling有所提及。下图为transformers==4.31的版本的介绍。

在这里插入图片描述

在原论文中,主要涉及的都是问答,生成释义等任务。但并未太多提及掩码预测,但在文中处处都用了掩码预测。个人认为掩码预测是上游任务。具体的模型在下游任务的效果如下所示。

在这里插入图片描述

Electra模型

主要是利用了GAN对抗生成网络的思想,通过训练两种transformer模型,判别器(Discriminator)和生成器(Generator),作用分别是确定预测某些掩码[MASK]序列的token和确定序列中哪些token是否被替换。具体样例如下图所示。
因为Generator的任务是MLM模型,所以最后生成的词汇是离散的,所以梯度不能够再次传递
在损失函数部分,因为MLM的loss明显会比判别器的loss大,所以实验通过设置参数 λ \lambda λ平衡。
损失函数如下图所示。

L M L M ( x , θ G ) = E ( ∑ i ∈ m − log ⁡ p G ( x i ∣ x masked  ) ) \mathcal{L}_{\mathrm{MLM}}\left(\boldsymbol{x}, \theta_G\right)=\mathbb{E}\left(\sum_{i \in \boldsymbol{m}}-\log p_G\left(x_i \mid \boldsymbol{x}^{\text {masked }}\right)\right) LMLM(x,θG)=E(imlogpG(xixmasked ))
L Disc  ( x , θ D ) = E ( ∑ t = 1 n − 1 ( x t corrupt  = x t ) log ⁡ D ( x corrupt  , t ) − 1 ( x t corrupt  ≠ x t ) log ⁡ ( 1 − D ( x corrupt  , t ) ) ) \mathcal{L}_{\text {Disc }}\left(\boldsymbol{x}, \theta_D\right)=\mathbb{E}\left(\sum_{t=1}^n-\mathbb{1}\left(x_t^{\text {corrupt }}=x_t\right) \log D\left(\boldsymbol{x}^{\text {corrupt }}, t\right)-\mathbb{1}\left(x_t^{\text {corrupt }} \neq x_t\right) \log \left(1-D\left(\boldsymbol{x}^{\text {corrupt }}, t\right)\right)\right) LDisc (x,θD)=E(t=1n1(xtcorrupt =xt)logD(xcorrupt ,t)1(xtcorrupt =xt)log(1D(xcorrupt ,t)))
min ⁡ θ G , θ D ∑ x ∈ X L M L M ( x , θ G ) + λ L Disc  ( x , θ D ) \min _{\theta_G, \theta_D} \sum_{\boldsymbol{x} \in \mathcal{X}} \mathcal{L}_{\mathrm{MLM}}\left(\boldsymbol{x}, \theta_G\right)+\lambda \mathcal{L}_{\text {Disc }}\left(\boldsymbol{x}, \theta_D\right) θG,θDminxXLMLM(x,θG)+λLDisc (x,θD)
在优化判别器(discriminator)中,计算了所有的token的loss,在常见的MLM模型(如BERT的MLM模型)中只计算了该被遮盖到的token的loss。实验结果证明在下游任务效果中有一定提升。评判指标为GLUE Score。在后续应用于下游任务中,无论是大语言模型还是小语言模型中,都有一定的提升。

discriminator的梯度优化过程中,并不会传递到generator中。而且生成器的目标任务为MLM(掩码预测)任务,判别器的任务为序列标注任务。在同等资源条件下,ELECTRA模型会比BERT等其他模型的效果会好。达到了用尽可能少的资源更好的解决问题。

ELECTRA模型实验结果

小模型在GLUE dev set的效果
在这里插入图片描述

大模型在GLUE dev set的结果

在这里插入图片描述

参考

ELECTRA: 超越BERT, 19年最佳NLP预训练模型
huggingface的ElectraForMaskedLM模型
huggingface的bart的mask-fill使用方法
介绍electra模型和bart模型
【论文精读】生成式预训练之BART

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

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

相关文章

【Spring Boot】事务的隔离级别与事务的传播特性详解:如何在 Spring 中使用事务?不同隔离级别的区别?

文章目录 1 事务1.1 事务简介与 mysql 中的事务使用1.2 Spring 编程式事务(手动操作)1.3 Spring 声明式事务(自动操作)1.4 Transactional 的工作原理 2 事务的隔离级别2.1 事务的四大特性及事务的隔离级别回顾2.2 Spring 事务的隔…

【Unity2D】相机移动以及设置相机边界

添加相机 添加相机时,首先需要在unity中添加 Cinemachine 包 第一次使用这个包时,需要在Package Manager中搜索并安装 安装Camera Mechine包后,添加2D Camera 设置跟随对象为Ruby (从Hierarchy中将Ruby拖动到Follow中&#xff0…

非线性质量弹簧阻尼器的神经网络仿真研究(Matlab代码Simulink仿真实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、Simulink仿真实现 💥1 概述 非线性质量弹簧阻尼器(Nonlinear Mass-Spring-Damper,NMSD)是一种常见的振动控制装置&#…

VS2017找不到QT头文件

一、我的电脑右键属性 - 》“高级系统设置” -》“环境变量” 增加环境变量Qt_INCLUDEPATH_ 值为QT的头文件目录 二、重启VS 发现波纹线不见了,证明设置环境变量后VS能识别到QT头文件了 原理是:vs导入qt项目附加包含目录继承值有Qt_INCLUDEPATH_

【视频的动态对比】

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言图像修复人脸与关键点检测修复图像修复视频 动态对比添加声音获取原视频音频融合声…

elementui全局给select option添加title属性

场景 有天边上的同事问了我一个问题,示例如下,有个数据特别长,导致下拉部分被横向撑大。希望在全局对所有的option进行处理,按照select的宽度,超出隐藏。 处理 方式一 第一眼看过去直接修改源码好了,修…

Mybatis基础模块-日志管理

文章目录 1. 适配器模式2. Log2.1 默认实现StdOutImpl2.2 Log4jImpl 3. LogFactory4. 解析配置和应用4.1 settings配置4.2 解析 5. jdbc日志5. 1 类图5.2 BaseJdbcLogger5.3 ConnectionLogger5.4 ConnectionLogger的具体应用 1. 适配器模式 适配器使接口不兼容的对象可以相互合…

用QFramework来重构 祖玛游戏

资料 Unity - 祖玛游戏 GitHub 说明 用QF一个场景就够了,在UIRoot下切换预制体达到面板切换。 但测试中当然要有一个直接跳到测试面板的 测试脚本,保留测试Scene(不然初学者也不知道怎么恢复测试Scene),所以全文按S…

SpringBoot整合Spring Security实现权限控制

文章目录 Spring Security介绍Spring Security案例1、快速搭建一个springboot工程2、导入SpringSecurity整合springboot工程3、认证3.1、登录流程校验3.2、入门案例的原理3.3、实现思路3.4、实现认证流程(自定义)3.5、正式实现3.5.1 实现数据库的校验3.5…

Linux 内核 ASoC 基本数据结构

Linux 内核 ASoC 框架建立了新的抽象,并通过一些中间层,将这些抽象接入 ALSA 音频框架。 Linux 内核 ASoC 设备驱动的结构如下图: Linux 内核 ASoC 设备驱动程序在 Linux 内核中扮演多个角色。 Linux 内核 ASoC 设备驱动程序在初始化阶段向…

MATLAB遗传算法求解带容量约束的物流配送选址问题实例

MATLAB遗传算法求解带容量约束的物流配送选址问题实例 作者:麦哥爱西芹 MATLAB遗传算法求解带容量约束物流配送中心选址问题代码实例 遗传算法编程问题实例: 在经度范围为(116, 118),纬度范围为(38, 40)的矩形区域内,散布着37个需…

第116天:免杀对抗-EDRSyscall-hookDLL反射注入白加黑隐写分离加载器

知识点 #知识点: 1、DLL劫持-自写&导入 2、DLL劫持-重写&分离 3、syscall-底层&项目#章节点: 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定位-修改 程序文件面-加壳花指令-资源 …

常微分方程建模R包ecode(一)——构建常微分方程系统

常微分方程在诸多研究领域中有着广泛应用,本文希望向大家介绍笔者于近期开发的R包ecode,该包采用简洁易懂的语法帮助大家在R环境中构建常微分方程,并便利地调用R图形接口,研究常微分方程系统的相速矢量场、平衡点、稳定点等解析性…

基于linux下的高并发服务器开发(第二章)- 2.20 kill、raise、abort函数

03 / 信号的5种默认处理动作 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”&#…

X86设备启动过程

文章目录 一、电源自检二、BIOS自检三、引导设备选择四、主引导记录4.1 0x7c0 五、加载操作系统 x86计算机启动过程,主要分为这几个阶段:电源自检、BIOS自检、引导设备的选择、主引导记录、加载操作系统。 一、电源自检 当我们按下开关键后,…

消息队列总结(3)- RabbitMQ Kafka RocketMQ高可用方案

目录 1. 什么是高可用? 1.1 常见的高可用方法 1.2 消息队列的高可用 2. RabbitMQ的高可用方案 2.1 镜像队列 2.2 消息生产的确认机制 2.3 消息的持久化 3. Kafka的高可用方案 3.1 消息备份 3.2 ISR & IEO & HW 3.3 消息生产的确认机制 4. Rocke…

在虚拟机中安装anaconda和pytorch

首先我用的是VMware&#xff0c;ubuntu16.04. 首先建议安装anaconda,登录官网Free Download | Anaconda 下载完成后&#xff0c;来到安装文件目录处&#xff0c;打开终端&#xff0c; 然后在终端输入bash <anaconda文件名> 然后就一直enter和yes到底&#xff0c;直到安…

【后端面经】微服务构架 (1-3) | 熔断:熔断-恢复-熔断-恢复,抖来抖去怎么办?

文章目录 一、前置知识1、什么是熔断?2、什么是限流?3、什么是降级?4、怎么判断微服务出现了问题?A、指标有哪些?B、阈值如何选择?C、超过阈值之后,要不要持续一段时间才触发熔断?5、服务恢复正常二、面试环节1、面试准备2、面试基本思路三、总结 在微服务构架中…

【OC总结 面向对象 + 内存管理 + runtime】

文章目录 前言面向对象1.1 一个NSObject对象占用多少内存&#xff1f;1.2 iOS的继承链 & 对象的指针指向了哪里&#xff1f;1.3 OC的类的信息存放在哪里&#xff1f;-isa指针1.4 isMemberOfClass & isKindOfClass Runtime1.4 讲一下OC的消息机制1.5 消息转发机制流程1.…

React 中 {} 的应用

列表渲染&#xff1a; 1.使用数组的 map 方法&#xff08;因为map 可以映射&#xff09; 2、列表要添加 key 属性&#xff0c;值要唯一 // 导入 // 用来获取 dom元素 import { createRoot } from "react-dom/client";// 内容 const contentArr [{ id: 1, name: &…