一、BERT 框架概述

1. 什么是 BERT

BERT(Bidirectional Encoder Representations from Transformers)是基于 Transformer 架构构建的双向编码器表示模型。它通过在大规模无标注文本上进行预训练,学习到深层的语言表示,并能够迁移到各类自然语言处理下游任务中。

2. 模型结构

BERT 采用 Transformer 的 Encoder 部分,由多层自注意力机制和前馈神经网络堆叠而成。这种结构使 BERT 能够同时利用目标词左侧和右侧的上下文信息,从而捕获更丰富的语义特征。

自注意力机制(Self-Attention)

自注意力机制是一种让模型在处理序列数据时,能够动态关注序列内部不同元素之间关系的机制。与传统的依赖外部信息的注意力不同,自注意力直接分析序列内部的相互依赖性。它通过对序列中的每个元素计算与其他所有元素的关联程度,生成一个加权表示向量,该向量融合了该元素在当前上下文中的完整语义。

3. 预训练任务

BERT 通过两个无监督的预训练任务来学习语言知识:

  • 遮蔽语言模型(MLM,Masked Language Model):随机遮蔽输入序列中 15% 的词,让模型预测被遮蔽的词是什么。
  • 下一句预测(NSP,Next Sentence Prediction):给定两个句子 A 和 B,判断 B 是否是 A 的下一句。

这两个任务使 BERT 能够同时理解词级别的语义句子级别的连贯性

4. 双向性

与 GPT 等仅依赖单向上下文(从左到右或从右到左)的语言模型不同,BERT 是真正双向的。在预测某个词时,它会同时考虑该词前后的所有上下文信息,从而更准确地捕捉语义,这也是 BERT 名称中"Bidirectional"的由来。

5. 微调(Fine-tuning)

预训练完成后,BERT 可以通过微调适配各种下游任务。微调是指在特定任务的数据集上,对预训练模型进行少量的额外训练,以调整参数使其更贴合具体任务需求。BERT 的灵活架构使其可应用于文本分类、命名实体识别、问答系统、语义相似度等多种场景。

6. 表现与影响

BERT 在发布时刷新了 11 项 NLP 基准测试的记录,成为自然语言处理领域的里程碑式工作。它的成功开启了预训练语言模型的新时代,后续涌现的 RoBERTa、ALBERT、DistilBERT 等模型均在其基础上进行了改进和优化。


二、Transformer 架构详解

1. 传统 RNN 的局限性

1)串行计算导致训练缓慢

RNN 必须按照时间步依次处理序列(从 h₁ → h₂ → … → hₘ),每个时间步的计算必须等待前一步完成,无法并行化,导致训练时间随序列长度线性增长。

2)并行训练困难

RNN 的时序依赖特性使其难以在多台设备上进行并行训练。相比之下,CNN 可以将多个卷积核分配到不同 GPU 上独立计算,而 RNN 必须从头到尾串行执行。

注意:在 RNN 的输入层之前,通常需要设置一个词嵌入层(Embedding Layer),将离散的单词或字符转换为连续的向量表示,再送入模型。

2. 传统 Word2Vec 的缺陷

1)词向量固定不变

Word2Vec 训练完成后,每个词的向量表示是静态的,无论出现在什么语境中,其向量都保持不变。

2)无法处理一词多义

同一个词在不同语境下可能有不同含义。例如:

  • “台湾人说机车”——指摩托车
  • “这个人真机车”——指性格刁钻

Word2Vec 无法区分这些差异,而 BERT 等上下文相关模型可以根据语境动态生成词向量。

3. Transformer 整体结构

在这里插入图片描述

1)Encoder-Decoder 框架

Encoder-Decoder(编码-解码)框架是序列到序列(Seq2Seq)任务的核心架构,目前大多数注意力模型都基于此框架。

在 NLP 中,该框架用于处理输入序列 → 输出序列的问题,两者长度可以不同。典型应用包括:

任务 输入 输出
文本摘要 一篇文章 文章的摘要
机器翻译 英文句子 中文翻译
问答系统 一个问题 对应的答案

2)编码器(Encoder)

编码器负责将输入序列 <x₁, x₂, x₃, …, xₙ> 转化为一个语义编码 C,该编码中储存了输入序列的核心信息。常用的编码器实现包括 RNN、LSTM、GRU 及其双向变体。

在 Transformer 中,编码器由多个相同层堆叠而成,每层包含:

  • 自注意力子层:捕捉序列内部的依赖关系
  • 前馈神经网络子层:进行非线性特征变换

3)语义编码(Semantic Encoding)

以翻译为例:当人类翻译法语单词 “Bonjour” 时,大脑首先提取其语义概念(即"你好"的含义),这个抽象概念就是语义编码(Feature Vector)。随后,大脑基于该概念从目标语言(英语)的词汇库中匹配对应的词 “Hello”。编码器完成的就是"提取语义"这一过程。

4)解码器(Decoder)

解码器接收语义编码 C,并将其逐步解码为目标序列。解码方式同样可以使用 RNN、LSTM、GRU 等。Encoder 和 Decoder 的具体实现可以灵活组合,不要求使用相同的结构。

在 Transformer 中,解码器除了自注意力和前馈网络外,还增加了一个编码器-解码器注意力子层,用于在生成目标序列时关注输入序列的相关部分。

5)自注意力机制(Self-Attention)

自注意力机制是 Transformer 的核心组件,用于建模序列内部元素之间的关系。它通过以下步骤实现:

  1. 将输入序列映射为三个不同的向量表示:查询(Query,Q)键(Key,K)值(Value,V)
  2. 对于每个位置的查询 Q,计算它与所有位置的键 K 的相似度,得到注意力权重分布。
  3. 将该权重分布与对应的值 V 进行加权求和,得到该位置的上下文感知输出。

示例:在句子 “The animal didn’t cross the street because it was too tired” 中,“it” 指的是 “animal” 还是 “street”?自注意力机制通过计算 “it” 与其他词的关联权重,能够识别出 “it” 与 “animal” 的关联最强。

6)自注意力计算过程

Step 1:计算词与词之间的匹配程度

例如,对于一句话中的词序列,计算 q₁ 与 k₁ 的内积得到 112(表示第1个词与自身的匹配度),q₁ 与 k₂ 的内积得到 96(表示第1个词与第2个词的匹配度)。

Step 2:通过匹配程度加权融合特征

将匹配分数经过 Softmax 归一化后,对相应的值 V 进行加权求和,得到每个位置最终的注意力输出。

在这里插入图片描述

7)多头机制(Multi-Head Attention)

类似于卷积神经网络中使用多组卷积核提取不同特征,Transformer 使用多组 Q、K、V 并行计算注意力,每组称为一个"头"(Head)。

每个头可以关注输入序列中不同的语义关系

  • 有些头关注局部相邻词
  • 有些头关注长距离依赖
  • 有些头关注特定语法结构

最后将所有头的输出拼接并线性变换,得到更丰富的特征表示,从而提升模型的表达能力。

在这里插入图片描述

8)多层堆叠(Layer Stacking)

多层堆叠指将多个 Transformer 模块按顺序串联,形成深层网络结构。每个模块包含自注意力子层和前馈子层,且每层都使用残差连接和层归一化。

深层堆叠的好处:

  • 底层提取局部和浅层特征
  • 高层提取全局和抽象特征
  • 增加模型容量,捕捉更复杂的语言模式

9)位置编码(Positional Encoding)

由于 Transformer 的自注意力机制本身不包含顺序信息(它只关注"哪些词"而不关心"词的顺序"),因此需要显式注入位置信息。

位置编码的计算方式

词嵌入(Word Embedding)位置嵌入(Positional Encoding) 逐元素相加,得到融合语义和位置信息的最终输入表示。

公式如下:

  • 偶数位置(2i):PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
  • 奇数位置(2i+1):PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

其中:

  • pos:词在序列中的位置(从 0 开始)
  • d_model:词向量的维度
  • i:维度索引

示例:当 pos=3d_model=128 时,根据上述公式可计算出该位置的位置编码向量。

优点

  1. 输出值范围固定在 [-1, 1] 之间;
  2. 不同句子中相同位置的编码值一致,具有可迁移性。

在这里插入图片描述

10)Add & Normalize

每个子层(自注意力或前馈网络)的输出都会经过:

  1. 残差连接(Add):将输入直接加到输出上,缓解梯度消失。
  2. 层归一化(Normalize):对特征进行标准化,加速收敛。

11)整体工作流程

在这里插入图片描述

在解码器中,还有一个重要的操作:Outputs(Shifted Right),即右移一位

作用:在解码器的每个时间步,将之前已经生成的目标序列作为当前输入。具体做法是在目标序列最左侧添加一个起始符(如 <sos>),然后将整体右移一位,使解码器在预测第 t 个词时,能够看到前 t-1 个已生成的词。

示例(英译中):

时间步 解码器输入 预测输出
Step 1 <sos> “I”
Step 2 <sos> I “love”
Step 3 <sos> I love “China”
Step 4 <sos> I love China <eos>

12)BERT 的预训练数据与特殊标记

① 遮蔽语言模型(MLM)

随机选择句子中 15% 的词进行遮蔽(Mask),然后让模型预测被遮蔽的词。通常选择**字(Token)**级别进行遮蔽,因为词级别的可能性太多(如"今天"“明天”“上午”"下午"等),训练难度过大。

在这里插入图片描述

② 下一句预测(NSP)

从语料中抽取两个句子 A 和 B,其中 50% 的概率 B 是 A 的下一句,50% 的概率 B 是随机抽取的其他句子。模型需要判断 B 是否为 A 的下一句。

③ 特殊标记说明
标记 全称 作用
[CLS] Classification Token 放在序列开头,其最终输出向量用于分类任务
[SEP] Separator Token 用于分隔两个句子,或标记单个句子的结束

在训练过程中,[CLS][SEP] 也作为普通 Token 参与训练,学习到对应的上下文表示。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐