BERT系列预训练模型

BERT:Masked Language Modeling预训练模型

论文地址:https://arxiv.org/pdf/1810.04805.pdf

中文翻译:https://zhuanlan.zhihu.com/p/59775981

Language modeling预训练任务

Masked Language Model

完形填空

I study at Julyedu .

80% I study at [MASK] .

10% I study at Apple .

10% I study at Julyedu .

[CLS] I study at [MASK] . [SEP] I love [MASK] language processing . [SEP]

–> transformer encoder

o1, o2, o3, o4, o5, …., o_n

o5 –> Julyedu cross entropy

o10 –> natural cross entropy

o1 –> True cross entropy

BERT说:“我要用 transformer 的 encoders”

Ernie不屑道:“呵呵,你不能像Bi-Lstm一样考虑文章”

BERT自信回答道:“我们会用masks”

解释一下Mask:

语言模型会根据前面单词来预测下一个单词,但是self-attention的注意力只会放在自己身上,那么这样100%预测到自己,毫无意义,所以用Mask,把需要预测的词给挡住。

如下图:

img

Two-sentence Tasks

我们回顾一下OpenAI transformer处理不同任务的输入转换,你会发现在某些任务上我们需要2个句子作为输入,并做一些更为智能的判断,比如是否相似,比如 给出一个维基百科的内容作为输入,同时在放入一条针对该条目的问题,那么我们的算法模型能够处理这个问题吗?

为了使BERT更好的处理2个句子之间的关系,预训练的过程还有一个额外的任务:给定2个句子(A和B),A与B是否相似?(0或者1)

特殊NLP任务

BERT的论文为我们介绍了几种BERT可以处理的NLP任务:

  1. 短文本相似

  2. 文本分类

  3. QA机器人

  4. 语义标注

img

BERT用做特征提取

微调方法并不是使用BERT的唯一方法,就像ELMo一样,你可以使用预选训练好的BERT来创建语境化词嵌入。然后你可以将这些嵌入提供给现有的模型。

img

哪个向量最适合作为上下文嵌入? 我认为这取决于任务。 本文考察了六种选择(与微调模型相比,得分为96.4):

img

  • Feature Extraction:特征提取

  • Finetune:微调

如何使用BERT

BERT源码

查看BERT仓库中的代码:

  1. 该模型在modeling.py(BertModel类)中构建,与vanilla Transformer编码器完全相同。

  2. run_classifier.py是微调过程的一个示例。它还构建了监督模型的分类层。如果要构建自己的分类器,请查看该文件中的create_model()方法。

  3. 可以下载几种预先训练的模型。涵盖102种语言的多语言模型,这些语言都是在维基百科的数据基础上训练而成的。

  4. BERT不会将单词视为tokens。相反,它注重WordPieces。 tokenization.py是将你的单词转换为适合BERT的wordPieces的tokensizer。

可以查看BERT的PyTorch实现 (https://github.com/huggingface/transformers)。

BERT模型的使用

BERT升级版

RoBERTa:更强大的BERT

论文地址:https://arxiv.org/pdf/1907.11692.pdf

  • 加大训练数据 16GB -> 160GB,更大的batch size,训练时间加长

  • 不需要NSP Loss: natural inference

  • 使用更长的训练 Sequence

  • Static vs. Dynamic Masking

  • 模型训练成本在6万美金以上(估算)

ALBERT:参数更少的BERT

论文地址:https://arxiv.org/pdf/1909.11942.pdf

  • 一个轻量级的BERT模型

  • 核心思想:

  • 共享层与层之间的参数 (减少模型参数)

  • 增加单层向量维度

DistilBERT:轻量版BERT

MNIST

0, 1, 2, 3, …, 9

logits: [0.1, 0.6, …, 0.01] q

label: 2 [0, 0, 1, …, 0] p

loss: cross entropy loss -\sum_{i=1}^10 p_i*log q_i

loss: -log q_{label}

训练一个Student network,mimic the behavior of the teacher network

teacher network: [0.1, 0.6, …, 0.01] t

student network: [s_1, s_2, .., s_10]

cross entropy loss: -sum_{i=1}^10 t_i * log s_i

4, 7

https://arxiv.org/pdf/1910.01108.pdf

  • MLM, NSP

  • MLM: cross entropy loss: -\sum_{i=1}^k p_i log (q_i) = - log (q_{label})

  • teacher (MLM) = distribution

  • student: 学习distribution: -\sum_{i=1}^k p_teacher_i log (q_student_i)

Patient Distillation

https://arxiv.org/abs/1908.09355

img

参考阅读资料

BERT Distillation

对于BERT模型压缩感兴趣的同学可以参考以下资料

关于BERT模型压缩的一套方法

ELECTRA

https://openreview.net/pdf?id=r1xMH1BtvB

使用GAN训练BERT模型

img

  • Generator针对[MASK]位置生成单词,Discriminator判断这些单词是由Generator (从[MASK]) 生成的还是原本就存在的。

  • Discriminator被用于downstream task finetuning。

XLNet

我在上一期NLP就业班中介绍了XLNet,不过由于近些日子BERT的各种加强版层出不穷,XLNet显得并不特别突出。感兴趣的同学可以参考上一期的课件:https://shimo.im/docs/PHqcpWtYjJjW3yH3

XLNet的代码和预训练模型也可以在Huggingface的版本中找到。

NLP预训练模型串讲

我之前在七月在线的公开课中使用的PPT

NLP预训练模型.pdf1.9MB

参考阅读:The Illustrated BERT, ELMo, and co.

https://shimo.im/docs/Y6q3gX8yGGjpWqXx

文章目录
  1. 1. Masked Language Model
  2. 2. Two-sentence Tasks
  3. 3. 特殊NLP任务
  4. 4. BERT用做特征提取
  • 如何使用BERT
    1. 1. BERT源码
    2. 2. BERT模型的使用
  • BERT升级版
    1. 1. RoBERTa:更强大的BERT
    2. 2. ALBERT:参数更少的BERT
    3. 3. DistilBERT:轻量版BERT
  • 参考阅读资料
    1. 0.1. BERT Distillation
    2. 0.2. ELECTRA
    3. 0.3. XLNet
    4. 0.4. NLP预训练模型串讲
    5. 0.5. 参考阅读:The Illustrated BERT, ELMo, and co.
  • |