预训练的表示包含如下两种类型:
如何将这些表示应用于下游任务?
将预训练的语言表示应用于下游任务有两种现有策略:
按照起承转合的思想阅读。
主要介绍背景知识。
ELMo
有一些工作已经表明了基于大型数据集的监督任务的有效迁移。
一般写作套路:
BERT包含两步:预训练和微调。
为了训练深度双向表示,我们只需随机屏蔽一部分输入标记,然后预测那些被屏蔽的标记。在这种情况下,与掩码标记相对应的最终隐藏向量通过词汇表被输入到输出softmax中,就像在标准LM中一样
在训练语言模型时,定义预测目标是一个挑战。许多模型预测序列中的下一个单词(e.g. "The child came home from ___"),定向的方法固有地限制了上下文学习。为了克服这一挑战,BERT 使用了两种训练策略:
Masked LM (MLM)
在将单词序列输入 BERT 之前,每个序列中 15% 的单词被替换为 [MASK] 标记。然后,该模型尝试根据序列中其他非掩码单词提供的上下文来预测掩码单词的原始值。输出词的预测需要:
BERT 损失函数只考虑了对掩码值的预测,而忽略了对非掩码词的预测。因此,该模型的收敛速度比定向模型慢
Next Sentence Prediction (NSP)
在 BERT 训练过程中,模型接收成对的句子作为输入,并学习预测该对中的第二个句子是否是原始文档中的后续句子。在训练期间,50% 的输入是一对,其中第二个句子是原始文档中的后续句子,而在另外 50% 的输入中,从语料库中随机选择一个句子作为第二个句子。假设是随机句子将与第一句无联系。
为了帮助模型在训练中区分两个句子,输入在进入模型之前按如下方式处理:
为了预测第二个句子是否确实与第一个句子相关,执行以下步骤:
在训练 BERT 模型时,Masked LM 和 Next Sentence Prediction 一起训练,目标是最小化这两种策略的组合损失函数。
Trick
在 BERT 中训练语言模型是通过预测输入中 15% 的标记来完成的,这些标记是随机挑选的。这些标记按如下方式进行预处理——80% 用"[MASK]"标记替换,10% 用随机词替换,10% 使用原始词。导致作者选择这种方法的直觉如下:
对比
对比OpenAI GPT(Generative pre-trained transformer),BERT是双向的Transformer block连 接;就像单向RNN和双向RNN的区别,直觉上来讲效果会好一些。 对比ELMo,虽然都是 "双向",但目标函数其实是不同的。ELMo是分别以 $P\left(w_i \mid w_1, \ldots w_{i-1}\right)$ 和 $P\left(w_i \mid w_{i+1}, \ldots w_n\right)$ 作为目标函数,独立训练处两个representation然后拼接,而BERT则是 以 $P\left(w_i \mid w_1, \ldots, w_{i-1}, w_{i+1}, \ldots, w_n\right)$ 作为目标函数训练 $\mathrm{LM}$ 。
在11个NLP任务上表现SOTA。
BERT 的输入和输出分别是什么? BERT 模型的主要输入是文本中各个字/词(或者称为 token)的原始词向量,该向量既可以随机初始化,也可以利用word2vec等算法进行预训练以作为初始值;输出是文本中各个字/词融合了全文语义信息后的向量表示。
模型输入除了字向量(英文中对应的是 Token Embeddings),还包含另外两个部分:
文本向量(英文中对应的是 Segment Embeddings):该向量的取值在模型训练过程中自动学习,用于刻画文本的全局语义信息,并与单字/词的语义信息相融合 位置向量(英文中对应的是 Position Embeddings):由于出现在文本不同位置的字/词所携带的语义信息存在差异(比如:"我爱你"和"你爱我"),因此,BERT 模型对不同位置的字/词分别附加一个不同的向量以作区分 最后,BERT 模型将字向量、文本向量和位置向量的加和作为模型输入。特别地,在目前的 BERT 模型中,文章作者还将英文词汇作进一步切割,划分为更细粒度的语义单位(WordPiece),例如:将 playing 分割为 play 和##ing;此外,对于中文,目前作者未对输入文本进行分词,而是直接将单字作为构成文本的基本单位。
需要注意的是,上面只是简单介绍了单个句子输入 BERT 模型中的表示,实际上,在做 Next Sentence Prediction 任务时,在第一个句子的首部会加上一个[CLS] token,在两个句子中间以及最后一个句子的尾部会加上一个[SEP] token。
BERT分为哪两种任务,各自的作用是什么? BERT的常规工作流程分为两个阶段:预训练 pre-training 和微调 fine-tuning。其中预训练使用两个半监督任务:MLM模型和NSP模型,对于MLM模型而言,他主要的作用是预测被随机mask的输入token,对于NSP模型而言,主要的作用是用于,预测两个输入句子是否彼此相邻、是否为前后句关系。即用了MLM和NSP两种方法分别捕捉词语和句子级别的representation。相比预训练阶段,微调fine-tuning主要是针对下游应用,在fine-tuning时是通常需要一层或多层全连接层来添加到最终编码器层的顶部
BERT的三个Embedding为什么直接相加 答:Embedding的数学本质,就是以one hot为输入的单层全连接。 也就是说,世界上本没什么Embedding,有的只是one hot。
在这里想用一个简单的例子再尝试理解一下: 假设 token Embedding 矩阵维度是 [4,768];position Embedding 矩阵维度是 [3,768];segment Embedding 矩阵维度是 [2,768]。对于一个字,假设它的 token one-hot 是[1,0,0,0];它的 position one-hot 是[1,0,0];它的 segment one-hot 是[1,0]。那这个字最后的 word Embedding,就是上面三种 Embedding 的加和。 如此得到的 word Embedding,和concat后的特征:[1,0,0,0,1,0,0,1,0],再过维度为 [4+3+2,768] = [9, 768] 的全连接层,得到的向量其实就是一样的。
再换一个角度理解:
直接将三个one-hot 特征 concat 起来得到的 [1,0,0,0,1,0,0,1,0] 不再是one-hot了,但可以把它映射到三个one-hot 组成的特征空间,空间维度是 432=24 ,那在新的特征空间,这个字的one-hot就是[1,0,0,0,0…] (23个0)。
此时,Embedding 矩阵维度就是 [24,768],最后得到的 word Embedding 依然是和上面的等效,但是三个小 Embedding 矩阵的大小会远小于新特征空间对应的 Embedding 矩阵大小。
当然,在相同初始化方法前提下,两种方式得到的 word Embedding 可能方差会有差别,但是,BERT还有Layer Norm,会把 Embedding 结果统一到相同的分布。
BERT的三个Embedding相加,本质可以看作一个特征的融合,强大如 BERT 应该可以学到融合后特征的语义信息的。
缺点:
BERT深度双向的特点,深度体现在哪儿? 答:针对特征提取器,Transformer只用了self-attention,没有使用RNN、CNN,并且使用了残差连接有效防止了梯度消失