简介
众所周知bert的encoder 形式不适合做生成式任务。transformer decode形式在生成式方面有着非常好的表现。
bart 基本就是一个标准的sequence to sequence形式的transformer。其在文本摘要,问答 等方面有着sota 的表现。
模型介绍
bart 基本是标准的sequence to sequence形式的transformer,只不过其中的激活函数换成了gelu。
tensorflow bert源码中
def gelu(input_tensor):
cdf = 0.5 * (1.0 + tf.erf(input_tensor / tf.sqrt(2.0)))
return input_tesnsor*cdf
base也是6个encoder与6个decode,large是12个encoder与12个decode,与transformer一致。
这里我就有点迷了。他说bert 在预测单词时还有一个额外的fc层,bart没有。而我记得bert并没有啊,就是最后一层的输出去做预测。于是我又看了一下bert原文
bert原文中也是直接最后一层的输出去做预测。bart这里把我搞迷了。
预训练
破坏掉原始文本,然后让模型去还原。使用交叉熵损失。
具体的预训练任务如下:
Token Masking:同bert。
Token Deletion:删除token,与Token Masking不同的是模型还要预测在哪个位置删除的。
Text Infilling: 填文字,缺失的文字片段,片段的长度服从泊松分布,每个文字也是mask的形式。
Sentence Permutation:句子排列, 根据标点把句子顺序打乱,使其还原。
Document Rotation:随机选取一个文本让其与其之后的移到最前面,然后让模型去确定哪个句子是最开始的。
fintune
Sequence Classification Tasks : 句子分类任务,把同样的文本分别输入到encoder和decoder,用decoder 最后一层的最后一个token,一般是end token,对应bert的cls 去做分类预测。
Token Classification Tasks:单词分类任务,如判断哪个单词是答案的结束点。用decoder 最后一层每个token去预测。
Sequence Generation Tasks:
文本生成任务。 由于decode 非常适合生成式任务,因为预训练阶段就是生成式的训练,可以直接用于摘要提取,问答dintune等等。
Machine Translation: transformer 论文就去做翻译的。