BERT解释:NLP的最新语言模型
BERT(Bidirectional Encoder Representations from Transformers)是Google AI语言研究人员最近发表的一篇论文(https://arxiv.org/pdf/1810.04805.pdf)。它通过在各种NLP任务中呈现最先进的结果,包括问答(SQUAD v1.1),自然语言推理(MNLI)等,引起了机器学习社区的轰动。
BERT的关键技术创新是将Transformer(一种流行的注意力模型)的双向训练应用于语言建模。这与之前研究文本序列(从左到右或从左到右和从右到左的组合训练)的结果相反。论文的结果表明,双向训练的语言模型比单向语言模型具有更深层次的语言语境。在论文中,研究人员详细介绍了一种名为Masked LM(MLM)的新技术,该技术允许在以前不可能的模型中进行双向训练。
背景
在计算机视觉领域,研究人员反复展示了迁移学习的价值——在已知任务(例如ImageNet)上对神经网络模型进行预处理,然后进行微调——使用经过训练的神经网络作为新的特定目的模型的基础。近年来,研究人员已经证明,类似的技术在许多自然语言任务中都是有用的。
另一种方法是基于特征的训练,这种方法在NLP任务中也很流行,最近的ELMo论文就是一个例子。在这种方法中,一个预训练的神经网络产生了词嵌入,然后在NLP模型中用作特征。
BERT如何工作
BERT利用Transformer,一种学习文本中单词(或子单词)之间的上下文关系的注意力机制。通常Transformer包括两个独立的机制 - 读取文本输入的编码器和产生任务预测的解码器。由于BERT的目标是生成语言模型,因此只需要编码器机制。Transformer的详细工作原理在Google 的一篇论文(https://arxiv.org/pdf/1706.03762.pdf)中有所描述。
与按顺序读取文本输入的方向模型(从左到右或从右到左)相反,Transformer编码器一次读取整个单词序列。因此它被认为是双向的,尽管更准确地说它是非方向的。该特征允许模型基于其所有周围环境(单词的左侧和右侧)来学习单词的上下文。
下图是Transformer编码器的高级描述。输入是一系列令牌,它们首先嵌入到矢量中,然后在神经网络中处理。输出是大小为H的向量序列,其中每个向量对应于具有相同索引的输入标记。
在训练语言模型时,存在定义预测目标的挑战。许多模型预测序列中的下一个词(例如“The child came home from ___”),这是一种固有地限制语境学习的方向性方法。为了克服这一挑战,BERT采用了两种训练策略:
Masked LM(MLM)
在向BERT输入单词序列之前,每个序列中有15%的单词被[MASK]令牌替换。然后,该模型试图根据序列中其他non-masked提供的上下文来预测掩蔽词的原始值。在技术上,输出词的预测要求:
- 在编码器输出的顶部添加分类层。
- 将输出向量乘以嵌入矩阵,将它们转换为词汇维度。
- 用softmax计算词汇表中每个单词的概率。
BERT损失函数仅考虑masked值的预测并忽略non-masked词的预测。因此,模型的收敛速度比方向模型慢,这一特性被它增加的上下文感知所抵消。
注意:在实践中,BERT实现稍微复杂一些,并不能替换所有15%的masked 单词。
下一句话预测(NSP)
在BERT训练过程中,模型接收成对的句子作为输入,并学习预测这对句子中的第二句是否为原始文档中的后续句。在训练过程中,50%的输入是一对,其中第二句是原文档中的后一句,而在其余的50%中,从语料库中随机选择一个句子作为第二句。假设随机的句子将与第一个句子断开。
为了帮助模型区分训练中的两个句子,输入在进入模型之前按以下方式处理:
- 在第一个句子的开头插入[CLS]标记,并在每个句子的末尾插入[SEP]标记。
- 在每个标记中添加一个表示句子A或句子B的嵌入句。句子嵌入在概念上类似于标记嵌入。
- 将位置嵌入添加到每个标记以指示其在序列中的位置。位置嵌入的概念和实现在Transformer 论文中给出。
要预测第二个句子是否确实与第一个句子连接,执行以下步骤:
- 整个输入序列通过Transformer模型。
- 使用简单的分类层(权重和偏差的学习矩阵)将[CLS]标记的输出变换为2×1形状的矢量。
- 使用softmax计算IsNextSequence的概率。
在训练BERT模型时,Masked LM和Next Sentence Prediction被一起训练,目标是最小化两种策略的组合损失函数。
如何使用BERT(微调)
将BERT用于特定任务相对简单:
BERT可用于各种语言任务,而只需在核心模型中添加一个小层:
- 通过在[CLS]令牌的Transformer输出之上添加分类层,类似于Next Sentence分类,进行情感分析等分类任务。
- 在问题回答任务(例如SQuAD v1.1)中,软件会收到有关文本序列的问题,并且需要在序列中标记答案。使用BERT,可以通过学习标记答案开始和结束的两个额外向量来训练Q&A模型。
- 在命名实体识别(NER)中,软件接收文本序列,并且需要标记出现在文本中的各种类型的实体(人员,组织,日期等)。使用BERT,可以通过将每个令牌的输出向量馈送到预测NER标签的分类层来训练NER模型。
在微调训练中,大多数超参数保持与BERT训练相同,论文给出了需要调整的超参数的具体指导(第3.5节)。BERT团队使用这种技术在各种具有挑战性的自然语言任务中获得最先进的结果。
小贴士
模型尺寸很重要,即使规模很大。BERT_large具有3.45亿个参数,是同类产品中最大的模型。它在小规模任务上显然优于BERT_base,后者使用相同的架构,只有“1.1亿”参数。
有足够的训练数据,更多的训练步骤==更高的准确率。例如,在MNLI任务中,在1M步(128000字批量大小)上训练的BERT_base准确率比在相同批量大小下训练的500K步提高了1.0%。
BERT的双向方法(MLM)收敛速度慢于从左到右的方法(因为每批中只预测了15%的单词),但是在少量预训练步骤之后,双向训练仍然优于从左到右的训练。
计算考虑因素
结论
BERT无疑是使用机器学习进行自然语言处理的一个突破。它易于使用允许快速微调,将可能允许广泛的实际应用在未来。在本摘要中,我们试图描述论文的主要思想,而不是淹没在过多的技术细节中。对于那些希望深入探索的人,我们强烈建议您阅读其中引用的完整文章和辅助文章。另一个有用的参考是BERT源代码(https://github.com/google-research/bert)和模型,它涵盖103种语言,并由研究团队慷慨地作为开源发布。
附录A - Word Masking
在BERT中训练语言模型是通过预测输入中15%的随机选择的标记来完成的。这些令牌按如下方式进行预处理 - 80%用“[MASK]”令牌替换,10%用随机词替换,10%用原始词替换。引导作者选择这种方法的直觉如下(感谢Google的Jacob Devlin提供的见解):
- 如果我们在100%的时间内使用[MASK],则模型不一定会为non-masked词语生成良好的令牌表示。non-masked令牌仍用于上下文,但该模型已经过优化以预测masked 单词。
- 如果我们在90%的时间内使用[MASK]并且在10%的时间内使用随机单词,这将告诉模型观察到的单词永远不正确。
- 如果我们90%的时间使用[MASK]并且在10%的时间内保持相同的单词,那么模型可以简单地复制非上下文嵌入。
它可能在不同的比率下工作得更好。