BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding

embedding

Bert学习小记

input embedding = token embedding + segmentation embedding + position embedding

segment embedding

  • 对于句子对来说(两个句子放在一起训练),EA表示坐标的句子,EB表示右边的句子

  • [CLS]每个序列的第一个标记

    [SEP]句子分开标记

position embedding

  • 由于网络结构中没有RNN,所以无法获得位置信息,所以要构建一个position embedding(引自transformer)

    • Bert学习小记
  • 三个embedding相加

    • embedding的最初本质就是one-hot

Bert的pre-training

两个任务

1、Masked LM策略(MLM)

  • 一般来说,深度双向模型要比单向(left-to-right或right-to-left,每个词只能用这个词左边或者右边的词进行学习)要更强,但是对于标准的语言模型只能使用单向模型,因为双向模型需要每个单词能间接地“观察到自己”(预测的下一个词在给定的序列已经出现的情况)且这个模型能从一个多层文本来预测一个目标词(利用上下文的信息)
  • 把词mask了就不会出现自己预测自己的情况
  • 而使用MLM可以实现深度的双向语言模型
    • 1、随机选取15%的word(word不是 token,全部相同的word都被mask)
    • 2、如果这个词被选取了,那么它有80%的概率被标记上[mask];有10%的概率被标记上随机的token;有10%的概率不做变化
    • 3、预测被mask的word(我们只是预测被mask的word而不是重构整个输入)
  • 如果只选取什么词要mask的话,会有一个缺点:造成pre-training层和fine-tunning层的不匹配(要保持训练任务一致),因为[mask]并不会出现呢在fine-tunning层。所以为了减缓这种影响,对于选取的词会有一定概率不mask
  • 这里使用transformer模型(下面也是)

2、预测下一个句子(NSP:Next Sentence Prediction)

  • 有些重要的NLP下游任务像QA和NLI并不能直接被语言模型捕捉,所以我们为了使预训练模型能理解这些句子之间的关系,我们预训练一个简单的二值任务:一个句子A是不是一个句子B的下一个句子:
    • 我们构造数据集:50%A是B的下一个句子,50%A是一个随机的句子
    • 尽管这种方式非常的简单,但是对于QA和NPI的下游任务非常的适用(The final model achieves 97%-98% accuracy on NSP.)

进行了消融实验后证明,模型的大部分改善来自于两个预训练任务以及他们所带来的双向性

  • 下图为几个模型之间的对比

Bert学习小记

Bert的fine-tunning(迁移策略)

这里的fine-tunning堆模型只用简单的修改

  • 比如情感分析:取第一个token的输出表示 ,给一个softmax分类
  • 比如NER:取最后层的transformer输出给softmax分类

Bert学习小记

Bert+feature-based

  • 因为不是所有的NLP任务都能容易的使用transformer encoder来表示,所以还是需要一个task-specific model结构。这个视任务情况而定。

相关文章:

  • 2022-01-11
  • 2021-08-21
  • 2021-07-14
  • 2022-02-11
  • 2021-08-31
  • 2021-07-25
  • 2022-12-23
猜你喜欢
  • 2021-10-07
  • 2021-04-09
  • 2021-05-21
  • 2022-12-23
  • 2021-11-07
  • 2022-01-28
  • 2021-06-02
相关资源
相似解决方案