Advertisement

BERT模型简介与应用

阅读量:

作者:禅与计算机程序设计艺术

1.简介

BERT(Bidirectional Encoder Representations from Transformers)常被称为双层编码器特征表示法,在自然语言处理领域具有重要意义。该方法采用无监督学习方式,并通过大规模语料库的预训练过程获得相应的参数设置。近年来,在多个自然语言处理任务中得到了广泛应用,并涵盖如实体识别、文本分类等多个关键应用领域。该技术在实际应用中展现出显著的应用价值

2.基本概念术语说明

模型结构

  • Transformer
    • BERT模型结构采用了多层Transformer架构作为核心模块。
    • 在Bert模型中,第一层和最后一层分别配置了特殊的子层结构:词嵌入层和分类器,而中间各层则由多个相同的Transformer模块串联而成。
    • Token Embedding:该过程将输入序列中的每一个token转化为固定维度的向量表示,可视为词表初始化阶段,通过学习训练数据集中的统计规律,生成反映单词语义特征的连续空间向量表示,从而实现不同词汇之间的有效相似性度量。
    • Position Embedding:该模块通过编码位置信息来指示模型关注哪些token及其间隔距离,通过广播机制将位置编码信息传递至所有Transformer层中,从而实现定位和顺序信息的有效传递。
    • Segment Embedding:该子网络主要用于区分不同类型的句子.在训练数据集中通常仅涉及一种句式类型,因此其设计相对简洁.但对于涉及序列标注等复杂任务的情况,则需引入多类别的段嵌入以增强模型处理多样句式的能力。

预训练过程

数据集

BERT所使用的训练数据集合规模极为庞大,并涵盖了数十亿个英文单词或中文字符。其中既包含普通文本内容,也包含需要特别处理的异常文本内容。研究团队将这些原始数据按照特定比例划分为了两组:一个是用于模型训练的数据集(train set),另一个是用于模型验证的数据集(dev set)。具体而言,在构建预训练语言模型的过程中,则主要利用了第一组即为构建和优化预训练语言模型参数的数据。而对于第二组验证用的数据,则主要用于评估语言模型在各种任务中的表现水平。

任务设置

在BERT预训练过程中,在这一阶段中, 通常会选择两个核心的任务: 其中一个是Masked Language Modeling(MLM)技术, 在另一个方面则是Next Sentence Prediction(NSP)机制。

  1. Masked Language Modeling (MLM):使用掩码机制替换模型中的一小部分token,使得模型可以学习到这些token之间的关系。这样做可以帮助模型更好地理解文本中不确定性的部分。
    例子:
    比如模型接收到的输入句子是“The quick brown fox jumps over the lazy dog”,模型就会生成类似下面的预测结果:
复制代码
    The quick brown <MASK> jumps over the lazy dog.
    
    
      
    
    代码解读

这时候模型的目标就是去预测“”这个位置应该填充什么单词。

  1. Next Sentence Prediction (NSP): 判定两个句子的关系以确定它们是否源自同一篇文章。
    例子:
    当模型接收了两组输入:第一组是"The quick brown fox jumps over the lazy dog." 和第二组是"A giant panda is out front in field." 时,NSP模型的任务是预测这两组中哪一组的第二个句子与第一个句子属于同一篇文章。
    **

预训练任务的特点

  1. 采用词级预训练的方法而非字符级预训练,在此过程中我们可以观察到BERT相较于之前的预训练模型更加适合处理长文本内容。
  2. 本研究采用了系统化的方法进行数据增强处理,并将这些增强后的数据传递给模型用于特征学习。具体而言,在实际操作中我们通过随机在序列中插入或删除特定的token来实现这一目标。
  3. 本研究主要采用了两种关键损失函数来优化模型性能:一是语言模型损失函数(LM Loss),其主要作用是拟合输入序列中的潜在next token;二是下一句预测损失函数(Next-Sentence Loss),这一部分则负责拟合输入序列与其后续生成句子之间的关联关系。

预训练任务的局限性

  1. 任务的模糊性:由于预设的目标并未具有实际意义(即所谓的"真实的任务目标"),因此这类方法只能培养语言模型的一般能力(即所谓的"泛化能力"),而无法针对某个具体的任务进行深度优化(即所谓的"专门针对某个具体任务的能力")。换言之,在这种情况下(即面对那些没有明确实际意义的目标的情况),该方法可能会对一些相对简单但与主任务相关的后续应用表现得不够理想。
  2. 预训练方法的缺乏效率:生成这些结果所需计算资源极为庞大(即所谓的"涉及大量计算"),导致整个训练过程耗时极长(即所谓的"耗时很长")。此外,在这种情况下(即面对生成大量参数的情况),该类模型拥有极其庞大的参数量(即所谓的"参数数量非常庞大"),从而使得将其方便地部署至生产环境成为一项极具挑战性的工程(即所谓的"难以轻易部署到生产环境中")。

3.核心算法原理和具体操作步骤以及数学公式讲解

模型结构详解

Transformer结构

为了应对深度学习中序列建模中的两大挑战——计算复杂度较高以及容易出现消失梯度的问题,并在处理序列长度增长时有效管理计算资源的需求而被提出的一种全新架构是 Transformer 结构。
这种架构在一定程度上缓解了上述两大挑战。
本节将详细介绍 Transformer 结构的原理。

自注意力机制:Transformer架构通过自注意力机制实现了序列数据的全局连接能力,并使模型能够同时关注输入序列中不同位置的信息。如图所示,自注意力(Self-Attention)的过程包括以下几个关键步骤:首先,输入包括查询向量q、键向量k以及值向量v,这些向量均来源于输入序列x;其次,在计算注意力权重a = softmax(QK^T/√dk)时(其中Q和K分别代表矩阵运算),V则代表值矩阵;最后,在此过程中d表示隐藏层的维度。

如图所示为一个Self-Attention层的架构示意图。该层主要包含三个关键组件:查询(Query)、键(Key)和值(Value)。在该层中,在每个时间步t时输入x会通过查询、键和值矩阵进行变换后得到当前时间步的输出o。随后将此输出代入激活函数模块进行进一步处理以获取非线性特征。
具体而言,在Multi-Head Attention机制中模型会同时构建多个注意力头(heads),每个头负责关注输入序列的不同部分并获取多样的特征表示。具体而言,在同一时间步t上模型会同时处理不同头之间的q、k、v向量,并通过计算各头之间注意力权重的方式综合各头信息生成全局表示。
此外,在基于位置编码的位置编码机制能够有效提升模型对序列位置关系的理解能力。由于不同位置上的词通常承载着不同的语义信息因此在Transformer模型中我们会在原始单词嵌入之后附加位置编码嵌入以帮助模型更好地识别和学习到序列中的动态特性。

深度学习优化算法

Adam Optimizer

Adam优化算法是当前最流行的深度学习优化算法之一。其特点是能在迭代过程中对学习率进行动态调整,在训练初期快速获得较优解,并于训练后期稳定下来。Adam优化算法的具体更新公式如下:
\begin{aligned} & \text{lr}_t = \beta_1 \cdot \text{lr}_{t-1} + (1-\beta_1)\frac{\partial L}{\partial y} \\ & m_t = \beta_2 m_{t-1} + (1-\beta_2)\left(\frac{\partial L}{\partial y}\right)^2 \\ & \hat{m}_t = \frac{m_t}{1-\beta_2^t} \\ & \hat{v}_t = \frac{\hat{m}_t}{1+\epsilon} \\ & y^\prime_{t+1}=y_t - \frac{\text{lr}_t}{\sqrt{\hat{v}_t}}\cdot\frac{\partial L}{\partial y} \\ \end{aligned}
参数说明:

表示一阶矩估计中数据波动程度的一个参数,在优化过程中越大越慢,默认设置为0.9。
用于调节二阶矩估计中的数据波动程度,在优化过程中默认设置为0.999。
损失函数值是一个衡量模型预测与真实值之间差异的关键指标。
模型输出代表预测结果。
为了避免出现除以零的情况,在计算过程中会引入一个小量ε(epsilon)。
迭代次数是指模型训练过程中完成的一轮参数更新操作的数量。

Learning Rate Scheduling

在深度学习模型训练过程中,超参数调节策略是一种广泛应用的技术。当模型在训练中出现过拟合或欠拟合问题时,在解决这些问题上采取的主要措施是以提高模型性能为目标的手段之一。具体而言,在这一领域内最常用的做法是以优化器为中介来进行的调整过程。其中最为常见且有效的做法是在每个固定周期内对 learning rate 进行相应操作以实现最佳效果

Dropout Regularization

在深度学习领域中,Dropout 被广泛作为正则化技术应用。

其主要影响表现在两方面:一方面降低了模型的整体泛化能力;另一方面减少了训练所需的内存资源。

BERT Pretraining

本文将详细阐述BERT在pretraining阶段的具体实验设置,并试图深入探讨其核心机制以及基本环节

Experiment Setup and Baselines

Dataset

BookCorpus 数据集涵盖约 8,00 万本图书的 1.1 亿个词汇量,并源自亚马逊用户、书籍作者、出版社及发行商等多个来源。每本书经过预处理后被分割为包含中文或英文三种文档的形式,默认总共有 42 亿词左右的内容。在数据集中选择了 9 成作为训练样本集合,并将剩余 1 成划为验证集合用于后续模型评估与测试目的之需。
Wikipedia 数据库则包含规模庞大的 45 千百万篇文章内容,并主要来源于维基百科编辑团队的共同创作与贡献工作开展基础之上进行构建与维护工作过程之中。该数据库按照 8 比例划分出分别用于模型训练与验证的不同样本集合,在具体操作过程中选择所有文章中编号在前一千万中的部分作为主训练样本集合,并将编号在千万级别之后的内容全部划作辅助验证样本集合使用。
OpenWebText 数据库则是一个拥有高达 26 千亿句子规模的巨大文本资源库系统性构建而成的基础性知识资源存储平台,在实际应用过程中主要通过网络用户共享上传的方式完成数据库内容的持续更新工作流程设计之中。该数据库按照标准划分方法将总体样本总量分为各自占总比例不同分配系数下的主次样本集合,并分别应用于不同的自然语言处理模型性能评估指标计算过程之中。

Tasks

  • Masked Language Modeling (MLM):Masked Language Modeling (MLM) 是一种基于语言模型的方法,可以自动掩盖输入序列中的一些 token,并试图恢复这些被掩盖的 token 的正确位置。MLM 任务旨在训练模型学习语法和语义特征,而非依赖于具体的训练集。MLM 任务的损失函数通常采用二元交叉熵,即 loss=-\log P(x|masked\_tokens,parameters),其中 masked tokens 表示掩盖的位置,P(x|masked_tokens,parameters) 是语言模型预测掩盖的 token 的概率分布。MLM 任务对模型的预训练十分重要,但往往会导致模型过拟合。
  • Next Sentence Prediction (NSP):Next Sentence Prediction (NSP) 任务旨在预测句子间是否具有相同的上下文关系。NSP 任务的输入是两个句子,如果两个句子具有相同的上下文关系,则称为连贯的一对句子。NSP 任务的损失函数通常采用二元交叉熵,即 loss=-\log P(is\_next|sentences,parameters),其中 sentences 表示两个句子,is_next 表示两个句子是否具有相同的上下文关系。NSP 任务对模型的预训练尤其重要,但往往会导致模型性能下降。

Approach

Pre-training Procedure
  1. 通过预训练的词嵌入或随机权重初始化模型参数。
  2. 将训练数据划分为长度为T的片段。每个片段由两个连续的文本块组成,并由一个分隔标记符[SEP]分隔开。“例如”,给定以下三个句子序列:“the cat sat on the mat” -> “[CLS] the cat sat [SEP] on the mat [SEP]”
  3. 向每个文本块添加位置编码。“这可以通过使用正弦函数简单实现”:
  4. 对于每个文本块应用自注意力层后再应用前馈网络两次以获得新的相同大小表示。“然后将这些表示拼接在一起(如果需要的话),与语言特定嵌入等其他特征一起应用自注意力层以获得大小为D的最终表示。”
  5. 反复执行上述步骤直至处理完所有序列。
  6. 在MLM任务中将每个段落中的部分token随机替换为[MASK]标记。“这些掩码有助于模型学习单词之间的上下文依赖关系从而提高生成自然语言的能力。”
  7. 在微调阶段冻结预训练层并将仅对目标任务相关的顶层分类层进行微调。“在此期间对目标任务的数据集进行全模型微调以实现最佳效果。”
  8. 最终在保留 held-out 测试集上评估已训练模型并基于准确度指标进行评估。
Comparison with baselines
Transfer learning vs Full finetuning

In transfer learning methodology, we fixate on preserving only specific pre-trained layer parameters while enabling fine-tuning for downstream tasks. Conversely, full fine-tuning entails maintaining all layers except those crucial to a particular task and re-initializing them before proceeding with training. Our empirical results indicate minimal performance disparities between these techniques during testing. Nevertheless, full fine-tuning demonstrates superior generalization capabilities since it allows leveraging diverse aspects of pre-trained models tailored to specific tasks.

Single GPU vs Multi-GPU

虽然我们主要在单块GPU上进行实验是因为计算资源有限的原因 (primary reason),但也尝试了多块GPU上的测试 (using PyTorch's DistributedDataParallel module) 以查看分布式训练是否有帮助 (benefit)). 结果发现,在每秒样本数量略有增加的同时 (slight increase in number of examples per second),完成一个epoch所需的时间反而下降了 (decrease in time per epoch) 主要是由于通信开销上升导致的 (due to increased communication overhead). 因此 (therefore),分布式训练带来的好处通常非常有限 (relatively negligible),相比之下成本更高 (compared to synchronizing gradients across multiple devices). 如此看来,在简单性方面我们选择了单块GPU上的训练.

全部评论 (0)

还没有任何评论哟~