深入浅出BERT:原理、架构与应用

前言

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层主要包含两个子层:

  1. 多头自注意力层 (Multi-Head Self-Attention):这是模型理解上下文的关键。它将输入的词向量并行地通过多个“注意力头”进行处理,每个头学习不同的语义关系,最后将结果拼接并线性变换。数学上,对于一个注意力头,其计算过程如下:

    给定输入序列的嵌入矩阵 X∈Rn×dX \in \mathbb{R}^{n \times d}XRn×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,WVRd×dk 是可学习的权重矩阵,dkd_kdk 是每个头的维度(通常 dk=d/hd_k = d / hdk=d/hhhh 为头数,例如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}WORhdk×d 是输出权重矩阵。

  2. 前馈神经网络层 (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)=W2ReLU(W1x+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∈MASKedlog⁡Pi(yi)\mathcal{L}_{\text{MLM}} = -\sum_{i \in \text{MASKed}} \log P_i(y_i)LMLM=iMASKedlogPi(yi)
其中 yiy_iyi 是位置 iii 上被遮盖的真实词。

2.2 下一句预测 (Next Sentence Prediction, NSP)

这个任务旨在让模型理解句子间的关系,这对于问答、自然语言推理等任务非常重要。

任务描述:给定两个句子A和B,模型需要判断B是否是A的下一句。训练数据中,50%的样本是真实的连续句子对(标签为IsNext),另外50%的样本是随机从语料库中抽取的句子对(标签为NotNext)。

输入:由于注意力机制会捕捉序列不同位置间的依赖关系,因此只需要输入BertEncoder的特殊词元“<clsclscls>”的编码结果

输出:预测结果

损失函数:NSP任务是一个二分类问题,同样使用交叉熵损失:
LNSP=−[y⋅log⁡P(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=[ylogP(IsNext)+(1y)log(1P(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参数作为初始化,然后在特定任务的有标签数据集上,用监督学习的方式对所有参数进行少量迭代的训练。

微调的过程通常非常简单:

  1. 在BERT模型的顶部添加一个与具体任务相关的轻量级“任务头”(Task-specific Head)。例如:
    • 文本分类:在[CLS]标记的最终输出向量上加一个全连接层和softmax。
    • 序列标注(如命名实体识别):在每个词的最终输出向量上加一个全连接层和softmax。
    • 问答(如SQuAD):预测答案在原文中的起始和结束位置。
  2. 使用下游任务的标注数据,对整个模型(BERT参数 + 任务头参数)进行端到端的训练。

得益于强大的预训练表示,BERT通常只需要少量的下游任务数据和较短的训练时间,就能达到非常好的效果。

4. 总结

BERT通过其基于Transformer Encoder的架构和创新的MLM+NSP预训练任务,成功地学习到了深度双向的上下文表示。这种表示具有极强的通用性,只需通过简单的微调即可在广泛的NLP任务上取得顶尖性能。尽管后续出现了许多更强大的模型,但BERT因其简洁、有效和开创性,仍然是NLP领域最重要的里程碑之一。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值