BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

论文地址:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

将预训练语言模型应用于下游任务的两种方法

  • feature-based:ELMo——将预训练得到的表征作为feature
  • fine-tuning:OpenAI GPT——通过微调所有的预训练的参数

它们相同点在于都使用了单向的语言模型来学习语言表征;如OpenAI GPT使用了从左到右的结构,那么每一个词在Attention层中只能看到在它前面的那些词,而没有办法结合后面的词。

Bert解决以上问题的方法

“masked language model” (MLM)

MLM模型从输入中随机屏蔽一些token,其目标是仅根据上下文预测掩码单词的原始词汇表id。MLM允许表征融合左右的信息,从而能够预训练一个深度双向Transformer。

“next sentence prediction”

Bert

Bert的工作为两步:pre-training 和 fine-tuning。在pre-training 阶段在不同的预训练任务中,对未标记的数据进行训练。而在fine-tuning阶段中,Bert模型实现使用预训练得到的参数进行初始化,然后使用下游任务中的未标记的数据对这些参数进行微调。
Bert的一个显著特征是可以在不同下游任务之中使用统一的架构。如在下图中,pre-training和fine-tuning的结构是一样的,pre-training中得到的参数被用来初始化fine-tuning中的参数,然后再对这些参数进行微调。假如是一个问答任务,那么输入的格式为[cls] 这里是问题[sep]这里是答案。

在这里插入图片描述
Model Architecture
Bert的模型结构是 multi-layer bidirectional Transformer encoder 。文中的两种模型分别为:其中,L为层数(即有多少个Transformer块),H为隐藏层数量,A为self-attention的头的数量。

在这里插入图片描述
Input/Output Representations
Input Representations:在一个 token sequence既能表示一个句子,又能表示一个句子对。一个“句子”可以是任意一段连续的文本,而不是一个实际的语言句子。
使用WordPiece embeddings,即 30,000个token的语料库,长下面那样。在这里插入图片描述
第一个token是一个特殊的标记([CLS]),句子对被打包到同一个sequence中,我们用两种方法区分这些句子。首先,我们用一个特殊的标记[SEP]将它们分开。其次,我们在每个token中加入一个已学习的embedding,表明它是属于句子a还是句子B。在图1中,把输入的token记为E,特殊标记[CLS]记为C,最终的token记为Ti。
对于给定的token,它的输入表示是通过对相应的token,segment, and position embeddings求和来构造的。在这里插入图片描述

pre-training

Bert使用“masked language model” (MLM)和Next Sentence Prediction (NSP)进行预训练。
masked language model
为了训练一个深层的双向表征,随机地按照一定比例屏蔽一些输入token,然后预测这些masked的token;在这种情况下,masked token对应的最终的hidden vectors通过词汇表被输入softmax中,就像在标准语言模型中一样。原文中的比例是15%。
缺点:由于[MASK]标记在fine-tuning中不会出现,导致了pre-training和fine-tuning之间的不匹配;解决办法:不总是用[MASK]来替代那个被屏蔽的词,具体做法见下图。

在这里插入图片描述
Next Sentence Prediction (NSP)
在许多下游任务之中比如问答系统是建立在对两个句子之间关系的理解之上的,但是在传统的语言模型中并没有被很好的被捕捉。因此,使用Next Sentence Prediction 任务来使得Bert能够更好地理解句子之间地关系。在为每个训练前示例选择句子A和B时,50%的时间B是A后面的下一个句子(标记为IsNext), 50%的时间B是语料库中的一个随机句子(标记为NotNext)。

Fine-tuning BERT
Fine-tuning是很简单的,因为转换器中的自我注意机制允许BERT对许多下游任务(无论它们是单个文本还是文本对)进行建模,通过交换适当的输入和输出。对于涉及文本对的应用程序,一个常见的模式是在应用双向交叉编码之前对文本对进行独立编码。BERT使用了self-attention机制来统一这两个阶段,因为self-attention编码一个连接的文本对有效地包含了两个句子之间的双向交叉注意。
对于每个任务,我们只需将特定于任务的输入和输出插入BERT并对所有参数进行端到端的finetune。在输入端,pre-training的A、B句对应于问答系统中问题、回答;而在输出端,如果是对应于token(理解为单词)的任务,那么就将每个token的表征放到输出层;如果是对应于句子的,就把[cls]对应的表征放到输出层;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值