BART论文解读

news2024/11/25 10:56:57

1 概述

  • 全称:Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension。BART来源于Bidirectional and Auto-Regressive Transformers
  • 发表时间: 2019.10.29
  • 团队:Facebook AI

Paper地址​arxiv.org/pdf/1910.13461.pdf

Code地址​github.com/huggingface/transformers/blob/master/tests/test_modeling_bart.py

2. 主要贡献

  • 背景:由于基于BERT类的生成模型大多在预训练和下游任务之间存在一定的差异,导致生成模型的结果并不理想,本文提出了BART模型,更加充分去利用上下文信息自回归特点
  • 主要贡献:BART提出了一个结合双向和自回归的预训练模型。BART模型首先使用任意噪声来破坏原文本,然后学习模型重构原文本。这样使得,BART不仅很好的处理文本生成任务,同时理解任务上的表现也不错。

3 模型架构

3.1 Architecture

BART使用了标准的seq2seq tranformer结构。BART-base使用了6层的encoder和decoder, BART-large使用了12层的encoder和decoder。BART的模型结构与BERT类似,不同点在于:

(1)decoder部分基于encoder的输出节点在每一层增加了cross-attention(类似于tranformer的seq2seq模型);

(2)BERT的词预测之前使用了前馈网络,而BART没有。总的来讲,在同等规模下,BART比BERT多了10%的参数。

3.2 Pre-training BART

BART的预训练是在于破坏原文档然后优化重构loss,通过交叉熵来计算decoder输出与原文档的差异。极端情况下,当原文档信息全部丢失时,BART相当于语言模型。

图1 BART预训练方式

BART采用了多种方式破坏原文档,即采用了多种Noise.

  • Token Masking 随机替换原始token为[MASK]
  • Token Deletion 随机删除输入的token。相比较于Token Masking,模型必须决定哪个位置是遗漏的。
  • Text Infilling Text infilling是基于spanBERT的思路,取连续的token用[MASK]替换,span的长度服从 的泊松分布。特殊情况下,当span长度为0时,相当于插入了一个mask
  • Sentence Permutation 打乱文档中句子的顺序。
  • Document Rotation 随机选择一个token,然后旋转文本使得新的文本以这个token开头。此任务的目的用于判别文本的开头。

3.3 Fine-tuning BART

3.3.1 Sequence Classification Tasks

对于序列分类(文本分类)任务,encoder和decoder部分都用相同的输入,将deocoder最后一个节点用于多类别线性分类器中。此方法与BERT的CLS token较为类似;区别在于,BART在decoder部分最后增加了一个token,如此,便可获得来自完整输入的解码信息。(见图) - 思考:此方法,在inference上会更耗时吗

图2 BART在文本分类上finetune的方式

3.3.2 Token Classification Tasks

对于序列标注任务,同样是在decoder和encoder采用相同的文本输入,以decoder的隐藏节点输出用于预测每个节点的类别。

3.3.3 Sequence Generation Tasks

由于BART的模型框架本身就采用了自回归方式,因而在finetune序列生成任务时,可直接在encoder部分输入原始文本,decoder部分用于预测待生成的文本。

3.3.4 Machine Translation

BART预训练模型同样也可用于将其它语言翻译为英文(BART的预训练模型是基于英语来训练的)。

先前的研究工作已经表明,在机器翻译中,encoder部分融合预训练模型能带来较大的效果提升,然后在decoder部分却受到限制。本文本表明在仅仅在encoder更换部分参数,就可利用到整个BART模型(包括encoder和decoder)。

更准确地说,本文替换encoder的embedding layer的参数为随机初始化所得(因输入语言不再是预训练模型采用的英语)。然后,整个finetue阶段便可分为两步:1)先冻结BART的大部分参数,仅仅更新encoder部分的randomly initialized encoder和BART positional embeddings,以及输入到BART的第一层self-attention映射矩阵。2)更新BART的全部参数,这一步,仅需迭代几次即可。

图3 BART机器翻译finetune的模型结构

4 实验结果

表1 不同的预训练方式对比

表1表明,基于消融实验,上述所采用的噪声处理方式基本上相比之前的模型,在准确率上都有一定的提升。

表2 SQuAD和GLUE任务上实验结果

表2表明,BART在SQuAD和GLUE上的效果堪比RoBERTa和XLNET,在部分任务上效果最优,也说明了采用单向编码器并不会降低判别任务上的效果。

表3 文本摘要上实验结果

表3表明,BART在摘要提取效果都有明显提升,也再次表明,预训任务与下流任务尽可能接近时,下游任务会达到更好的效果。

5 写在最后

5.1 总结

BART通过重构带有噪声的文本,不仅能在判别任务达到与RoBERTa持平的效果,甚至可在生成任务上达到SOTA.

5.2 一点点思考

  • 与MASS和UniLM初衷较为类似,也希望不仅利用到BERT类的上下文信息,同时也希望像GPT一样学到自回归特性。只是做法上较为独特,在自编码上融合了更多的噪声信息,猜想,假设后续出现更多的噪声处理方式,是否也可融入进来?

参考

  1. 好奇的小will 【FB-BART新的预训练模型】阅读笔记 - 知乎
  2. 潘小小 【论文精读】生成式预训练之BART - 知乎
  3. kaiyuan BART原理简介与代码实战 - 知乎
  4. 机器之心 https://zhuanlan.zhihu.com/p/90

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

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

相关文章

chatgpt赋能python:Python怎么求解方程

Python怎么求解方程 在数学中,求解方程是一种基本的技能。Python作为一种广泛应用于科学计算和数据分析领域的编程语言,可以帮助我们求解各种类型的方程。Python提供了多个库和函数,使得求解方程在Python中变得非常轻松。 一元方程求解 一…

Android Framework分析SystemServer进程

SystemServer进程是Android系统的核心进程,运行在Android系统启动后,负责管理和加载系统服务。本文将介绍SystemServer进程的详细结构和工作原理,并使用代码注释的方式阐述其关键部分代码。 结构: SystemServer进程的核心是Syste…

SSH基本概念,带你了解SSH

1、SSH基本概念 SSH(Secure Shell)是一种网络协议,用于在不安全的网络中安全地传输数据。它是一种加密协议,可以保护数据在传输过程中不被窃取、篡改或伪造。SSH协议最初是由芬兰的Tatu Ylonen开发的,现在已经成为了一…

Hadoop集群之模板虚拟机的安装

Hadoop集群之模板虚拟机的安装 文章目录 Hadoop集群之模板虚拟机的安装0. 写在前面1. CentOS的安装1.1 配置电脑1.1.1 进入VMware1.1.2 自定义新的虚拟机1.1.3 解决虚拟机的兼容性1.1.4 选择当前虚拟机的操作系统1.1.5 选择虚拟机将来需要安装的系统1.1.6 电脑的具体配置1.1.7 …

KUKA机器人通过示教器进行关机冷启动的具体方法演示

KUKA机器人通过示教器进行关机冷启动的具体方法演示 如下图所示,首先需要登录管理员权限,默认密码:KUKA,然后点击左上角的机器人图标进行菜单选项,找到并点击“关机”选项, 如下图所示,找到并点击“重新启动控制系统PC”, 如下图所示,此时系统提示:确实要重新启动…

chatgpt赋能python:Python生成序列的方法详解

Python生成序列的方法详解 在Python编程中,序列(Sequence)是常用的数据类型之一。序列是有序的,可以通过下标访问其中的元素。Python中有多种方法可以生成序列,下面将对常用的几种方法进行详细介绍。 利用range函数生…

2023-06-16 Android Studio 使用CMakeList编译JNI ,最简单的demo源码

一、代码结构图,代码路径https://download.csdn.net/download/qq_37858386/87913001 二、cmakedemo\app\build.gradle 加下面的代码 externalNativeBuild {cmake {cppFlags "-frtti -fexceptions"}}externalNativeBuild {cmake {path src/main/jni/CMakeL…

国内大模型研究

自从chatgpt发布以来,国内大模型发展非常迅速。我对这项目技术也保持了非常多的持续关注,我一直认识,chatGPT以及其他GPT会给社会带来更大的变革。经过专业训练的大模型可以替代部分客服,部分程序员,部分美工&#xff…

Vue全家桶实战 从零独立开发企业级电商系统(免费升级Vue3.0)

Vue全家桶高仿小米商城–项目简介 文章目录 Vue全家桶高仿小米商城--项目简介电商项目选型--小米商城的页面流程:业务开发流程:项目内容:商城组件部分:课程所包含的知识图谱:章节介绍: 商城的界面展示&…

基于web漏洞扫描及分析系统设计_kaic

基于web漏洞扫描及分析系统设计 摘 要 随着信息技术的发展和网络应用在我国的普及,针对我国境内信息系统的恶意网络攻击也越来越多,并且随着黑客攻击技术的不断地更新,网络犯罪行为变得越来越难以应对,用户日常访问的网站是否安全…

【八大排序(六)】快排终极篇-快速排序非递归版

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:八大排序专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习排序知识   🔝🔝 快排非递归版 1. 前情回顾2. 快排非递归基…

A100 GPU服务器安装CUDNN教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

从Window中先多瞥几眼

JavaFx17官方文档中有如下的描述: Window类是一个顶层窗口类,在其中可以承载场景,并与用户交互。窗口可以是Stage、PopupWindow或其他类似的顶层窗口。 JavaFX Stage类是顶级的JavaFX容器。初级阶段由平台搭建。其他Stage对象可以由应用程序构造。 许多Stage属性是只读的…

chatgpt赋能python:Python入门:如何添加Seaborn库

Python入门:如何添加Seaborn库 Python是一种易于学习的、功能强大的编程语言,在数据分析和科学计算方面尤其闻名。Seaborn是一个建立在Matplotlib之上的Python可视化库,它提供了一组简单易用的界面,用于绘制优美的统计图形——包…

几个Caller-特性的妙用

System.Runtime.CompilerServices命名空间下有4个以“Caller”为前缀命名的Attribute,我们可以将它标注到方法参数上自动获取当前调用上下文的信息,比如当前的方法名、某个参数的表达式、当前源文件的路径,以及当前代码在源文件中的行号。 一…

RedisSon高并发分布式锁实战RedisSon源码解读

Redis高并发分布式锁实战 1.分布式场景下的synchronized失效的问题–用redis实现分布式锁 synchronized是通过monitor实现的jvm级别的锁,如果是分布式系统,跑在不同的虚拟机上的tomcat上,会导致synchronized无法锁住对象 ----------- 需要分…

读数据压缩入门笔记05_字典转换

1. 瓶颈 1.1. 在网络带宽有限、存储昂贵的时期 1.2. 移动设备正日益成为人们访问互联网的首选的今天 1.3. 数据压缩成了缓解这些瓶颈的关键 2. 字典转换 2.1. dictionary transforms 2.2. 完全改变了人们对数据压缩的认知 2.2.1. 压缩变成了一种对各种类型的数据都有用的…

《C和指针》读书笔记(第十一章 动态内存分配)

目录 0 简介1 为什么使用动态内存分配2 malloc和free3 calloc和realloc4 使用动态分配的内存5 常见的动态内存错误6 内存分配实例6.1 排序一列整型值6.2 复制字符串6.3 变体记录的创建与销毁 7 总结 0 简介 在实际开发中(C语言),数组的元素存…

JDK,JRE,JVM有什么区别?跨平台?跨语言?

JDK Java Development Kit(Java开发工具包),提供了Java的开发环境和运行环境。包含Java源文件的编译器Javac,还有调试和分析工具。 JRE Java Runtime Environment(Java运行环境)包含了Java虚拟机&#xff…

WPF开发txt阅读器10:语音播报快进快退

文章目录 MySpeech类快进 文章目录 MySpeech类快进 txt阅读器系列: 需求分析和文件读写目录提取类💎列表控件与目录字体控件绑定💎前景/背景颜色书籍管理系统💎用树形图管理书籍语音播放💎播放进度显示 MySpeech类 …