【深度学习】自然语言处理框架bert的深度解析
BERT 与 Transformer 深度解析
一、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 的核心组件,用于建模序列内部元素之间的关系。它通过以下步骤实现:
- 将输入序列映射为三个不同的向量表示:查询(Query,Q)、键(Key,K) 和 值(Value,V)。
- 对于每个位置的查询 Q,计算它与所有位置的键 K 的相似度,得到注意力权重分布。
- 将该权重分布与对应的值 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=3,d_model=128 时,根据上述公式可计算出该位置的位置编码向量。
优点:
- 输出值范围固定在 [-1, 1] 之间;
- 不同句子中相同位置的编码值一致,具有可迁移性。

10)Add & Normalize
每个子层(自注意力或前馈网络)的输出都会经过:
- 残差连接(Add):将输入直接加到输出上,缓解梯度消失。
- 层归一化(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 参与训练,学习到对应的上下文表示。
更多推荐

所有评论(0)