Bidirectional Encoder Representations from Transformers, (BERT)是用于自然语言处理的预训练技术。该模型仅使用Transformer的Encoder Layer来实现语言模型的预训练。
什么是语言模型
语言模型是这样一个模型:对于任意的词序列,它能够计算出这个序列是一句话的概率。即对于一个给定的字典集合
为什么需要预训练
使得模型能更快地收敛、拥有更好的性能
预训练模型是通过海量数据训练得来的,学到了数据中的普遍特征,比起在自己的数据集上从头开始训练参数,使用预训练模型参数通常会有更好的泛化效果。
解决数据不足的问题
我们实际地任务中,可获得的数据可能并不多。而正如上面说到的,预训练模型可以学习到数据中的普遍信息,后面再通过微调,将这种普遍信息迁移至我们所需的任务。例如,如果想让模型实现人机对话,可以先让模型广泛地学习各种小短句,让模型学习到语句的特征,再迁移至下游任务
BERT的架构
BERT 架构 | 注意力权重的计算 |
---|---|
在BERT中使用Transformer的编码器来进行特征的提取,也就是说Transformer的编码部分就是一个BERT模型。BERT中的”B“,即Bidirectional体现在编码器中的自注意力机制。在自注意力全中的计算过程中,需要用
训练BERT的trick
如果BERT并非只是简单地使用Encoder Block,在训练的过程中还加入了一些非常有创意的trick
任务1: Masked LM
标准的条件语言模型只能从左到右或从右到左进行训练,但双向条件会使得每个词间接“看到自己”,并且模型可以在多层中轻松预测目标词的语境。在BERT中使用mask机制屏蔽一些词语(token),然后让模型去预测被屏蔽的词语,计算loss时只计算被屏蔽的部分,具体操作为:
将一句话中15%的token换成按照下面的方案进行替换
- 这些token中的80%被替换成[mask];
- 10%被替换成其他任意token;
- 10%原封不动.
接着计算对mask的部分计算loss
将编码器输出的隐藏层的结果做一个线性映射,映射的维度为
. 因此最终输出的维度是 . 接着对这个结果做softmax, 并计算loss, 计算时忽略没有mask的token.
任务2: Next Sentence Prediction (NSP)
许多重要的下游任务,例如问答 (QA) 和自然语言推理 (NLI),都是基于理解两个句子之间的关系,而这不是语言模型能直接解决的。为了训练一个理解句子关系的模型,Google预训练了一个二分类的下个语句的预测任务,该任务可以从任何单语语料库中轻松生成。具体操作为:
- 每个预训练示例选择句子 A 和 B 时,50% 的概率B 是A 后面的实际下一个句子(标记为IsNext),50% 的时间它是来自语料库的随机句子(标记为NotNext)。并且在开头加上[cls]用于后续的分类任务,在两个句子之间及末尾加上[sep]用于分隔;
- 此外还需要一个Segment Embedding用于让模型判断上下句,如上面图中的“A”和“B”;
- 正如上面所说的,自注意力机制可以让每个token的向量都包含一句话中所有token的信息,那么就可以认为[cls]这个token所对应的向量就可以代表整个句子,即可以用这个token对应的向量去做分类任务,所需操作为:
- 取出
( )中[cls]对应的向量, 即 - 接着使用线性映射, 将
映射到维度,最后做一个 :
- 取出
总结
BERT是一个强大的与训练模型,具有以下特征:
- 真正的双向:使用双向 Transformer,能同时利用当前单词的上下文信息来做特征提取,这与双向RNN分别单独利用当前词的上文信息和下文信息来做特征提取有本质不同,与CNN将上下文信息规定在一个限定大小的窗口内来做特征提取有本质不同;
- 动态表征:利用单词的上下文信息来做特征提取,根据上下文信息的不同动态调整词向量,解决了word2vec一词多义的问题;
- 并行运算的能力:Transformer组件内部使用自注意力机制(self-attention),能同时并行提取输入序列中每个词的特征。
- 易于迁移学习:使用预训练好的BERT,只需加载预训练好的模型作为自己当前任务的词嵌入层,后续针对特定任务构建后续模型结构即可,不需对代码做大量修改或优化。
参考资料
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
BERT (language model)-wikipedia
Bert:不就是transformer的编码器吗!-不喜欢下雨天 知乎文章
汉语自然语言处理-BERT的解读语言模型…-1espresso 哔哩哔哩视频
- Post title:Transformer的衍生:BERT
- Post author:Kotori Y
- Create time:2021-11-12 21:32
- Post link:https://blog.iamkotori.com/2021/11/12/Transformer的衍生:BERT/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.