【动手学深度学习v2】预训练—1 BERT

NLP迁移学习

  • 使用预训练好的模型来抽取词、句子的特征(word2vec/语言模型)
  • 不更新预训练好的模型
  • 构建新的网络抓取新任务需要的信息
    (预训练抽取底层特征作为embedding,word2vec忽略时序信息,语言模型也只看了一个方向)

BERT的动机

  • 基于微调的NLP模型,参考CV
  • 预训练模型抽取足够多的信息
  • 新的任务只需增加一个简单的输出层 output layer

BERT架构

  • 只有编码器的Transformer
  • Base:#blocks=12, hidden size=768, #heads=12, #parameters=110M
  • Large: #blocks=24, hidden size=1024, #heads=16, #parameters=340M
  • 在大规模数据上训练(wiki pedia+一些书),用了>3B词

BERT相对于Transformer的创新

对输入的修改

bert input

  • Input:每个样本是一个句子对;<cls> classification作为句子对开头,<sep> seperate两个句子中间和结尾
  • Token Embeddings:词嵌入
  • Segment Embeddings:e_A和e_B来区分两个句子,e_A是0,e_B是1
  • Position Embeddings:是可学习的

预训练任务1:带掩码的语言模型

做一个通用的任务,使得在这个任务上学习到的信息可应用到其他任务。NLP中最通用的任务是语言模型,即根据一个词预测下一个词,但对于BERT,Transformer的encoder是双向的,标准LM(语言模型)要求单向;

改进:带掩码的LM每次随机(15%概率)将一些词元换成<mask>【完形填空】

在微调任务中没有<mask>,为了使得对<mask>不那么敏感,如下操作:

  • 80%概率将选中词元变成<mask>
  • 10%换成随机词元
  • 10%保持原有词元

预训练任务2:下一句子预测

预测一个句子对中两个句子是不是相邻
训练样本中:

  • 正样本:50%概率选择相邻句子对 <cls> this movie is great <sep> like it <sep>
  • 负样本:50%概率选择随机句子对 <cls> this movie is great <sep> hello world<sep>

将<cls>对应的输出放到一个全连接来预测,预测是否相邻

总结

BERT针对微调设计,在大文本上训练模型,把输出层改一改
基于Transformer的Encoder做了如下修改:

  • 模型更大,训练数据更多,1B词
  • 输入句子对,片段嵌入(segment embedding),可学习的位置编码
  • 训练时使用两个任务:带掩码的语言模型,预测句子是否相邻
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值