BERT论文翻译
Posted 我家大宝最可爱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BERT论文翻译相关的知识,希望对你有一定的参考价值。
文章目录
概述
- Bidirectional Encoder Representations from Transformers
- 联合所有层的上下文信息从ublabel文本中训练双向表示
- 预训练的BERT只需要一个额外的输出层就可以微调,并且无需修改任务架构既可以得到最先进的模型.
我觉得这是因为bert主要解决的是NLU问题,所有的文本问题其实还是要依赖与文本理解,文本理解做好了,其他任务只需要把自己的底层修改就可以了
不管是句子层面还是词汇层面的任务,不一定必须从左到右阅读,例如文本分类,只能问答等,因此提出了带掩码的语言模型
如果任务本身就是标准的语言模型,即语言生成模型,那么肯定需要left-to-right,但如果不是,那么就可以用别的方式来建模,这么说的话ELMo其实已经是这种想法了额。
1. 简介
语言预训练模型已经被证明对很多NLP任务是有效的,包括自然语言推理和释义等句子级别的任务,以及命名实体识别和问答等token级别的任务。
将预训的语言表示应用与下游任务的现有策略有两种:基于特征和微调。
- 基于特征的方法:例如ELMo,使用特定的任务结构,预训练表示作为附加的特征。
- 基于微调的方法:例如GPT,引入了最小的任务特定参数,并通过简单的微调了所有预训练参数来训练下游任务。
这两种方法在预训练期间有相同的目标函数,都使用单向语言模型去学习通用语言表示
这些结构都是用单向语言模型进行预训练,这限制了预训练潜力,特别是对于fine-turning。例如GPT使用了left-to-right结构,每一个token只能关注到transformer之前的token信息。
单向结构对于句子级别的任务是次优的,但是对于token级别的任务就会有害了,因为token级别的任务中,从两个方向结合上下文是非常重要的
bert受完型填空任务启发,使用MLM(mask lanuage model)预训练来缓解前面提到的单向性约束。MLM随机从输入中mask一些token,目标是通过上下文预测mask位置中原来单词id。left-to-right预训练模型只能使用left来预测right,或者使用right预测left,而MLM使用left和right上下文共同预测缺失的中心词,这样就可以训练一个双向的Transformer。也就是说Transformer训练的时候不需要mask后面的了
。除了使用masked language model,也使用了next sentence prediction联合预训练文本对表示
2. 相关工作
2.1 基于无监督特征的方法
广泛使用的词向量一直是个活跃的领域,包括传统方法和神经网络方法(word2vec,fasttext)。预训练的词嵌入是现代NLP任务中不可或缺的一部分,与从头开始学习embedding相比,预训练得到的embedding效果更好。
- 直接训练一个LM来得到词向量
- 使用word2vec的方式来得到词向量
这些方法已经推广到了更粗的粒度,包括句子嵌入和段落嵌入
- 目标是通过对下一个句子进行排序
- 给定上一个句子的representation,生成下一个句子的representation
- 去噪自动编码器
ELMo将传统的词嵌入沿不同的维度进行了推广,从左到右,从右到左两个方向提取上下文的相关特征,然后拼接起来得到动态的词嵌入。ELMo提升了几个NLP任务的基准,包括问题问答,情感分析和命名实体识别。ELMo主要是基于特征的,而不是深度双向的。费堵死等人表明完形填空任务可以用于提高文本生成模型的鲁棒性。
2.2 无监督微调方法
从无标签的文本中学习句子和文档的表达,在有简单下游任务中进行fine-turning。left-to-right语言模型和自编码器已经被用在预训练模型中。
2.3 迁移学习
有许多工作表明,从大型数据集训练好的监督模型可以有效的转移到其他任务上。例如自然语言推理和机器翻译。CV研究证明从大型预训练模型迁移学习的重要性,其中一个有效的方法是微调使用ImageNet预训练模型
3. BERT
介绍一下bert的细节,主要分为两个步骤
- 预训练(pre-training)通过不同的预训练任务在未标记的数据上进行训练,预训练任务主要未MLM和NSP两个任务。
- 微调(fine-tuning)。首先使用预训练的参数进行初始化,然后使用来自下游任务的标记数据对所有参数进行微调。每一个下游任务都会有一个微调模型,但是都是使用相同的预训练模型参数进行初始化
bert的一个显著特点是可以用同一个架构解决不同的NLP任务。预训练任务架构和最终的下游任务架构之间存在细微差别
Model Architecture
使用多层双向Trasnformer编码器。层数使用
L
L
L,隐含层大小未
H
H
H,多头注意力个数为
A
A
A。主要整理了两个模型结果BERT_base(
L
=
12
,
H
=
768
,
A
=
12
L=12,H=768,A=12
L=12,H=768,A=12,参数量为110M)和BERT_large(
L
=
24
,
H
=
1024
,
A
=
16
L=24,H=1024,A=16
L=24,H=1024,A=16,参数量为340M)
BERT_base使用与GPT相同的参数。但是BERT使用双向的self-attention,然后GPT由于使用了单向的语言模型,只能关注左侧的attention
Input/Output Representations
用了让BERT可以处理各种NLP任务,在输入中加了一个标记字符
S
E
P
SEP
SEP可以明确表示是一个句子还是一对句子<Question,Answer>。句子不一定是完整的一句话,任意截取都可以。【我喜欢中国】是一个完整的句子,【欢中国】也是一个句子,可以随意截取
。序列是指输入到bert中的token序列,可以是一个句子,也可以是一对句子。
使用WordPiece方法分词,的带3w个token词汇,每个句子的第一个token都是一个特殊的token([CLS])。该标记对应的最终隐藏状态用作分类任务的聚合序列表示??????
句子对也会被打包成一个句子。有两种方法来区分这个句子
- 使用特殊的token[SEP]切分成两个句子
- 给每个token添加一个标记,表示属于句子A还是句子B
每个token对应的embedding记作E,[CLS]得到的输出向量记作C,每个token对应的输出向量记作T。
对于一个给定的token,输入有三部分家和得到
- token对应的emebdding
- segment(input token type id)用来区分句子A
还是句子B - position embedding
3.1 预训练BERT
没有使用left-to-right和right-to-left任务去训练bert,而是使用两个无监督任务去训练
Task #1: Masked LM 直觉来讲,双向深度语言模型要比left-to-right要准确。但是标准的条件概率语言模型只能允许left-to-right或者right-to-left。ELMo虽然号称的双向的,但是其实是单向的叠加,训练阶段依然是只能看到左侧或者右侧。
为了训练深度双向表达模型,我们简单的随机屏蔽一定百分比的输入标记,然后预测这些被mask的token,这个任务被称为Maseked LM。不过其他文献一般称之为完形填空任务。被mask的token对应的输出向量最后计算softmax,得到每个词汇的的概率。实验中,随机屏蔽15%的wordpiece词汇。这些被屏蔽的token,最后会用[mask]这个特殊符号来代替,然后继续输入到模型中。例如原本的输入是i love you and you love me,假如屏蔽了love,那么现在的输入就变成了i [mask] you and you [mask] me,长度还是一样的,只不过被love被替换成了[mask]
虽然MLM可以获得双向预训练模型,但是跟实际任务是存在gap的。实际任务中可不存在[mask]字符,为了缓解这种情况,在生成mask对应的token时候,有3中方法
- 80%的几率替换成[mask]
- 10%的几率随机替换成另一个token
- 10%的机会维持原来的token
最后得到的输出想想计算交叉熵损失
Task #2: Next Sentence Prediction(NSP) 许多NLP任务是基于理解两个句子之间的关系的,例如QA和NLI。为了训练一个理解句子关系的模型,我们训练了一个二值话的任务,这个任务的数据可以从任何语料库中生成。从预料中抽去两个相邻的句子A和B,50%的几率将A放到B的前面,对应的标签就是IsNext,50%的几率将B放到A的前面,对应的标签就是NotNext,尽管非常的简单,但是证明这个任务对QA和NLI是非常有效的。
Pre-training data 使用BooksCorpus和English Wikipedia。wiki的数据只抽取了text段落,文档级别的预料更容易提取出长的连续序列。
3.2 Fine-tuning BERT
对于文本对任务,通常会对两个句子进行独立编码,然后使用双向attention机制计算。bert使用self-attention机制合并了这两个阶段,把两个句子打包成了一个句子,通过attention之后其实就相当于对两个句子做了相关性计算
在输入端,预训练的句子A和句子B相当于
- 文本复述中的句子对
- 蕴含中的假设对
- 问答中的问题-段落
- 文本分类中退化文本
在输出端,token的输出向量被送到token级别的任务中,例如token标记或者问答问题,[CLS]的输出向量被送到输出层中,以进行分类,例如情感分析
4. 实验
4.1 GLUE(General Language Understanding Evaluation)
为了在GLUE上进行微调,将句子表示成输入序列,使用[CLS]对应的最后隐含层 C C C作为聚合表达,在微调期间,唯一加入的参数是分类层的权重 W W W,其中K是标签的数量,H是隐含层的神经元个数,然计算一个softmax损失 log ( s o f t m a x ( C W T ) ) \\textlog(softmax(CW^T)) log(softmax(CWT))
使用batch_size=32微调3词在所有的GLUE任务数据上。对于每个任务,我们在Dev数据集上选择最好的学习率。我们发现在小数据集上微调BERT_large模型会存在波动,因此多运行几次随机参数,然后选择最佳模型。bert使用双向attention,GPT使用单向attention,除了这点以外,bert和gpt结构几乎相同。
4.2 SQuAD(Stanford Question Answering Dataset) v1.1
斯坦福问大数据集包括了100K个问答数据对,给一个问题和文本段落,段落中包含了问题的答案,这个任务是预测这个问题的答案在段落中的位置。
问答任务中,将问题和段落打包成一个序列,其中问题使用A嵌入,段落使用B嵌入。在微调期间引入一个起始向量S和一个结束向量E。单词i作为答案的起始概率为
P
i
=
e
S
⋅
T
i
∑
j
e
S
⋅
T
j
P_i=\\frace^S \\cdot T_i\\sum_j e^S \\cdot T_j
Pi=∑jeS⋅TjeS⋅Ti,单词j作为结束的概率类似。i,j作为候选范围的分数为
S
⋅
T
i
+
E
⋅
T
j
S \\cdot T_i + E \\cdot T_j
S⋅Ti+E⋅Tj,目标就是最大化这个分数,训练目标是
4.3 SQuAD v2.0
SQuAD v2.0任务是v1.0的扩展,v1.0问题的答案肯定在给定的段落中,2.0v中的答案可能不在给定的段落中,所以更加现实。做一个简单的扩展,将没有答案的问题认为是开始结束都是指向[CLS]。之前的时候i和j的范围在[CLS]和[SEP]之间,现在i和j可以指向[CLS]
预测的时候,首先计算没有答案的分数
s
null
=
S
⋅
C
+
E
⋅
C
s_\\textnull=S \\cdot C+E \\cdot C
snull=S⋅C+E⋅C
然后计算有答案时候的分数
s
i
j
=
m
a
x
j
>
i
S
⋅
T
i
+
E
⋅
T
j
s_ij=max_j>iS \\cdot T_i + E \\cdot T_j
sij=maxj>iS⋅Ti+E⋅Tj
如果KaTeX parse error: Undefined control sequence: \\tao at position 17: …_ij>s_null+\\̲t̲a̲o̲,可以认为段落中包含了答案,否则认为没有包含答案。KaTeX parse error: Undefined control sequence: \\tao at position 1: \\̲t̲a̲o̲在Dev数据集上进行调试。
4.4 SWAG
SWAG(Situations With Adversarial Generations)
包含113k的句子对,用于评估基于常识的推理。给定一个句子,任务是在四个选项中选择最合理的一个。
微调时,构造四个输入序列,每个序列包含给定的句子和可能的选项,然后输入到BERT中,最后得到的[CLS]的输出向量C经过一个softmax层得到每个选项的分数。
5 Ablation Studies
对BERT多个方面进行消融实验
5.1 Effect of Pre-training Tasks
证明BERT的深度双向性的重要性
- No NSP: 使用MLM训练双向模型,但是没有使用NSP
- LTR & No NSP: 使用标准的left-to-right方式训练LM(language model),而不是训练MLM。left-only constraint应用于微调,因为移除它会造成pre-train和fine-tune不匹配。此外,这个模型没有使用NSP训练。这可以与GPT直接科比,但是使用了更大的训练数据集,我们的输入格式和微调方案。
首先NSP任务会带来影响,移除NSP会损害QNLI,MNLI和SQuAD 1.1的性能。然后通过比较No NSP和LTR & No NSP来评估深度双向表示的影响。LTR模型在所有任务上的表现都比MLM模型差。在MRPC和SQuAD上的下降幅度很大。
对于SQuAD,很明显LTR模型在预测token级别的任务效果不佳,这是因为token级别的隐含状态没有获取right侧的上下文。为了更准确的加强LTR系统,我们在顶部添加了一个随机初始化的BiLSTM。这确实显著改善了SQuAD的结果,但是结果仍然比双向模型差的多。
可以单独训练left-to-right和right-to-left模型,并且将两个模型token的隐含层拼接到一起,就像ELMo一样但是
- 参数比单个双向模型要翻倍
- 对于QA这样的任务来说不是很直观,QA本身就不是生成模型,一般的LM模型都是条件概率,即 p ( x k ∣ x k − 1 , . . . x 1 ) p(x_k|x_k-1,...x_1) p(xk∣xk−1,...x1),但是QA不受这种约束,所以不合适使用LM来建模
- 严格来说不如深度双向模型强大,因为可以在每一层使用上下文?????
5.2 Effect of Model Size
探索不同模型尺寸在微调任务上的性能。训练一个BERT使用不同的层数,隐含层数量和attention head,但是超参和训练过程时一致的。模型尺寸越大,提升的效果越好,但是增加到一定的程度将不会再有所提升。
5.3 Feature-based Approach with BERT
前面提到的所有任务都是使用微调的方式,即再预训练模型之后添加一个简单的分类层,然后将所有参数在下游任务上进行联调。然而,从预选连模型中提取固定特征具有一i的那个的优势,首先,并不是所有的任务都很容易用一个Transformer编码器架构来表示,因此需要添加一个特定任务的模型架构,其次,预先在大规模数据集上训练得到特征,然后在此特征之上使用更简单的模型运行许多实验,这有很大的计算优势。简单的说就是
- 预训练模型得到特征
- 根据下游任务设计模型结构
- 使用预训练特征作为模型输入
个人猜测
- 基于微调:在预训练模型上增加下游任务结构,然后更新所有参数
- 基于特征:预训练模型保持不变,只是输入出特征,相当于是word2vec,只更新下游模型参数
以上是关于BERT论文翻译的主要内容,如果未能解决你的问题,请参考以下文章
论文阅读 | COMPRESSING BERT: STUDYING THE EFFECTS OF WEIGHT PRUNING ON TRANSFER LEARNING