BERT

BERT (Bidirectional Encoder Representations from Transformers)

定义与概述

BERT是由Google AI Research在2018年提出的预训练语言模型,全称为Bidirectional Encoder Representations from Transformers(来自Transformers的双向编码器表示)。它是NLP领域的里程碑式模型,通过双向上下文学习为各种自然语言处理任务提供了强大的基础。

BERT的核心创新在于其真正的双向性,它能够同时考虑文本中单词的左侧和右侧上下文,从而获得更深入的语言理解。这种方法使BERT在多种理解类任务上取得了突破性的进展,如文本分类、命名实体识别、问答系统等。

架构与工作原理

基本架构

BERT基于Transformer架构的编码器部分:

  1. 输入嵌入层:包含三种嵌入

    • 词嵌入(Token Embeddings)
    • 位置嵌入(Position Embeddings)
    • 段落嵌入(Segment Embeddings)
  2. 多层Transformer编码器

    • BERT-Base:12层,768维隐藏层,12个注意力头,总计110M参数
    • BERT-Large:24层,1024维隐藏层,16个注意力头,总计340M参数
  3. 输出层:根据具体任务定制

输入文本 → 分词 → 嵌入层 → Transformer编码器层 × N → 上下文化表示

注意力机制

BERT使用多头自注意力机制(Multi-Head Self-Attention),允许模型关注输入序列中的不同位置:

  1. 自注意力计算:每个token可以关注序列中的所有tokens
  2. 多头机制:并行计算多组注意力,捕捉不同类型的依赖关系
  3. 残差连接与层归一化:促进深层网络的训练

预训练目标

BERT采用两个预训练任务:

  1. 掩码语言模型(Masked Language Model, MLM)

    • 随机掩盖输入中15%的tokens
    • 训练模型预测这些被掩盖的tokens
    • 这迫使模型学习双向上下文
  2. 下一句预测(Next Sentence Prediction, NSP)

    • 给定两个句子,预测第二个句子是否是第一个句子的真实后续
    • 帮助模型理解句子间关系

预训练与微调过程

预训练数据与方法

BERT的预训练使用了大规模无标注文本:

预训练过程:

  1. 应用WordPiece分词,词表大小30,000
  2. 最大序列长度512 tokens
  3. 批量大小256序列
  4. 训练100万步(约40个epochs)
  5. Adam优化器,学习率逐渐降低

微调策略

BERT的微调相对简单,只需要添加一个任务特定的输出层:

  1. 序列级任务(如情感分析):

    • 使用[CLS]标记的最终隐藏状态
    • 添加分类层进行预测
  2. token级任务(如命名实体识别):

    • 使用每个token的最终隐藏状态
    • 添加标记分类层
  3. 句子对任务(如自然语言推理):

    • 将两个句子用[SEP]标记分隔
    • 使用[CLS]标记的表示进行关系预测
  4. 问答任务

    • 预测答案的起始和结束位置

微调通常只需要少量标注数据和计算资源,使用较小的学习率(3e-5, 5e-5或2e-5)。

与其他模型的比较

BERT vs 传统词嵌入模型

特性 BERT Word2Vec/GloVe
上下文感知
多义词处理 可处理 不可处理
表示方式 动态上下文化 静态
训练方法 预训练+微调 单阶段训练
计算需求

关键区别:BERT生成的是上下文相关的词表示,而传统词嵌入为每个词生成单一静态表示。

BERT vs GPT

特性 BERT GPT
架构 仅编码器 仅解码器
上下文处理 双向 单向(左到右)
预训练目标 MLM + NSP 自回归语言建模
主要优势 理解能力 生成能力
适用任务 理解类任务 生成类任务

关键区别:BERT可以双向处理上下文,而GPT只能从左到右单向处理。

BERT vs RoBERTa

特性 BERT RoBERTa
训练数据 16GB 160GB
批量大小 256 8K
NSP任务
掩码策略 静态 动态
序列长度 512 512
性能 基准 优于BERT

关键区别:RoBERTa是BERT的优化版本,移除了NSP任务,使用更大的数据集和批量,以及动态掩码策略。

主要应用场景

文本分类

BERT在文本分类任务上表现出色:

示例:BERT在GLUE基准测试中的SST-2情感分析任务上达到94.9%的准确率。

命名实体识别

BERT能够有效识别文本中的实体:

优势:BERT的上下文表示使其能够更准确地识别实体边界和类型。

问答系统

BERT在问答任务中的应用:

示例:BERT在SQuAD 1.1问答数据集上达到了超过人类的表现。

自然语言推理

BERT在理解句子间关系方面表现优异:

语义相似度计算

BERT可以计算文本间的语义相似度:

优势与局限性

技术优势

  1. 双向上下文理解:同时考虑左右上下文,获得更全面的语言理解
  2. 强大的迁移学习能力:预训练知识可以迁移到多种下游任务
  3. 处理多义词能力:根据上下文生成不同的词表示
  4. 减少对标注数据的需求:通过预训练+微调范式,降低对大量标注数据的依赖
  5. 适应性强:可以适应各种NLP理解任务

实际应用中的局限

  1. 计算资源需求高:预训练和推理都需要大量计算资源
  2. 序列长度限制:标准BERT限制为512 tokens,难以处理长文档
  3. 生成能力弱:不适合文本生成任务
  4. 领域适应挑战:在特定领域可能需要额外的领域适应训练
  5. 预训练-微调差距:预训练目标与某些下游任务目标不完全一致

计算资源需求

后续发展

BERT引发了一系列改进和变体:

  1. RoBERTa:优化训练方法,移除NSP任务
  2. DistilBERT:通过知识蒸馏减小模型大小
  3. ALBERT:参数共享减少模型大小,提高训练效率
  4. SpanBERT:预测连续的文本片段而非单个token
  5. ELECTRA:使用判别式替代生成式预训练
  6. 多语言BERT:支持100多种语言的单一模型

实例说明

文本分类示例

任务:情感分析

输入
"这部电影的视觉效果令人惊叹,但剧情过于复杂,让人难以理解。"

BERT处理流程

  1. 分词:["这", "部", "电", "影", "的", ...]
  2. 添加特殊标记:["[CLS]", "这", ..., "理", "解", "。", "[SEP]"]
  3. 通过BERT获取[CLS]标记的表示
  4. 通过分类层预测情感:中性(混合正面和负面评价)

命名实体识别示例

任务:识别文本中的实体

输入
"马云于1999年在杭州创立了阿里巴巴集团。"

BERT处理流程

  1. 分词并获取每个token的表示
  2. 通过标记分类层预测每个token的实体标签
  3. 输出结果:
    • "马云":人名(PER)
    • "1999年":时间(TIME)
    • "杭州":地点(LOC)
    • "阿里巴巴集团":组织(ORG)

问答示例

任务:从段落中找出问题的答案

上下文
"人工智能(AI)是计算机科学的一个分支,致力于创建能够模拟人类智能的系统。这些系统可以学习、推理、感知、规划和解决问题。AI技术包括机器学习、深度学习、自然语言处理和计算机视觉等。"

问题
"AI技术包括哪些领域?"

BERT处理流程

  1. 将问题和上下文组合:["[CLS]", "AI", "技术", ..., "[SEP]", "人工", "智能", ...]
  2. 通过BERT获取每个token的表示
  3. 预测答案的起始和结束位置
  4. 提取答案:"机器学习、深度学习、自然语言处理和计算机视觉等"

相关资源与参考

学术论文

开源实现

相关模型

总结

BERT作为一种基于Transformer的预训练语言模型,通过其真正的双向上下文理解能力,彻底改变了NLP领域。它的预训练+微调范式使得模型可以在各种下游任务上取得出色表现,特别是在理解类任务上。尽管BERT在生成任务和处理长文本方面存在局限,但它的出现标志着NLP进入了预训练模型时代,并启发了众多后续研究和改进。BERT的成功证明了上下文表示的重要性,为后来的GPTBARTT5等模型奠定了基础。