BERT Deep Bidirectional Transformers for Language Understanding
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer的神经网络模型,它在自然语言处理(NLP)领域具有出色的性能和广泛的应用。以下是关于BERT模型的详细介绍:
- BERT模型结构:
BERT模型由多层的Transformer编码器堆叠而成,每一层都包含自注意力机制(Self-Attention)和前馈神经网络。这种深层结构使得BERT能够捕捉从浅层语法特征到深层语义特征的不同级别的语言信息。同时,BERT的模型结构是双向的,意味着它同时考虑了文本的左信息和右信息,从而提高了对文本的理解能力。
- BERT模型训练:
BERT模型的整体框架包含两个阶段:预训练(Pre-training)和微调(Fine-tuning)。在预训练阶段,BERT在大规模的文本数据上进行训练,学习文本的通用表示。在微调阶段,BERT模型可以通过添加任务特定的输出层来进行微调,以适应不同的NLP任务,如情感分析、问答、命名实体识别等。
- BERT模型应用:
BERT可以应用于多种NLP任务,如文本分类、情感分析、命名实体识别、问答系统等。BERT模型在这些任务中表现出了出色的性能,其准确率和鲁棒性均得到了显著提高。
- BERT模型优点:
BERT模型是一种预训练模型,可以在大规模的文本数据上进行预训练,然后再在具体任务上进行微调,从而可以大大减少训练时间和数据需求。
BERT模型采用双向Transformer编码器,可以有效地捕捉上下文之间的依赖关系,从而提高了NLP任务的准确性。
BERT模型可以支持多种任务,具有很强的通用性和可扩展性。
- BERT模型缺点:
BERT模型需要大量的计算资源和存储空间,因此训练和部署成本较高。
BERT模型只能处理长度较短的文本,对于长文本的处理存在困难。
BERT模型的预训练数据集主要来自于英文等大型英语语料库,对于其他语言的支持相对较少,可能影响其在其他语言上的性能表现。
介绍
本文介绍的language representation model就是大名鼎鼎的BERT,其模型结构是利用Transformer的双向Encoder表示。BERT有个明显的特点就是,它通过在所有层的左侧和右侧上下文中共同进行条件预处理,从而在未标记的文本中预训练深层双向表示。
现有两种将预训练语言表示应用于下游任务的策略:feature-based和fine-tuning,基于特征的方法,比较典型的就是ELMo,使用特定于任务的架构,其中包括预训练的表示形式作为附加功能。微调的方式,众所周知的是GPT了,这种方式通过引入最少的特定于任务的参数,并通过简单地微调所有预训练的参数来对下游任务进行训练。两种方法在预训练过程中具有相同的目标功能,它们使用单向语言模型学习通用语言表示形式。而BERT作为预训练模型,就是定位于通过微调的方式,不过和其他模型有个区别就是(前面我加粗字体),BERT是双向结合上下文的架构,论文里面说双向有利于句子级任务。
BERT的特别之处:
- BERT受到完型填空任务的启发,通过使用一个“masked language model”(MLM)预训练目标来减轻上面提到的单向约束问题。MLM随机masks掉input中的一些tokens,目标是从这些tokens的上下文中预测出它们在原始词汇表中的id。与从左到右的语言模型预训练不同,MLM目标使表示形式能够融合左右上下文,这使我们可以预训练深度双向Transformer。
- 除了MLM,作者还使用了一个“next sentence prediction”任务,连带的预训练text-pair表征
背景知识
- 深度双向:深度双向和浅度双向的区别在于,后者仅仅是将分开训练好的left-to-right和right-to-left的表征简单的串联,而前者是一起训练得到的。深度双向(如BERT)与浅度双向在自然语言处理中的主要区别在于它们如何获取和处理文本的上下文信息。
浅度双向模型通常会将分开训练好的从左到右(left-to-right)和从右到左(right-to-left)的模型表征简单地串联起来。这种方法虽然在一定程度上考虑了文本的双向信息,但由于两个方向的模型是分开训练的,因此它们之间的交互和信息共享是有限的。
而深度双向模型(如BERT)则是通过一种称为“双向Transformer编码器”的结构,将文本的双向信息同时考虑在内,并在训练过程中一起优化。这意味着BERT在训练时,可以同时看到文本的前面和后面的信息,从而更准确地理解文本的语义和上下文。
- feature-based: 又称feature-extraction 特征提取。就是用预训练好的网络在新样本上提取出相关的特征,然后将这些特征输入一个新的分类器,从头开始训练的过程。也就是说在训练的过程中,网络的特征提取层是被冻结的,只有后面的密集链接分类器部分是可以参与训练的。
- fine-tuning: 微调。和feature-based的区别是,训练好新的分类器后,还要解冻特征提取层的顶部的几层,然后和分类器再次进行联合训练。之所以称为微调,就是因为在预训练好的参数上进行训练更新的参数,比预训练好的参数的变化相对小,这个相对是指相对于不采用预训练模型参数来初始化下游任务的模型参数的情况。也有一种情况,如果你有大量的数据样本可以训练,那么就可以解冻所有的特征提取层,全部的参数都参与训练,但由于是基于预训练的模型参数,所以仍然比随机初始化的方式训练全部的参数要快的多。对于作者团队使用BERT模型在下游任务的微调时,就采用了解冻所有层,微调所有参数的方法。
- warmup:学习率热身。规定前多少个热身步骤内,对学习率采取逐步递增的过程。热身步骤之后,会对学习率采用衰减策略。这样训练初期可以避免震荡,后期可以让loss降得更小。
相关工作
- 无监督的基于特征的方法:ELMo和它的前身从不同的维度概括了传统的词嵌入研究。它们从left-to-right和right-to-left语言模型中提取上下文敏感的特征。每个token(单词、符号等)的上下文表征是通过串联left-to-right和right-to-left的表征得到的。Melamud等人在2016年提出了使用LSTMs模型通过一个预测单词左右上下文的任务来学习上下文表征。与ELMo类似,他们的模型也是基于feature-based方法,并且没有深度双向
- 无监督的微调方法:与feature-based方法一样,该方向刚开始只是在未标记的文本上预训练词嵌入参数(无监督学习)。最近,句子和文档等生成上下文token表征的编码器已经从未标记的文本中预训练出来,并且通过fine-tuned的方式用在下游任务中。
- 监督数据的迁移学习:也有工作展示了从大数据集的监督任务的做迁移学习的有效性,就像自然语言推理(NLI),和机器翻译。
具体实现结构
框架分为两个步骤:
- pre-training
- fine-tuning
在预训练期间,BERT模型在不同任务的未标记数据上进行训练。微调的时候,BERT模型用预训练好的参数进行初始化,并且是基于下游任务的有标签的数据来训练的。问答领域的例子作为本节一个运行示例,如下:
BERT的一个特性是其跨不同任务的统一体系结构,即在预训练架构和下游的架构之间的差异很小。BERT是基于原始Transformer实现中的Encoder(Transformer的那篇文章我也有阅读笔记,分别在CSDN和知乎发布),改造成多层双向Transformer Encoder。BERT Transformer使用双向self-attention,而GPT Transformer 使用带约束的self-attention,每个token只能注意到它左边的上下文。
本文中, L L L表示层数, H H H表示每个隐藏单元的维数大小, A A A表示self-attention头数。BERT有2种参数,分别是BERT( b a s e base base, L = 12 L=12 L=12, H = 768 H=768 H=768,