LLM指南,第一部分:BERT
LLM Guide, Part 1 BERT
了解BERT如何构建最先进的嵌入
简介
2017年是机器学习领域的一个历史性年份,Transformer模型首次亮相。它在许多基准测试中表现出色,成为数据科学中许多问题的解决方案。由于其高效的架构,后来开发了许多基于Transformer的模型,这些模型更专注于特定任务。
BERT就是这样的模型之一。它主要以能够构建能够准确表示文本信息并存储长文本序列的语义含义的嵌入而闻名。因此,BERT嵌入在机器学习中被广泛使用。理解BERT如何构建文本表示对于解决自然语言处理中的许多任务至关重要。
在本文中,我们将参考原始的BERT论文,了解BERT的架构以及其背后的核心机制。在最初的几节中,我们将对BERT进行高级概述。之后,我们将逐渐深入了解其内部工作流程以及信息如何在模型中传递。最后,我们将学习如何对BERT进行微调以解决自然语言处理中的特定问题。
高级概述
Transformer的架构由两个主要部分组成:编码器和解码器。堆叠的编码器的目标是为输入构建一个有意义的嵌入,以保留其主要上下文。最后一个编码器的输出传递给所有解码器的输入,试图生成新的信息。
BERT是Transformer的继任者,继承了其堆叠的双向编码器。BERT的大部分架构原则与原始Transformer相同。

BERT版本
BERT有两个主要版本:Base和Large。它们的架构完全相同,只是使用的参数数量不同。总的来说,BERT Large有3.09倍的参数需要调整,相比于BERT Base。

双向表示
从BERT名称中的“B”字母可以看出,BERT是一个双向模型,这意味着它可以更好地捕捉词语之间的联系,因为信息在两个方向(从左到右和从右到左)传递。显然,这导致了更多的训练资源,与单向模型相比,但同时也提高了预测准确性。
为了更好地理解,我们可以将BERT架构与其他流行的自然语言处理模型进行比较。

输入标记化
在深入了解BERT的训练方式之前,有必要了解它接受数据的格式。对于输入,BERT接受单个句子或一对句子。每个句子都被分割成标记。此外,还有两个特殊的标记传递给输入:
- [CLS] — 传递到第一个句子之前,表示序列的开始。同时,在训练过程中,[CLS]还用于分类目标(在下面的章节中讨论)。
- [SEP] — 在句子之间传递,表示第一个句子的结束和第二个句子的开始。
通过传递两个句子,BERT能够处理包含两个句子的各种任务(例如问题和答案、假设和前提等)。
输入嵌入
在标记化之后,对每个标记建立一个嵌入。为了使输入嵌入更具代表性,BERT为每个标记构建了三种类型的嵌入:
- 标记嵌入捕捉标记的语义含义。
- 段落嵌入有两个可能的值,指示标记属于哪个句子。
- 位置嵌入包含标记在序列中的相对位置信息。

这些嵌入被求和,结果被传递给BERT模型的第一个编码器。
输出
每个编码器将n个嵌入作为输入,然后输出相同数量的处理后的嵌入,维度也相同。最终,整个BERT输出也包含n个嵌入,每个嵌入对应其初始标记。
训练
BERT的训练包括两个阶段:
- 预训练。BERT在未标记的句子对上进行训练,完成两个预测任务:掩码语言建模(MLM)和自然语言推理(NLI)。对于每对句子,模型对这两个任务进行预测,并根据损失值进行反向传播以更新权重。
- 微调。BERT使用预训练的权重进行初始化,然后通过使用标记数据优化它们以解决特定问题。
预训练
与微调相比,预训练通常需要大部分时间,因为模型在大型语料库上进行训练。这就是为什么存在许多在线预训练模型库的原因,这些模型可以相对较快地进行微调以解决特定任务。
我们将详细研究BERT在预训练期间解决的两个问题。
掩码语言建模
作者建议通过掩盖初始文本中的一定数量的标记并对其进行预测来训练BERT。这使BERT能够构建具有弹性的嵌入,可以使用周围上下文猜测某个单词,从而为缺失的单词构建适当的嵌入。该过程如下:
- 在标记化之后,随机选择15%的标记进行掩码。选择的标记将在迭代结束时进行预测。
- 选择的标记以以下三种方式之一替换:- 80%的标记被[MASK]标记替换。示例:我买了一本书 → 我买了一个[MASK]- 10%的标记被随机标记替换。示例:他正在吃一个水果 → 他正在画一个水果- 10%的标记保持不变。示例:一栋房子在我附近 → 一栋房子在我附近
- 所有标记都传递给BERT模型,该模型为接收到的每个标记输出一个嵌入。
4. 根据步骤2中处理的标记输出相应的嵌入,用于预测掩码标记。每次预测的结果是词汇表中所有标记的概率分布。
5. 通过将概率分布与真实的掩码标记进行比较,计算交叉熵损失。
6. 使用反向传播更新模型权重。
自然语言推理
对于这个分类任务,BERT尝试预测第二个句子是否跟随第一个句子。整个预测仅使用[CLS]标记的最终隐藏状态的嵌入,该嵌入应该包含来自两个句子的聚合信息。
与MLM类似,构建的概率分布(在这种情况下是二进制)用于计算模型的损失,并通过反向传播来更新模型的权重。
对于NLI,作者建议选择语料库中相互跟随的句子的50%作为正对句子对,以及从语料库中随机选取的句子的50%作为负对句子对。

训练细节
根据论文,BERT在BooksCorpus(8亿个单词)和英文维基百科(25亿个单词)上进行预训练。为了提取较长的连续文本,作者只从维基百科中选择阅读段落,忽略表格、标题和列表。
BERT训练了100万个大小为256个序列的批次,相当于33亿个单词的40个时期。每个序列包含最多128个(90%的时间)或512个(10%的时间)令牌。
根据原始论文,训练参数如下:
- 优化器:Adam(学习率l = 1e-4,权重衰减L₂ = 0.01,β₁ = 0.9,β₂ = 0.999,ε = 1e-6)。
- 学习率预热在前10,000步进行,然后线性减小。
- 在所有层上使用Dropout(α = 0.1)层。
- 激活函数:GELU。
- 训练损失是平均MLM和平均下一个句子预测概率的总和。
微调
一旦预训练完成,BERT可以真正理解单词的语义含义,并构建几乎完全表示其含义的嵌入。微调的目标是逐渐修改BERT权重以解决特定的下游任务。
数据格式
由于自注意机制的鲁棒性,BERT可以轻松地为特定的下游任务进行微调。BERT的另一个优点是能够构建双向文本表示。这在处理句对时更有可能发现两个句子之间的正确关系。以前的方法包括独立地对两个句子进行编码,然后对它们应用双向交叉注意力。BERT将这两个阶段统一起来。
根据特定问题的不同,BERT接受几种输入格式。使用BERT解决所有下游任务的框架相同:通过将文本序列作为输入,BERT输出一组令牌嵌入,然后将其馈送给模型。大部分时间并不使用所有输出嵌入。
让我们看一下常见问题以及微调BERT解决它们的方式。
句对分类
句对分类的目标是理解给定句对之间的关系。常见的任务类型有:
- 自然语言推理:确定第二个句子是否跟随第一个句子。
- 相似性分析:找到句子之间的相似程度。

对于微调,两个句子都传递给BERT。通常情况下,[CLS]令牌的输出嵌入被用于分类任务。根据研究人员的说法,[CLS]令牌应该包含有关句子关系的主要信息。
当然,也可以使用其他输出嵌入,但通常在实践中被省略。
问答任务
问答的目标是在文本段落中找到与特定问题相对应的答案。大部分时间,答案以两个数字的形式给出:段落的开始和结束令牌位置。

对于输入,BERT接收问题和段落,并输出对应的嵌入向量。由于答案包含在段落中,我们只对与段落标记对应的输出嵌入向量感兴趣。
为了找到答案在段落中的起始标记位置,计算每个输出嵌入向量与一个特殊的可训练向量Tₛₜₐᵣₜ之间的标量积。在大多数情况下,当模型和向量Tₛₜₐᵣₜ相应训练后,标量积应该与相应标记实际上是起始答案标记的可能性成比例。为了归一化标量积,它们被传递给softmax函数,并可视为概率。与最高概率相对应的标记嵌入被预测为起始答案标记。基于真实概率分布,计算损失值并进行反向传播。使用向量Tₑₙ𝒹进行预测结束标记的过程类似。
单句分类
与以前的下游任务相比,这里只传递一个单独的句子给BERT。这种配置通常解决以下典型问题:
- 情感分析:判断一句话的态度是积极的还是消极的。
- 主题分类:根据内容将一句话分类到几个类别之一。

预测流程与句对分类相同:将[CLS]标记的输出嵌入作为分类模型的输入。
单句标记
命名实体识别(NER)是一个机器学习问题,旨在将序列中的每个标记映射到相应实体之一。

为了实现这个目标,通常计算输入句子的标记的嵌入向量。然后,每个嵌入向量(除了[CLS]和[SEP])独立地传递给一个模型,该模型将每个嵌入向量映射到给定的NER类别(如果可能的话)。
将BERT与其他特征结合
有时我们不仅处理文本,还处理数值特征等其他特征。自然地,我们希望构建的嵌入向量可以同时融合文本和非文本特征的信息。以下是应用的推荐策略:
- 将文本与非文本特征连接。例如,如果我们处理的是以文本形式为人们的个人简介,并且有其他单独的特征,如他们的姓名或年龄,那么可以获得一个新的文本描述,形式为:“我的名字是<name>。<个人简介>。我<age>岁了”。最后,将这样的文本描述传递给BERT模型。
- 将嵌入向量与特征连接。可以像上面讨论的那样构建BERT嵌入向量,然后将它们与其他特征连接起来。在这种配置中唯一改变的是下游任务的分类模型现在必须接受更高维度的输入向量。
结论
在本文中,我们深入探讨了BERT的训练和微调过程。事实上,这些知识足以解决NLP中的大多数任务,因为BERT几乎可以完全将文本数据纳入嵌入向量中。
近年来,出现了其他基于BERT的模型,如SBERT,RoBERTa等。甚至存在一种称为“BERTology”的特殊研究领域,深入分析BERT的能力,以推导出新的高性能模型。这些事实进一步证明了BERT对机器学习的革命,并使在NLP领域取得了显著进展成为可能。
资源
- BERT:用于语言理解的深度双向Transformer的预训练
除非另有说明,所有图片均由作者提供