前言
BERT(Bidirectional Encoder Representations from Transformers)是Google在2018年发布的一种革命性的预训练语言模型。其全称为“来自Transformer的双向编码器表示”。与以往的模型不同,BERT的核心创新在于其能够通过联合考虑左侧和右侧的上下文,从未标记的海量文本中学习到深度的双向语义表示。这使得它在发布后迅速刷新了多项自然语言处理(NLP)任务的基准成绩。
1. BERT的核心架构:Transformer Encoder
BERT模型完全基于Transformer架构的编码器(Encoder)部分,舍弃了解码器(Decoder)。这是因为BERT的设计目标是生成上下文相关的词向量表示,而非进行序列生成。Transformer的核心是自注意力机制(Self-Attention Mechanism),它允许模型在处理序列中的每一个词时,动态地关注并加权序列中的所有其他词,从而捕捉长距离依赖和复杂的上下文关系。
1.1 Transformer Encoder 层
一个标准的Transformer Encoder层主要包含两个子层:
-
多头自注意力层 (Multi-Head Self-Attention):这是模型理解上下文的关键。它将输入的词向量并行地通过多个“注意力头”进行处理,每个头学习不同的语义关系,最后将结果拼接并线性变换。数学上,对于一个注意力头,其计算过程如下:
给定输入序列的嵌入矩阵 X∈Rn×dX \in \mathbb{R}^{n \times d}X∈Rn×d,其中 nnn 是序列长度,ddd 是嵌入维度。
首先计算查询(Query)、键(Key)和值(Value)向量:
Q=XWQ,K=XWK,V=XWVQ = XW^Q, \quad K = XW^K, \quad V = XW^VQ=XWQ,K=XWK,V=XWV
其中 WQ,WK,WV∈Rd×dkW^Q, W^K, W^V \in \mathbb{R}^{d \times d_k}WQ,WK,WV∈Rd×dk 是可学习的权重矩阵,dkd_kdk 是每个头的维度(通常 dk=d/hd_k = d / hdk=d/h,hhh 为头数,例如BERT-base中 d=768,h=12,dk=64d=768, h=12, d_k=64d=768,h=12,dk=64)。然后计算注意力分数并进行加权求和:
Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dkQKT)V多头注意力将上述过程并行执行 hhh 次,得到 hhh 个输出,然后拼接并进行线性变换:
MultiHead(Q,K,V)=Concat(head1,...,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^OMultiHead(Q,K,V)=Concat(head1,...,headh)WO
其中 headi=Attention(XWiQ,XWiK,XWiV)\text{head}_i = \text{Attention}(XW_i^Q, XW_i^K, XW_i^V)headi=Attention(XWiQ,XWiK,XWiV),WO∈Rhdk×dW^O \in \mathbb{R}^{hd_k \times d}WO∈Rhdk×d 是输出权重矩阵。 -
前馈神经网络层 (Feed-Forward Network, FFN):这是一个简单的两层全连接网络,对每个位置的向量独立进行非线性变换:
FFN(x)=W2⋅ReLU(W1⋅x+b1)+b2\text{FFN}(x) = W_2 \cdot \text{ReLU}(W_1 \cdot x + b_1) + b_2FFN(x)=W2⋅ReLU(W1⋅x+b1)+b2
其中 W1,W2W_1, W_2W1,W2 是权重矩阵,b1,b2b_1, b_2b1,b2 是偏置项。
每个子层后面都应用了残差连接(Residual Connection)和层归一化(Layer Normalization):
LayerNorm(x+Sublayer(x))\text{LayerNorm}(x + \text{Sublayer}(x))LayerNorm(x+Sublayer(x))
BERT模型就是由多个这样的Transformer Encoder层堆叠而成(例如BERT-base有12层,BERT-large有24层)。
1.2 输入表示
BERT的输入是词(更准确地说是WordPiece)的嵌入向量,但它巧妙地融合了三种信息:
- Token Embeddings:词本身的向量表示。
- Segment Embeddings:用于区分句子对中的第一个句子(A)和第二个句子(B),这对于处理如问答、自然语言推理等涉及两个句子的任务至关重要。
- Position Embeddings:由于Transformer没有RNN那样的内在顺序,位置嵌入用于向模型注入词在序列中的位置信息。
最终的输入向量是这三种嵌入的加和:E=Etoken+Esegment+EpositionE = E_{\text{token}} + E_{\text{segment}} + E_{\text{position}}E=Etoken+Esegment+Eposition。
2. BERT的预训练:两大任务
BERT的强大能力源于其在大规模无标注语料库上进行的预训练。它通过两个无监督任务来学习语言的通用表示:
2.1 掩码语言模型 (Masked Language Model, MLM)
这是BERT最核心的创新。传统的语言模型(如GPT)是单向的,只能从左到右或从右到左预测。MLM任务则打破了这一限制,实现了真正的双向上下文建模。
任务描述:随机遮盖输入序列中约15%的词(其中80%用[MASK]标记替换,10%用随机词元替换,10%保持不变),然后让模型根据上下文预测这些被遮盖的原始词是什么。
输入:BertEncode的编码结果以及用于遮蔽预测的词元位置
输出:这些位置的预测结果
损失函数:MLM任务使用多类别交叉熵损失函数(Cross-Entropy Loss)。对于每一个被MASK的位置 iii,模型会输出一个在词汇表上的概率分布 PiP_iPi,其损失为:
LMLM=−∑i∈MASKedlogPi(yi)\mathcal{L}_{\text{MLM}} = -\sum_{i \in \text{MASKed}} \log P_i(y_i)LMLM=−i∈MASKed∑logPi(yi)
其中 yiy_iyi 是位置 iii 上被遮盖的真实词。
2.2 下一句预测 (Next Sentence Prediction, NSP)
这个任务旨在让模型理解句子间的关系,这对于问答、自然语言推理等任务非常重要。
任务描述:给定两个句子A和B,模型需要判断B是否是A的下一句。训练数据中,50%的样本是真实的连续句子对(标签为IsNext),另外50%的样本是随机从语料库中抽取的句子对(标签为NotNext)。
输入:由于注意力机制会捕捉序列不同位置间的依赖关系,因此只需要输入BertEncoder的特殊词元“<clsclscls>”的编码结果
输出:预测结果
损失函数:NSP任务是一个二分类问题,同样使用交叉熵损失:
LNSP=−[y⋅logP(IsNext)+(1−y)⋅log(1−P(IsNext))]\mathcal{L}_{\text{NSP}} = -[y \cdot \log P(\text{IsNext}) + (1-y) \cdot \log (1 - P(\text{IsNext}))]LNSP=−[y⋅logP(IsNext)+(1−y)⋅log(1−P(IsNext))]
其中 yyy 是真实标签(1表示IsNext,0表示NotNext)。
总预训练损失是两个任务损失的加权和:
Ltotal=LMLM+LNSP\mathcal{L}_{\text{total}} = \mathcal{L}_{\text{MLM}} + \mathcal{L}_{\text{NSP}}Ltotal=LMLM+LNSP
通过这两个任务的联合训练,BERT能够学习到丰富的词汇、句法和语义知识,以及句子间的逻辑关系。
3. BERT的微调:适应下游任务
预训练完成后,BERT可以通过微调(Fine-tuning)轻松适配到各种下游NLP任务。微调的核心思想是利用预训练好的BERT参数作为初始化,然后在特定任务的有标签数据集上,用监督学习的方式对所有参数进行少量迭代的训练。
微调的过程通常非常简单:
- 在BERT模型的顶部添加一个与具体任务相关的轻量级“任务头”(Task-specific Head)。例如:
- 文本分类:在
[CLS]标记的最终输出向量上加一个全连接层和softmax。 - 序列标注(如命名实体识别):在每个词的最终输出向量上加一个全连接层和softmax。
- 问答(如SQuAD):预测答案在原文中的起始和结束位置。
- 文本分类:在
- 使用下游任务的标注数据,对整个模型(BERT参数 + 任务头参数)进行端到端的训练。
得益于强大的预训练表示,BERT通常只需要少量的下游任务数据和较短的训练时间,就能达到非常好的效果。
4. 总结
BERT通过其基于Transformer Encoder的架构和创新的MLM+NSP预训练任务,成功地学习到了深度双向的上下文表示。这种表示具有极强的通用性,只需通过简单的微调即可在广泛的NLP任务上取得顶尖性能。尽管后续出现了许多更强大的模型,但BERT因其简洁、有效和开创性,仍然是NLP领域最重要的里程碑之一。
888

被折叠的 条评论
为什么被折叠?



