to do: 补图片链接

《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》 阅读笔记

[toc]

Warning : 本文跳过了原论文中大量的数据列举

BERT : Bidirectional Encoder Representation from Transformer

特点

  • "Bidierectional" :不同于 GPT(Generate Pre-training Transformer) 的从左到右的体系结构——Attention 层中的每个 token 只能注意到它左侧的 token,BERT 的体系结构是双向的,也就是可以同时注意到左侧上下文和右侧上下文
  • "Transformer" : ELMo(Embedding from Language Model) 的双向 LSTM 也可以利用到左侧上下文和右侧上下文的信息,但是 BERT 是基于 Transformer 的,比基于 LSTM 的 ELMo 效果更好

Pre-training : Why&How

Why

Language model pre-training has been shown to be effective for improving many natural language processing tasks.

感性理解:学习新知识,基于已有的相关知识进行学习显然优于啥都不会从头开始

How

feature-based (基于特征):ELMo

fine-tuning (微调):GPT、BERT

Feature-based

从上下文中提取信息并和模型已经训练好的 Word Embedding 一起调整这个单词实际的 Word Embedding

Fine-tuning

把在源数据集上训练的源模型的能力迁移到新数据新模型上

BERT 模型结构

输入输出表示

为了处理多样的下游任务,BERT 模型的输入既可以支持输入单一句子,也可以支持输入一个句子对

每个输入序列的第一个 token 是一个特殊的分类嵌入编码(  [CIS]\text{ [CIS]} ),最后一层的隐藏状态会与这个 token 有关,如果此时模型解决的是分类任务,那么这个位置的状态中就会蕴含整个句子的信息。

如果输入的符号表示的序列是一个句子对,那么在两个句子对之间会插入一个特殊的起分隔作用的 token ([SEP]\text{[SEP]}) 。

每个单词有三个 embedding :

  1. 单词 embedding
  2. 句子 embedding,用于区分两个句子
  3. 位置信息 embedding

![](D:\编程\暑假大模型\day1\pic\bert embedding.png)

Masked LM

双向的语言模型可能会使得一个单词间接的“看到自己”,怎么办?

采取一种特殊的 mask 机制!

在输入的语料中随机(输入语料中 15% 的单词)的将一些位置的单词 mask 掉,然后让模型预测该位置的单词,相当于让模型做一个完型填空。

一个缺陷:可能会让模型认为只需要预测被 mask 掉的单词是什么,而无需考虑其余单词,另外,在 fine-tuning 阶段的输入语料中不会含有 mask 标签,也存在数据分布不同的现象。

改进:对于被选中要 mask 的单词

  • 80% 的概率将该单词替换为 [Mask] 标记
  • 10% 的概率将该单词替换为随机单词
  • 10% 的概率不做改变

Next Sentence Prediction

许多重要的下游任务如 Question Answering(QA) 或 Natural Language Inference(NLI) 都是基于对句子间的关系的理解

于是在 BERT 的 Pre-training 中就加入了 NSP(Next Sentence Prediction,预测下一个句子) 的任务

具体来说,输入语料是一个句子对 (A,B)(A,B) ,有 50% 的概率 B 就是出现在 A 后面的句子,有 50% 的概率不是,而在上面的 BERT 的结构图中,最后一层隐藏状态的第一个 token (C) 就是用来表示模型预测 B 是否是 A 的后一个句子

Fine-tuning BERT

fine-tuning 阶段的 BERT 基本只需要调整输出层以及在新的数据集上重新训练一遍,但 fine-tuning 阶段的训练代价远低于 Pre-training 的代价

fine-tuning 时的 BERT 的初始参数完全可以使用 Pre-training 后的 BERT 的参数