【BERT】从零解读笔记

一、BERT 整体模型架构


BERT的encoder部分,主要分成了三个内容:输入部分、多头注意力机制、前馈神经网络。

1. 为什么说是基础架构呢?

因为BERT使用的是多个encode堆叠在一起,其中BERT-base使用的是12层encoder,BERT-large使用的是24层的encoder。

注意:有一点十分容易混淆,是12层encoder,而不是12层transformer。transformer在文章中应该是6个encoder堆叠在一起形成编码端,6个decoder堆叠在一起形成解码端。

2. 输入部分
在这里插入图片描述
CLS的作用:将CLS的输出向量接一个二分类器去做一个二分类任务

CLS的误解
CLS向量不能代表语义信息。
CLS用来做一个二分类任务,但与编码整个句子的语义信息这个任务相去甚远,所以,用CLS去无监督的做文本相似度任务时,效果会非常的差

BERT预训练模型直接拿来作sentence embedding效果甚至不如word embedding,CLS的embedding效果最差。

二、如何做BERT预训练:MLM+NSP

BERT使用的是大量的无标注语料

MLM-掩码语言模型——AR
也就是autoregressive,我们称之为自回归模型;只能考虑单侧的信息,典型的就是GPT

无监督目标函数——AE

也就是autoencoding,我们称之为自编码模型;从损坏的输入数据中预测重建原始数据。可以使用上下文的信息

【我爱吃饭】
AR:
 P(我爱吃饭) = P(我)P(爱|我)P(吃|我爱)P(饭|我爱吃);
AE:
 mask之后:【我爱mask饭】
 P(我爱吃饭|我爱mask饭)=P(mask=吃|我爱饭)

mask的本质是在打破文本的信息,让其重建文本

mask的缺点
mask之后变成【我爱 mask mask】
优化目标:P(我爱吃饭 | 我爱 mask mask)=P( 吃|我爱)P(饭|我爱)

文章中mask概率问题

随机mask 15%单词,80%替换为mask,10%替换成其他,10%保持不变。

mask代码实践

NSP任务
样本如下:

  • 从训练语料库中取出两个连续的段落作为正样本
  • 从不同的文档中随机创建一对段落作为负样本

缺点:主题预测和连贯性预测合并为一个单项任务。 因为存在了主题预测,结果变得简单了起来。

如何微调BERT
在这里插入图片描述

三、如何提升BERT下游任务的表现

一般做法:1. 获取谷歌中文BERT;2.基于任务数据进行微调。

四步骤:

  1. 在大量通用语料上训练一个LM(Pretrain);–中文谷歌BERT
  2. 在相同领域 上继续训练LM(Domain transfer);–在大量微博文本上继续训练这个BERT
  3. 在任务相关的小数据上继续训练LM(Task transfer);—在微博情感文本上(有的文本不属于情感分析的范畴)
  4. 在任务相关数据上做具体任务(Fine-tune)。-

先Domain transfer,再进行Task transfer,最后Fine-tune,性能是最好的。

如何在相同领域数据中进行further pre-training

  1. 动态mask:BERT在训练的时候用的是静态的mask,而动态mask就是每次epoch去训练的时候mask,而不是一直使用同一个;
  2. n-gram mask:其实比如ERNIE和SpanBert都是类似于做了实体词的mask

参数

  • Batch size:16,32 影响不大
  • Learning rate(Adam):5e-5,3e-5,2e-5,尽可能小一点,避免灾难性遗忘
  • Number of epochs:3,4
  • Weighted decay修改后的adam,使用warmup,搭配线性衰减

预训练:数据增强、自蒸馏、外部知识的融入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值