BERT-语言模型


BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,通过双向上下文建模在多项NLP任务中取得突破性进展。以下是对BERT架构的详细解析:


1. 核心架构

BERT基于Transformer编码器堆叠而成,主要特点包括: - 双向性:通过自注意力机制同时捕捉上下文信息。 - 多层堆叠:Base版(12层)和Large版(24层)分别包含不同规模的参数。 - 多头注意力:Base版12个头,Large版16个头,增强模型对不同语义子空间的关注能力。


2. 输入表示

BERT的输入由三部分嵌入相加组成: 1. 词嵌入(Token Embeddings):使用WordPiece分词,处理未登录词(如“playing”拆分为“play”+“##ing”)。 2. 段嵌入(Segment Embeddings):区分句子对(如[SEP]分隔,第一句用EA、第二句用EB)。 3. 位置嵌入(Position Embeddings):学习得到的位置编码(非Transformer的正弦/余弦函数),支持最长512个token。

输入格式示例:[CLS] Sentence A [SEP] Sentence B [SEP]


3. 预训练任务

3.1 Masked Language Model (MLM)

  • 随机掩盖15%的token:80%替换为[MASK],10%随机替换,10%保持原词。
  • 目的:迫使模型学习上下文推断,缓解微调时[MASK]缺失的问题。

3.2 Next Sentence Prediction (NSP)

  • 判断句子B是否为A的下一句:正样本来自连续文本,负样本随机采样。
  • 目的:增强模型对句子间关系的理解(后续研究如RoBERTa发现NSP可能非必要)。

4. 模型细节

  • Transformer层结构
  • 自注意力层:计算序列内所有位置的关联权重。
  • 前馈网络(FFN):两层全连接(激活函数为GELU)。
  • 残差连接与层归一化:每子层后接残差和LayerNorm,公式为LayerNorm(x + Sublayer(x))
  • 参数量计算(以BERT-base为例):
  • 词表嵌入:30,000×768 ≈ 23M。
  • 编码器层:每层约7M参数(注意力+FFN),12层共84M。
  • 总计约110M参数。

5. 微调策略

  • 任务适配:在预训练模型上添加任务特定层(如[CLS]输出用于分类,各token输出用于序列标注)。
  • 超参数调整:通常仅需调整学习率(如2e-5到5e-5),其他参数与预训练一致。

6. 优缺点分析

优点

  • 双向上下文建模能力显著优于单向模型(如GPT)。
  • 通用性强,可通过微调适配多种任务(分类、QA、NER等)。

缺点

  • 预训练计算成本高,长文本处理受限(最大长度512)。
  • MLM与微调任务输入分布不一致(通过替换策略缓解)。
  • NSP任务效果受质疑(RoBERTa等模型移除此任务后表现更优)。

7. 后续改进

  • RoBERTa:移除NSP、动态掩码、更大batch训练。
  • ALBERT:参数共享与嵌入分解降低参数量。
  • Longformer:稀疏注意力机制支持更长文本。

总结

BERT通过双向Transformer编码器和MLM+NSP预训练任务,实现了深层次上下文建模,成为NLP领域里程碑式工作。其成功启发了大量后续模型的优化,推动了预训练-微调范式的广泛应用。