BART论文解读:BERT和GPT结合起来会发生什么?

BART:Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

主要工作

  • 提出了BART (Bidirectional and Auto-Regressive Transformers), 是一种用于自然语言生成、翻译和理解的序列到序列的预训练方法。它通过先用任意噪声函数损坏文本,然后学习一个模型来重构原始文本来进行训练。BART使用标准的基于Transformer的神经机器翻译架构,结合了BERT的双向编码器和GPT的从左到右解码器的特点。

  • 研究发现,BART在文本生成任务中表现尤为出色,同时也适用于理解任务。它在GLUE和SQuAD任务中与RoBERTa表现相当,并在一系列抽象的对话、问答和摘要任务中取得了新的最先进结果,显示出高达6 ROUGE的增益。此外,BART还在机器翻译任务中表现出色,比只使用目标语言进行预训练的反向翻译系统提高了1.1 BLEU分。

image.png
图 1:BART 与 BERT和的示意性比较。

模型

BART 是一个去噪自编码器,它将受损的文档映射回其来源的原始文档。这个模型以序列到序列的形式实现,具有对受损文本的双向编码器和一个从左到右的自回归解码器。在预训练阶段,我们优化原始文档的负对数似然。

架构

BART 使用了标准的序列到序列变换器(Transformer)架构,但是有所改动。继承自GPT的一个修改是,它将ReLU激活函数替换为GeLUs(Hendrycks & Gimpel, 2016),并且将参数初始化为N(0, 0.02)。在我们的基础模型中,编码器和解码器各使用了6层,而在我们的大型模型中,每个部分各使用了12层。这种架构与BERT使用的架构密切相关,但存在以下差异:(1)解码器的每一层还会对编码器的最后一个隐藏层进行交叉关注(如在Tansformer sequence-to-sequence模型中所做的那样);以及(2)BERT在单词预测前使用了一个额外的前馈网络,而BART没有使用。总体而言,BART比同等大小的BERT模型包含大约多10%的参数。

预训练

BART 通过破坏文档然后优化重建损失来进行训练,重建损失是解码器输出和原始文档之间的交叉熵。不同于现有的针对特定噪声方案定制的去噪自编码器,BART 允许我们应用任何类型的文档破坏方式。在极端情况下,即源信息完全丢失时,BART 相当于一个语言模型。

我们试验了几种先前提出的和新颖的转换方法,但我们认为开发其他新的替代方案仍有重大潜力。我们使用的转换方法在下面进行了总结,示例显示在图2中。

image.png
图 2:我们实验的输入噪声的转换。这些变换可以组合起来。

Token Masking(令牌遮蔽)
遵循BERT(Devlin等人,2019年)的方法,随机采样令牌并将其替换为[MASK]元素。

Token Deletion(令牌删除)
从输入中随机删除令牌。与令牌遮蔽不同,模型必须决定哪些位置缺少输入。

Text Infilling(文本填充)
采样一定数量的文本跨度(span),这些跨度的长度根据泊松分布(λ=3)确定。每个跨度被单个[MASK]令牌替换。0长度的跨度对应于插入[MASK]令牌。文本填充的灵感来自SpanBERT(Joshi等人,2019年),但SpanBERT采样不同的分布来确定跨度长度,并用长度完全相同的一系列[MASK]令牌替换每个跨度。文本填充教会模型预测每个跨度中缺少多少个令牌。

Sentence Permutation(句子置换)
将文档分割为基于句号的句子,并将这些句子随机打乱顺序。

Document Rotation(文档旋转)
均匀随机选择一个令牌,并旋转文档,使其从该令牌开始。这项任务训练模型识别文档的开始部分。

微调

BART 生成的表示可以通过多种方式用于下游应用程序。

image.png
图 3:微调 BART 以进行分类和翻译。

序列分类任务
对于序列分类任务,相同的输入被送入编码器和解码器,最后一个解码器令牌的最终隐藏状态被送入一个新的多类别分类器。这种方法与BERT中的CLS令牌有关,但我们在末尾增加了一个额外的令牌,使得解码器可以关注完整输入的解码器状态(见图3a)。

Tokens分类任务
对于令牌分类任务,例如SQuAD的答案端点分类,我们将完整的文档送入编码器和解码器,并使用解码器顶层的隐藏状态作为每个词的表征。这个表征被用来对令牌进行分类。

序列生成任务
由于BART拥有一个自回归解码器,它可以直接进行微调以用于序列生成任务,如抽象的问答和总结。在这些任务中,信息是从输入中复制的,但进行了操纵,这与去噪预训练目标密切相关。在这里,编码器的输入是输入序列,解码器自回归地生成输出。

机器翻译
我们还探索使用BART来改进机器翻译解码器以翻译成英语。以前的工作Eduonov等人(2019年)表明,通过加入预训练的编码器可以改进模型,但从使用预训练的语言模型中的解码器中获得的收益有限。我们展示了使用整个BART模型(编码器和解码器)作为机器翻译的单一预训练解码器是可能的,通过添加一组从双语文本中学习到的新编码器参数(见图3b)。
更准确地说,我们用一个新的随机初始化的编码器替换了BART的编码器嵌入层。模型进行端到端训练,这训练了新的编码器将外语词映射为BART可以将其去噪为英语的输入。新的编码器可以使用与原始BART模型不同的词汇表。
我们分两步训练源编码器,在两种情况下都将交叉熵损失从BART模型的输出中反向传播。在第一步,我们冻结了大部分BART参数,只更新随机初始化的源编码器,BART的位置嵌入,以及自注意力输入投影矩阵的BART编码器的第一层。在第二步,我们为少量迭代训练所有模型参数。

比较预训练目标

比较目标

尽管提出了许多预训练目标,但由于训练数据、训练资源、模型之间的架构差异以及微调程序的不同,对这些目标进行公平比较一直是困难的。我们重新实现了最近为判别和生成任务提出的强大预训练方法。我们的目标是尽可能地控制与预训练目标无关的差异。然而,为了提高性能,我们确实对学习率和层归一化的使用进行了微小的改变(分别针对每个目标进行调整)。作为参考,我们将我们的实现与BERT的公开数据进行了比较,BERT也是在结合了书籍和维基百科数据的基础上训练了100万个step。我们比较了以下方法:

语言模型 类似于GPT(Radford等人,2018年),我们训练了一个从左到右的Transformer语言模型。这个模型相当于BART解码器,但没有交叉注意力。

排列语言模型 基于XLNet(Yang等人,2019年),我们对1/6的token进行采样,并且自回归地以随机顺序生成它们。为了与其他模型保持一致,我们没有实现XLNet中的相对位置嵌入或跨段落的注意力。

掩蔽语言模型 跟随BERT(Devlin等人,2019年),我们用[MASK]符号替换了15%的token,并训练模型独立预测原始token。

多任务掩蔽语言模型 如UniLM(Dong等人,2019年)所示,我们训练了一个带有额外自注意力掩蔽的掩蔽语言模型。自注意力掩蔽是随机选择的,遵循以下比例:1/6从左到右,1/6从右到左,1/3未掩蔽,以及1/3前50%的token未掩蔽并对其余部分施加从左到右的掩蔽。

掩蔽序列到序列 受到MASS(Song等人,2019年)的启发,我们掩蔽了包含50%的token的跨度,并训练一个序列到序列模型来预测被掩蔽的token。

对于排列LM、掩蔽LM和多任务掩蔽LM,我们使用双流注意力(Yang等人,2019年)来高效计算输出序列的可能性(使用对角线自注意力掩蔽在输出上预测从左到右的词)。

我们进行了实验:(1)将任务视为标准的序列到序列问题,其中编码器的源输入和目标是解码器输出,或者(2)在解码器中将源作为前缀添加到目标中,仅在序列的目标部分上有损失。我们发现前者对于BART模型效果更好,而后者对其他模型效果更好。为了最直接地比较我们的模型在建模其微调目标(人类文本的对数似然)的能力上的表现,我们在表1中报告了困惑度。

image.png
表 1:预训练目标比较。所有模型的大小都相当,并且结合书籍和维基百科数据进行了 100 万步的训练。底部两个块中的条目使用相同的代码库对相同的数据进行训练,并使用相同的过程进行微调。第二块中的条目受到之前工作中提出的预训练目标的启发,但已被简化以专注于评估目标。不同任务的性能差异很大,但带有文本填充的 BART 模型表现出最一致的强大性能。

任务

SQuAD(Rajpurkar等,2016年)是一个在维基百科段落上进行的抽取式问答任务。答案是从给定文档内容中抽取的文本跨度。类似于BERT(Devlin等,2019年),我们使用连接的问题和上下文作为编码器的输入,同时也传递给解码器。该模型包括分类器来预测每个token的开始和结束索引。

MNLI(Williams等,2017年)是一个双文本分类任务,用于预测一句话是否蕴含另一句话。微调后的模型连接这两个句子,在EOS token后追加,然后将它们传递给BART的编码器和解码器。与BERT不同,EOS token的表示用于分类句子关系。

ELI5(Fan等,2019年),一个长篇抽象问答数据集。模型生成的答案基于问题和支持文档的连接。

XSum(Narayan等,2018年),一个具有高度概括性摘要的新闻摘要数据集。

ConvAI2(Dinan等,2019年),一个对话响应生成任务,以上下文和角色为条件。

CNN/DM(Hermann等,2015年),一个新闻摘要数据集。这里的摘要通常与源句子紧密相关。

结果

结果显示在表1中。几个趋势很明显:

预训练方法的性能在不同任务上有显著差异。预训练方法的有效性高度依赖于任务。例如,一个简单的语言模型在ELI5任务上表现最好,但在SQuAD任务上结果最差。

掩码标记至关重要。基于文档旋转或句子置换的预训练目标在单独使用时表现不佳。成功的方法要么使用token删除或掩码,要么使用自注意力掩码。在生成任务上,删除似乎比掩码更有效。

从左到右的预训练提高了生成性能。掩蔽语言模型和排列语言模型在生成上的表现不如其他模型,并且是我们考虑的唯一不包括从左到右自回归语言建模的预训练模型。

双向编码器对于SQuAD至关重要。正如之前的工作(Devlin等,2019年)所指出的,仅从左到右的解码器在SQuAD上表现不佳,因为未来上下文在分类决策中至关重要。然而,BART在仅有一半双向层的情况下实现了类似的性能。

预训练目标并非唯一重要因素。我们的排列语言模型表现不如XLNet(Yang等,2019年)。这种差异可能是由于没有包括其他的架构改进,比如相对位置嵌入或段落级递归。

纯粹的语言模型在ELI5上表现最好。ELI5数据集是一个异常值,其困惑度远高于其他任务,并且是唯一其他模型超越BART的生成任务。一个纯粹的语言模型表现最好,这表明当输出只是松散受输入约束时,BART的效果不佳。

BART实现了最一致的强大性能。除了ELI5之外,使用文本填充的BART模型在所有任务上都表现良好。

这些论文段落的翻译如下:

大规模预训练实验

最近的研究表明,当预训练扩大到大批量大小和语料库时,下游任务的性能可以得到显著提升(Yang等,2019年;Liu等,2019年)。为了测试BART在这种范围内的性能,并且为下游任务创建一个有用的模型,我们使用与RoBERTa模型相同的规模来训练BART。

实验设置

我们预训练了一个大型模型,在编码器和解码器中各有12层,隐层大小为1024。跟随RoBERTa(Liu等,2019年)的做法,我们使用8000的批量大小,并训练模型500000步。文档被同GPT-2(Radford等,2019年)一样的字节对编码进行分词。基于第4节的结果,我们使用文本填充和句子排列的组合。我们在每个文档中掩蔽30%的token,并排列所有句子。尽管句子排列只在与其他方法结合时显示出显著的累积收益。

在CNN/DM摘要数据集上,我们假设更大的预训练模型可能更能从这个任务中学习。为了帮助模型更好地适应数据,我们在训练的最后10%的步骤中禁用了dropout。我们使用与Liu等人(2019年)相同的预训练数据,包括160GB的新闻、书籍、故事和网络文本。

区分性任务

表2比较了BART在众所周知的SQuAD和GLUE任务上与几种最近方法的性能(Warstadt等,2018年;Socher等,2013年;Dolan & Brockett,2005年;Aguirre等,2007年;Williams等,2018年;Dagan等,2006年;Levesque等,2011年)。最直接可比的基线是RoBERTa,它是用相同的资源但不同目标进行预训练的。总的来说,BART的性能与其他模型相似,模型之间的差异很小,这表明BART在生成任务上的改进并不以牺牲分类性能为代价。

image.png
表 2:大型模型在 SQuAD 和 GLUE 任务上的结果。 BART 的性能与 RoBERTa 和 XLNet 相当,这表明 BART 的单向解码器层不会降低判别任务的性能。

生成任务

我们还尝试了几个文本生成任务。BART被微调为标准的序列到序列模型,从输入到输出文本。在微调期间,我们使用一个带标签平滑的交叉熵损失(Pereyra等,2017年),平滑参数设置为0.1。在生成时,我们将beam大小设置为5,移除beam搜索中的重复三元组,并调整了模型的最小长度、最大长度、长度惩罚,在验证集上(Fan等,2017年)。

摘要

为了与当前摘要任务的最新技术进行比较,我们在两个具有不同特点的摘要数据集CNN/DailyMail和XSum上展示了结果。

CNN/DailyMail中的摘要倾向于与源句子相似。抽取式模型在这里做得很好,甚至仅用前三个源句子作为基线的表现也非常有竞争力。尽管如此,BART在所有已有的工作中表现最好。

相比之下,XSum高度概括,抽取式模型表现不佳。BART在所有ROUGE指标上大约比利用BERT的最佳前作提高了6.0分,这代表了在这一问题上性能的重大进步。在质量上,样本的质量很高(见第6节)。

image.png
表 3:两个标准汇总数据集的结果。 BART 在两项任务和所有指标的总结方面优于之前的工作,在更抽象的数据集上获得了大约 6 个点的收益。

对话

我们评估了在ConvAI2(Dinan等,2019年)上的对话响应生成,在该任务中,代理必须生成基于先前上下文和文本指定的人物的响应。BART在两个自动化指标上超越了先前的工作。

image.png
表 4:BART 优于之前在对话响应生成方面的工作。基于 ConvAI2 的官方分词器重新规范化困惑度。

抽象式问答

我们使用最近提出的ELI5数据集来测试模型生成长篇自由形式回答的能力。我们发现BART在ROUGE-L上比之前最好的工作高出1.2分,但数据集仍然具有挑战性,因为答案仅由问题弱指定。

image.png
表 5:BART 在具有挑战性的 ELI5 抽象问答数据集上取得了最先进的结果。比较模型来自 Fan 等人。 (2019)。

翻译

我们还评估了在WMT16罗马尼亚-英语翻译任务上的表现,并用Sennrich等人(2016年)的反向翻译数据增强。我们使用一个6层的transformer源编码器将罗马尼亚语映射到BART能够去噪成英语的表示,遵循第3.4节介绍的方法。实验结果呈现在表6中。我们将我们的结果与Vaswani等人(2017年)提出的基线Transformer架构进行了比较,使用了Transformer的大规模设置(基线行)。我们展示了我们模型两个步骤在固定BART和调整后的BART行的性能。对于每一行,我们在原始的WMT16罗马尼亚-英语数据上进行实验,并用反向翻译数据增强。我们使用了一个宽度为5的beam和一个长度惩罚α=1。初步结果表明,我们的方法在没有反向翻译数据的情况下效果不佳,并且容易过拟合——未来的工作应该探索额外的正则化技术。
image.png
表 6:WMT’16 RO-EN 上基线和 BART 的性能 (BLEU),并用反向翻译数据增强。 BART 通过使用单语英语预训练,在强大的反向翻译 (BT) 基线上进行了改进。

定性分析

BART在摘要指标上显示出大幅度的提升,相比之前的最先进技术高出多达6分。为了理解BART在自动化指标之外的表现,我们定性地分析了它的生成文本。

表7展示了BART生成的摘要示例。示例取自WikiNews文章,这些文章在预训练语料库创建之后发布,以排除模型训练数据中描述的事件出现在模型训练数据中的可能性。跟随Narayan等人(2018年)的做法,我们在总结之前移除了文章的第一句话,所以不会有简单的抽取式摘要。

不出所料,模型输出流畅且语法正确。然而,模型输出也高度概括,从输入中复制的短语很少。输出通常也是事实上准确的,并且结合了来自输入文档的支持证据和背景知识(例如,正确完成名称,或推断PG&E在加利福尼亚州运营)。在第一个例子中,推断鱼类保护珊瑚礁免受全球变暖影响需要从文本中进行非平凡的推理。然而,声称该工作发表在《科学》杂志上的说法并未得到来源的支持。

这些样本展示了BART预训练学习到了自然语言理解和生成的强大组合。
image.png

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

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

相关文章

C语言编译器(C语言编程软件)完全攻略(第二十七部分:VS安全函数问题(C语言安全函数)是怎么回事?如何解决?)

介绍常用C语言编译器的安装、配置和使用。 二十七、VS安全函数问题(C语言安全函数)是怎么回事?如何解决? 在 VS(Visual Studio)下编译C语言程序,如果使用了 scanf()、gets()、strcpy()、strca…

【Windows】之微软输入法配置小鹤双拼

前言 Windows 自带的输入法微软输入法本身就是个最简洁、最方便的输入法,不需要去安装多余的第三方输入法软件。同时,微软中文拼音输入法支持双拼输入法,但微软自带的双拼输入法不包含小鹤双拼方案的。所以,在这里将会讲解如何配置…

oracle 补齐数字长度 to_char踩坑

oracle的to_char网上找到的说明如下 (1)用作日期转换: to_char(date,格式); select to_date(2005-01-01 ,yyyy-MM-dd) from dual; select to_char(sysdate,yyyy-MM-dd HH24:mi:ss) from dual; (2)处理数字&#xf…

深入理解Vue3中的自定义指令

Vue3是一个流行的前端框架,它引入了许多新特性和改进,其中之一是自定义指令。自定义指令是一种强大的功能,可以让开发者在模板中直接操作 DOM 元素。本文将深入探讨 Vue3中的自定义指令,包括自定义指令的基本用法、生命周期钩子函…

面试之线程状态

1.线程有哪些状态 1.1Java线程的六种状态 Java 线程六种状态 新建 当一个线程对象被创建,但还未调用 start 方法时处于新建状态 此时未与操作系统底层线程关联 可运行 调用了 start 方法,就会由新建进入可运行 此时与底层线程关联,由操作…

leetcode算法题之递归--综合练习(一)

此专题对我们之前所学的关于递归的内容进行一个整合,大家可以自行练习,提升自己的编码能力。 本章目录 1.找出所有子集的异或总和在求和2.全排列II3.电话号码的字母组合4.括号生成5.组合6.目标和7.组合总和8.字母大小写全排列9.优美的排列 1.找出所有子…

数据库的连接

连接数据库 我们使用WinR输入cmd打开运行窗口 输入:sqlplus并回车 输入用户名和密码,我用的是Scott,密码我自己设置的123456,Scott默认的密码是tiger,回车 这种情况表示登录成功 在连接Scott成功的情况下创建一些数据,在我的资源里面有个Oracle数据基础可以下载,直接复制粘…

快速了解云计算与云原生

快速了解云计算与云原生 云计算云原生DevOps容器持续交付微服务 云计算 在讲云原生之前,先来讲讲云计算 其中云原生属于技术架构理念,而云计算提供应用所需的基础资源,云计算是云原生的基础,两者是相辅相成的 云计算简单来说&a…

嵌入式(四)定时器 | 定时器功能 分类 定时器工作模式 寄存器全介绍

文章目录 1 定时器工作原理2 定时器功能3 定时器分类3.1 定时器13.2 定时器23.3 定时器3和定时器43.4 睡眠定时器3.5 看门狗定时器 4 定时器工作模式4.1 自由运行模式4.2 模模式4.3 正计数/倒计数模式 5 定时器1寄存器5.1 计数寄存器5.2 计数控制寄存器 6 定时器的两种使用方式…

网络报文分析程序的设计与实现(2024)

1.题目描述 在上一题的基础上,参照教材中各层报文的头部结构,结合使用 wireshark 软件(下载地址 https://www.wireshark.org/download.html#releases)观察网络各层报文捕获,解析和分析的过程(如下 图所示&a…

【Linux基础】Linux主要指令的详解(指令补充)

1.cp指令(重要) 语法: cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指…

pytorch集智-2单车预测器

完整代码在个人主页简介链接pytorch路径下可找到 1 单车预测器1.0 1.1 人工神经元 对于sigmoid函数来说,w控制函数曲线的方向,b控制曲线水平方向位移,w控制曲线在y方向的幅度 1.2 多个人工神经元 模型如下 数学上可证,有限神经…

Linux查找命令@which、find

目录 which概念语法作用 find概念语法按文件名查找按文件大小查找 作用演示一演示二演示三 通配符 which 概念 which 是一个常用的 Linux/Unix 命令,用于查找并显示指定命令的绝对路径。 语法 which 要查找的命令 》无参数。 》 which后面,跟要查找绝对…

【CentOS 7.9】死机卡住如何处理

一、解决办法 1.打开tty2 按下组合键:ctrl alt F2 进入 tty2 2.进入 root 权限 su root3.杀死该用户的所有进程(相当于 windows 里面的注销用户) 请注意,用户名应该全部使用小写字母,如我的用户名叫 Ragdoll&am…

摄像头视频录制程序使用教程(Win10)

摄像头视频录制程序-Win10 🥗介绍🍛使用说明🚩config.json 说明🚩启动🚩关闭🚩什么时候开始录制?🚩什么时候触发录制?🚩调参 🥗介绍 检测画面变化…

Javaweb之Mybatis的基础操作之查询操作的详细解析

1.6 查询 1.6.1 根据ID查询 在员工管理的页面中,当我们进行更新数据时,会点击 “编辑” 按钮,然后此时会发送一个请求到服务端,会根据Id查询该员工信息,并将员工数据回显在页面上。 SQL语句: select id,…

大型语言模型的幻觉问题

1.什么是大模型幻觉? 在语言模型的背景下,幻觉指的是一本正经的胡说八道:看似流畅自然的表述,实则不符合事实或者是错误的。 幻觉现象的存在严重影响LLM应用的可靠性,本文将探讨大型语言模型(LLMs)的幻觉问题&#x…

求两个数之间的最小公约数

目录 前言 方法:求两个数之间的最小公约数 1.欧几里得算法 2.枚举法 3.公共因子积 4.更相减损术 5.Stein算法 解题:在链表中插入最大公约数 总结 前言 今天刷每日一题:2807. 在链表中插入最大公约数 - 力扣(LeetCode)…

基于X86的助力智慧船载监控系统

船载综合监控系统结合雷达、AIS、CCTV、GPS等探测技术,以及高度融合的实时态势与认知技术,实现对本船以及范围内船舶的有效监控,延伸岸基监控中心监管范围,保障行船安全,为船舶安全管理部门实现岸基可控的数据通信和动…

第 121 场 LeetCode 双周赛题解

A 大于等于顺序前缀和的最小缺失整数 模拟&#xff1a;先求最长顺序前缀的和 s s s &#xff0c;然后从 s s s 开始找没有出现在 n u m s nums nums 中的最小整数 class Solution { public:int missingInteger(vector<int> &nums) {unordered_set<int> vis(…