【深度学习】从Self-Attention到BERT:自然语言处理的核心技术详解

大家好,我是~墨-。今天我们来聊聊自然语言处理(NLP)中两个非常重要的概念:Self-Attention(自注意力机制)BERT(双向编码器表示)。这篇文章将带你从最基础的文本表示开始,一步步理解为什么需要Self-Attention,它是如何工作的,以及BERT又是怎样站在Transformer的肩膀上成为NLP界的“万金油”。无论你是初学者还是有一定基础的开发者,希望这篇文章能帮你理清思路,掌握这些核心概念。


一、引言

自然语言处理的任务五花八门:情感分析、机器翻译、命名实体识别……但无论任务是什么,计算机首先要解决一个问题:如何把文字变成它能理解的数字?

早期的做法很简单,比如One-hot Encoding,但很快发现它有很多缺点。后来有了Word Embedding,词的表示变得稠密且富含语义。接着,为了处理序列数据(比如一句话),人们发明了RNN、LSTM,但它们无法并行计算,且长距离依赖依然困难。直到2017年,Google提出Transformer,其中的Self-Attention机制彻底改变了NLP的格局。随后,BERT横空出世,将NLP带入预训练时代。

下面我们就一步步揭开它们的神秘面纱。


二、文本的向量表示

1. One-hot Encoding:独热编码

假设我们有一个词表,包含“我”、“你”、“他”、“猫”、“狗”五个词。用One-hot表示就是:

我 = [1, 0, 0, 0, 0]
你 = [0, 1, 0, 0, 0]
他 = [0, 0, 1, 0, 0]
猫 = [0, 0, 0, 1, 0]
狗 = [0, 0, 0, 0, 1]

缺点

  • 维度灾难:词表多大,向量就有多长。
  • 无法体现词与词的关系:比如“猫”和“狗”都是宠物,但它们的向量正交,看不出任何相似性。

2. Word Embedding:词嵌入

为了解决上述问题,我们让模型自己学习词的向量表示。通过一个线性层(例如Linear(21128, 768)),我们可以把每个词的One-hot向量映射到一个低维稠密空间(比如768维)。这样,“猫”和“狗”的向量就会在空间上比较接近,因为它们经常出现在相似的语境中。


三、序列建模的演进:RNN → LSTM → Self-Attention

1. RNN与LSTM

RNN(循环神经网络)的核心思想是:逐个词处理,并传递一个“记忆单元”。这个记忆单元会随着时间步更新,从而捕捉上文信息。

LSTM(长短期记忆网络)引入了输入门、遗忘门、输出门,让网络可以选择性地记住或忘记信息,从而更好地处理长距离依赖。

但是,它们都有一个共同的痛点:

  • 无法并行计算:必须按顺序一个一个词处理,速度慢。
  • 长距离依赖依然有限:即使LSTM,也很难捕捉很远的依赖关系。比如一段长文中,问“谁与赛汗塔拉结下了不解之缘?”答案可能在很前面,LSTM可能早已遗忘。

2. 从RNN到Self-Attention的思考

有没有一种方法,可以一次性看完整句话,同时知道每个词与其他所有词的关系呢?这就是Self-Attention要解决的问题。


四、Self-Attention 机制详解

Self-Attention 的核心思想是:每个词不仅看自己,还要看与其他词的关系,然后加权融合

1. 三个核心向量:Query, Key, Value

对于输入序列中的每个词向量 (a_i),我们通过三个不同的权重矩阵 (W_q, W_k, W_v) 计算出三个新向量:

  • Query(查询):(q_i = a_i W_q)
  • Key(键):(k_i = a_i W_k)
  • Value(值):(v_i = a_i W_v)

直观理解:Query 就像是你在问“我要找什么?”,Key 就是每个词提供的“我有什么信息?”,Value 是“我实际的内容”。

2. 计算注意力分数

以第一个词 (a_1) 为例,它需要知道整个序列中每个词对它的重要性。我们计算 (q_1) 与所有 (k_j) 的点积,就是注意力分数(Attention Score),表示 (a_1) 对 (a_j) 的关注程度。

3. Softmax 归一化

4. 加权求和得到输出

最后,用这些权重去加权求和所有的 Value 向量,得到 (a_1) 对应的输出 (b_1),同理,我们可以计算出 (b_2, b_3, b_4)。

5. 矩阵形式

上面过程可以用矩阵简洁表达:

  • (Q = X W_q)
  • (K = X W_k)
  • (V = X W_v)
  • 注意力矩阵:(A = QK^T)
    其中 (X) 是输入矩阵(每一行是一个词向量)。

6. 举个栗子

假设输入有四个词 (a_1, a_2, a_3, a_4),计算出的注意力分数经过 Softmax 后可能得到:

  • (a_1) 对 (a_1) 的权重 0.1,对 (a_2) 的权重 0.3,对 (a_3) 的权重 0.2,对 (a_4) 的权重 0.4。
    这说明 (a_1) 认为 (a_4) 最重要,(a_2) 次之……

然后输出 (b_1 = 0.1 v_1 + 0.3 v_2 + 0.2 v_3 + 0.4 v_4)。


五、多头注意力与位置编码

1. 多头注意力

单一的注意力可能只关注到某一种关系。为了让模型关注不同方面的信息(比如语法、语义、指代等),我们可以使用多头注意力(Multi-Head Attention)。

做法:将 (Q, K, V) 分成多个头(比如8个头),每个头独立计算注意力,最后把所有头的输出拼接起来,再经过一个线性层。

2. 位置编码

Self-Attention 本身不具备位置信息——它把输入当作一个集合,词序被打乱也不影响输出。但在语言中,顺序至关重要。所以我们需要在输入中加入位置编码(Positional Encoding)。

常见做法:使用正弦和余弦函数生成固定位置向量,或者让模型学习位置向量。然后将词嵌入与位置编码相加,作为最终的输入。


六、Transformer 简介

Transformer 是一个基于 Self-Attention 的 Encoder-Decoder 架构,最初用于机器翻译。它的核心就是多头自注意力 + 前馈神经网络 + 残差连接 + 层归一化

  • Encoder:将输入序列编码为连续表示。
  • Decoder:根据编码器的输出和已生成的目标词,逐步生成目标序列。

由于我们的重点是 BERT,这里只做简要介绍。


七、BERT:双向编码器表示

BERT(Bidirectional Encoder Representations from Transformers)本质上是一个堆叠了多个 Transformer Encoder 的模型。它的创新在于双向:在预训练时,同时利用上下文的左右两侧信息。

1. BERT的结构

  • 输入 = Token Embedding + Segment Embedding + Position Embedding。
  • 经过多层 Transformer Encoder 后,输出每个 token 对应的特征向量。
  • 可选输出方式:
    • 取 [CLS] 位置的向量(适合分类任务)
    • 平均池化或最大池化

2. BERT的预训练任务

BERT 的成功很大程度上归功于它的两个预训练任务:

(1)Masked Language Model(MLM)

随机遮盖输入中15%的词,然后让模型预测被遮盖的词。但为了缓和预训练与微调之间的差异,BERT 对那15%的词做了特殊处理:

  • 80% 替换为 [MASK]
  • 10% 替换为随机词
  • 10% 保持不变

这样模型必须根据上下文理解每个词,而不是简单地记忆。

(2)Next Sentence Prediction(NSP)

输入是两句话 A 和 B,让模型判断 B 是不是 A 的下一句(IsNext / NotNext)。这个任务帮助 BERT 理解句子间的关系,对问答、自然语言推理等任务很有帮助。


八、BERT的微调与应用

预训练后的 BERT 可以看作一个强大的特征提取器。我们只需要在它的输出层加上一个简单的分类层,就可以在各种下游任务上进行微调(Fine-tuning),比如:

  • 情感分类(取 [CLS] 输出)
  • 命名实体识别(每个 token 输出一个标签)
  • 问答任务(预测答案的开始和结束位置)

由于 BERT 已经学会了通用的语言知识,微调只需要少量数据就能达到很好的效果。


九、总结与展望

模型/概念 主要贡献 局限性
One-hot 最简单的数值化 维度灾难,无语义
Word Embedding 稠密向量,有语义 静态,不能根据上下文变化
RNN/LSTM 序列建模,有记忆 不能并行,长距离依赖弱
Self-Attention 全局关系建模,可并行 无位置信息,需配合位置编码
Transformer 完全基于注意力,强大特征提取 参数量大,需要大量数据
BERT 双向预训练,迁移学习 模型大,推理慢

如今,BERT 及其变体(RoBERTa、ALBERT、DistilBERT 等)已经成为 NLP 任务的标配。但随着 GPT 等生成式模型的兴起,NLP 又迎来了新的变革。不过,Self-Attention 和 Transformer 作为基石,依然值得我们深入理解。

希望这篇文章能帮你理清 Self-Attention 到 BERT 的脉络。如果你有任何问题或想法,欢迎在评论区留言讨论!


本文首发于CSDN,作者:~墨-。未经许可,禁止转载。

更多推荐