Zhangzhe's Blog

The projection of my life.

0%

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

URL

TL;DR

  • 一种 用于语义理解的预训练深层双向 transformer,任务相关的 fine-tuning 即可 SOTA
  • BERT 全称:Bidirection Encoder Representation from Transformer
  • 使用 无标签文本 进行预训练,自监督预训练的方法包括:
    • masked language model:预测被遮挡的词的 token(不需要重建整个句子)
    • next sentence prediction:预测两个句子是否是前后相连的关系(只需预测 是 或者 否)

Algorithm

自监督语义表征方法

  • 自监督语义表征方法常用的监督方法有两种:

    • feature based:任务相关的预训练
    • fine-tuning:在预训练过程中增加任务相关参数,预训练结束后只需要替换这些任务相关参数,在任务数据上有监督 end-to-end fine-tuning 很少 step 即可
  • 相较于 GPT 的 left -> right 单向语义结构,双向语义结构对下游任务更友好

BERT 模型结构

  • BERT 参数含义:
    • L:transformer layers
    • H:hidden size
    • A:self-attention heads
  • BERTbase(L=12,H=768,A=12,Total Parameters=110M)BERT_{base}(L=12,H=768,A=12,Total\ Parameters=110M)
  • BERTlarge(L=24,H=1024,A=16,Total Parameters=340M)BERT_{large}(L=24,H=1024,A=16,Total\ Parameters=340M)

BERT 输入输出结构

bert1.png

输入

  • BERT 输入可以是一个句子,也可以是多个句子的 concat(用特殊分隔符分隔),例如问答数据集中,输入的句子是 <question, answer> concat
    • [CLS] 为 Sequence 开始标志位
    • [SEP] 为 Sentence 结束标志位
  • Token Embeddings 是将句子转化成词向量,英文版本 BERT 用的分词器是 WordPiece embeddings,词表容量 30,000
  • Segment Embeddings 用于指明句子如何分割
  • Position Embedding 用于记录原始位置信息(与 CNN 不同,Transformer 中没有位置信息)

输出

bert3.png

其中:CRH, TiRH,  H means hidden sizeC\in \mathbb{R}^H,\ T_i \in \mathbb{R}^H,\ \ H\ means\ hidden\ size

BERT 预训练细节

Masked Language Model

  • mask 策略:

    • 训练数据随机 mask 15% 的位置
    • mask 数据的 80% 使用 [MASK] token 去 mask
    • mask 数据的 10% 使用随机 token 去 mask
    • mask 数据的 10% 什么都不改变
  • 计算 loss

    • 假如第 ii 个 token 被 mask,那只计算输出 TiT_i 映射到词表空间的 token 分布和真实 token 之间的交叉熵 Loss(本质就是分类)

Next Sentence Prediction

  • 数据生成策略:

    • 每个样本由两个句子组成,50% 的可能两个句子是前后句的关系,50% 的可能两个句子不是前后句的关系,预测 IsNext OR NotNext
  • 计算 loss

    • 只用输出 C 映射到二分类空间的结果和二分类 label,计算交叉熵损失
  • NSP 数据集中,无监督预训练即可达到 97% - 98% 的准确率

BERT fine-tuning

  • 对于不同的任务,只需要替换 BERT 之后的网络结构,使用有监督数据 end-to-end fine-tuning 即可

消融实验

bert4.png

分析了 NSP、双向网络结构等对效果的影响

效果对比

bert2.png