Press "Enter" to skip to content

BERT–NLP中先进的语言模型

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

译/阿里淘系 F(x) Team – 星与

 

原文地址: BERT – State of the Art Language Model for NLP

 

BERT(Transformers的双向编码器表示)是Google AI语言的研究人员发表的一篇论文。它在机器学习领域引起了轰动,因为它在许多NLP任务中都取得了最优秀的结果,包括问答(SQuAD v1.1)、自然语言推理(MNLI)和其他任务。

 

BERT的关键技术创新是将一种流行的注意力模型Transformer的双向训练应用到语言建模中,区别于之前前从左到右或从左到右和从右到左的组合训练中输入文本序列的方式。结果表明,双向训练的语言模型比单向训练的语言模型具有更深刻的语境感知。在这篇论文中,研究人员详细介绍了一种新的技术,称为masked LM(MLM),它使得在模型中进行双向训练成为可能。

 

背景

 

在计算机视觉领域,研究人员已经多次证明了迁移学习的价值——在已知任务(例如imagnet)上预先训练神经网络模型,然后进行微调应用,把训练好的神经网络作为新的特定用途模型的基础。近年来,研究人员已经证明,类似的技术在许多自然语言任务中也是有效的。

 

除了迁移学习以外,另一种方法是基于特征的训练在NLP任务中也很流行,并在最近的 ELMo论文 中得到了验证。在这种方法中,一个预先训练的神经网络产生单词嵌入表示,然后作为自然语言处理模型的特征。

 

Bert的工作原理

 

BERT利用Transformer的注意力机制来学习文本中单词之间的上下文关系。在它的一般形式中,Transformer包括两个独立的机制:一个读取文本输入的编码器和一个生成任务预测的解码器。因为BERT的目标是生成一个语言模型,所以只需要编码器机制。Google在一篇 论文 中描述了Transformer的详细工作原理。

 

与按顺序(从左到右或从右到左)读取文本输入的定向模型不同,Transformer编码器一次读取整个单词序列。因此它被认为是双向的,或者说它是非定向的更准确。这个特性允许模型根据一个词的周围环境(词的左右)来学习它的上下文。

 

下图是对Transformer编码器的抽象描述。输入是一系列tokens,这些tokens是通过词嵌入形成向量,然后便可以在神经网络中进行处理和使用。输出是大小为H的向量序列,其中每个向量对应为相同索引的输入向量序列。

image

在训练语言模型时,合理定义预测目标是一个难点。许多模型都是按顺序预测下一个单词(例如,“The child came home from ( )”,这是一种单一方向的训练方法,这种方法限制了模型上下文的学习。为了克服这一缺点,Bert采用了两种训练策略:

 

Masked LM (MLM)

 

在将单词序列输入到BERT之前,每个序列中15%的单词被替换为一个[MASK]标记。然后,模型尝试根据序列中其他未被屏蔽的词提供的上下文来预测屏蔽的词。从技术角度来说,输出词的预测需要做到:

 

 

在模型的编码器输出后用作分类的层。

 

将输出向量乘以词表的嵌入矩阵,将输出的维度转换为词表维度。

 

使用softmax计算被[MASK]的词为词表中每个单词的概率。

 

image

BERT损失函数只考虑屏蔽词的预测,而忽略了非屏蔽词的预测。因此,模型的收敛速度会比普通的定向模型慢,但考虑到这一做法可以增强上下文感知,还是利大于弊。

 

注:在实践中,BERT实现稍微复杂一些,并没有替换所有15%的掩码单词。

 

Next Sentence Prediction (NSP)

 

在BERT训练过程中,模型接收成对的句子作为输入,并学习预测其中的第二个句子是否是训练文本中的后续句子。在训练过程中,50%的输入是一对,其中第二个句子是训练文本中的后续句子,而在另外50%的输入中,从语料库中随机选择一个句子作为第二个句子。假设随机句将与第一句不相关。

 

为了帮助模型在训练中区别两个句子,在输入模型之前,需要按以下方式处理输入:

 

 

在第一个句子的开头插入一个[CLS]标记,在每个句子的结尾插入一个[SEP]标记。

 

在每个标记中添加一个表示句子A或句子B的句子嵌入。句子嵌入在概念上类似于词嵌入。

 

将位置向量添加到每个token里以表示词语在序列中的位置。

 

image

请执行以下步骤来预测第二个句子是否确实与第一个句子相关:

 

 

整个输入序列输入Transformer模型。

 

使用简单的分类层(学习的权重和偏差参数),将[CLS]token对应的输出转换为2×1形状的向量。

 

用softmax计算是否为下一句的概率。

 

 

将MLM和NSP结合起来训练,以最小化两种策略的组合损失函数为目标,来进行BERT模型的训练。

 

如何使用BERT (微调训练)

 

BERT可以相对简单地用于各种各样的语言任务,并且只需要向核心模型添加一个小层:

 

 

通过在[CLS]标记的Transformer输出上添加一个分类层,应用于类似于NSP的句子分类任务,比如情感分析。

 

在问答任务(如SQuAD v1.1)中,系统接收一个关于已有文本序列的问题,并要求在已有文本序列中标记出来答案。使用BERT,可以通过学习两个额外的向量,用来标记答案在文本中的开始和结束位置,进行问答模型的训练。

 

在命名实体识别(NER)中,系统接收文本序列,并需要标记文本中出现的各类的实体(如个人、组织、日期等)。使用BERT,可以通过将每个token的输出向量输入到预测NER标签的分类层来训练NER模型。

 

 

在微调训练中,大多数超参数与BERT训练保持一致,论文中对需要微调的超参数给出了具体的指导(3.5节)。BERT团队已经使用这种技术在各种各样的自然语言挑战任务上获得了最优的结果,论文的第4节对此进行了详细介绍。

 

注:BERT的预训练模型也可以用于生成文本嵌入,类似于许多其他基于特征的模型,如doc2vec和ELMo。论文发现通过将编码器的最后四层连接起来,实现的嵌入最佳。

 

总结

 

Bert无疑是机器学习在自然语言处理中的一个突破。事实上,它可以快速微调并且易于上手的的特性,将可能在未来得到广泛的实际应用。在本文中,我们试图描述论文的主要思想,而不是淹没在过多的技术细节中。对于那些希望进行更深入的研究的人,我们强烈建议阅读论文全文和其中引用的论文。另一个有用的参考是研究团队开源的 BERT的源代码 和预训练模型,它涵盖了103种语言,可以被直接用于实际场景。

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注