参考文章:【NLP】Google BERT模型原理详解 - 知乎
1.BERT模型
BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的。模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
增强encoder所产生向量
其中:
- Token Embeddings是词向量,第一个单词是CLS标志,可以用于之后的分类任务
- Segment Embeddings用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务
- Position Embeddings和之前文章中的Transformer不一样,不是三角函数而是学习出来的
之前的方法中,position embeddings中所用的相对方法(既是该词与其他词的相对距离)是使用三角函数算出来的。
Mask:
在输入句子中随机mask15%的词,然后让模型来预测,此时增加模型对该词上下文的相关性理解。
例如在上面的句子中,我们随机mask掉dog,likes,然后我们在embedding阶段的时候是可以的出来该两个词的根据上下文的预测结果,然后根据这个预测结果来训练模型,增加模型理解上下文的能力。
Next Sentence Prediction:
通过随机的选取一些句子,可以是连续的也可以是不连续的,在pre-trainning阶段对其进行训练,连续的结果为1,不连续的结果为0,以此来训练出模型中对句子连续关系的适应性。
mask与next sentence prediction相结合,可以学习到一个很好的pre-trainning的模型。
Fine-tunning
分类:对于sequence-level的分类任务,BERT直接取第一个[CLS]token的final hidden state,加一层权重后softmax预测label proba:。
例如取[CLS]token的final hidden state往后加全连接层做分类任务,用分类标注的数据fine-tunning bert 中的参数和全连接层中的数据。
至于为什么取第一个[CLS]token的final hidden state是因为其他词的final hidden state中都带有对这个词的理解,而对[CLS]token他是没有意思的,所以他的表示直接便是句子的意思的理解。
其他的预测任务有其对应的调整,如图: