前面已经介绍了transformer,理解了transformer,那么理解bert就简单多了。对transformer不是很了解的可以跳转到https://blog.csdn.net/one_super_dreamer/article/details/105181690

Bert简介

BERT来自Google的论文Pre-training of Deep Bidirectional Transformers for Language Understanding,BERT是”Bidirectional Encoder Representations from Transformers”的首字母缩写。如下图所示,BERT能够同时利用前后两个方向的信息,而ELMo和GPT只能使用单个方向的。

Bert模型详解和训练实例

BERT使用的是Transformer模型,使用的是transformer的encoder部分。那它是怎么解决语言模型只能利用一个方向的信息的问题呢?答案是它的pretraining训练的不是普通的语言模型,而是Mask语言模型。在介绍Mask语言模型之前我们先介绍BERT的输入表示。

Bert模型详解和训练实例

如何训练Bert

第一种方法:随机mask掉部分词汇,让机器去学习

为了解决只能利用单向信息的问题,BERT使用的是Mask语言模型而不是普通的语言模型。Mask语言模型有点类似与完形填空——给定一个句子,把其中某个词遮挡起来,让人猜测可能的词。这里会随机的Mask掉15%的词,然后让BERT来预测这些Mask的词,通过调整模型的参数使得模型预测正确的概率尽可能大,这等价于交叉熵的损失函数。这样的Transformer在编码一个词的时候会(必须)参考上下文的信息。

但是这有一个问题:在Pretraining Mask LM时会出现特殊的Token [MASK],但是在后面的fine-tuning时却不会出现,这会出现Mismatch的问题。因此BERT中,如果某个Token在被选中的15%个Token里,则按照下面的方式随机的执行:

  • 80%的概率替换成[MASK],比如my dog is hairy → my dog is [MASK]
  • 10%的概率替换成随机的一个词,比如my dog is hairy → my dog is apple
  • 10%的概率替换成它本身,比如my dog is hairy → my dog is hairy

这样做的好处是,BERT并不知道[MASK]替换的是哪一个词,而且任何一个词都有可能是被替换掉的,比如它看到的apple可能是被替换的词。这样强迫模型在编码当前时刻的时候不能太依赖于当前的词,而要考虑它的上下文,甚至更加上下文进行”纠错”。比如上面的例子模型在编码apple是根据上下文my dog is应该把apple(部分)编码成hairy的语义而不是apple的语义。

Bert模型详解和训练实例

第二种方法:预测两个句子是否连接在一起

特殊字符也需要编码。如下图左边的句子应该连在一起情况,但是右边的两个句子不应该连在一起情况。[cls]在进行编码的时候会考虑右边的所有结果,在编码时会判断是否应该连在一起。在对[cls]进行编码的时候也需要做一个分类任务,就是一个二分类任务,输出结果是判断两个句子是否应该连在一起。

Bert模型详解和训练实例

 

持续更新中...........

相关文章:

  • 2021-08-28
  • 2021-12-18
  • 2021-12-30
  • 2021-04-18
  • 2022-12-23
  • 2021-09-11
  • 2021-10-08
猜你喜欢
  • 2022-12-23
  • 2021-06-18
  • 2021-06-27
  • 2021-07-08
  • 2021-09-12
  • 2021-06-27
  • 2021-09-17
相关资源
相似解决方案