此博客为Datawhale 组队学习打卡笔记


BERT

  • BERT(Bidirectional Encoder Representations from Transformers),完全基于编码器结构构建
  • 生成动态的、与上下文相关的词向量
  • 一个强大的预训练语言模型
模型 层数 (L) 隐藏层大小 (H) 注意力头数 (A) 总参数量
BERT-Base 12 768 12 ~1.1 亿
BERT-Large 24 1024 16 ~3.4 亿

BERT 的输入表示

BERT 的输入表示由三个部分的嵌入向量逐元素相加而成:
I n p u t e m b e d d i n g = T o k e n e m b e d d i n g + P o s i t i o n e m b e d d i n g + S e g m e n t e m b e d d i n g Input_{embedding} = Token_{embedding} + Position_{embedding} + Segment_{embedding} Inputembedding=Tokenembedding+Positionembedding+Segmentembedding

  • token嵌入
  • 片段嵌入
    • 为了处理句子对任务(如判断两个句子是否是连续的)而引入的,用于区分输入中的不同句子
    • 对于一个由句子 A 和句子 B 拼接而成的输入,所有属于句子 A 的token都会加上一个相同的“句子A嵌入”,而所有属于句子 B 的token则会加上另一个“句子B嵌入”
  • 位置嵌入

特殊token

  • [CLS] (Classification)
    • 添加到 每个输入序列的开头
    • 视为整个输入序列的 聚合表示
    • 文本分类、情感分析等句子级别的任务时,通常只取用 [CLS]对应的输出向量
  • [SEP] (Separator)
    • 用于 分隔不同的句子, 在每个句子的末尾
  • [MASK]
    • 仅在 预训练阶段 使用,用于“掩盖”掉输入序列中的某些token,是“掩码语言模型”任务的核心
  • [PAD] (Padding)
  • [UNK] (Unknown)
    • 当tokenizer遇到词表中不存在的字符或词汇时,会将其替换为该特殊token

BERT 的预训练任务

  • 掩码语言模型 (Masked Language Model, MLM): 完形填空
    • 80% 的情况:将选中的token替换为 [MASK] 标记。
    • 10% 的情况:将选中的token替换成一个随机的其他词元。
    • 10% 的情况:保持token不变。
    • 局限:由于 MLM 是随机 Mask 单个字或子词,可能会割裂一个完整词语的内部语义联系。
    • WWM (Whole Word Masking, 全词掩码),如果一个词的一部分被选中进行 Mask,那么这个词的所有部分都会被一起 Mask

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

  • 目标是让模型理解句子与句子之间的逻辑关系。在训练时,模型会接收一对句子 A 和 B,并判断句子 B 是否是句子 A 在原文中的下一句。
    • 构造句子对: 在预训练时,为模型准备句子对 (A, B)。其中,50% 的情况下,B 是 A 的真实下一句;另外 50% 的情况下,B 是从语料库中随机选择的一个句子。
    • 将 [CLS] 的最终隐藏状态送入一个二分类器,来判断 IsNext 还是 NotNext
    • 后续研究(如 RoBERTa 4, ALBERT 5)对 NSP 的有效性提出了质疑,发现在更大规模的预训练下,移除它或用 other 任务替代(如句子顺序预测)会带来更好的效果。

实践技巧与生态

通常使用最后一层的输出作为词元或句子的特征表示,但研究和实践表明,BERT 的不同层级学习到的特征有所侧重:

  • 底层 更偏向于捕捉 词法、语法 等表层信息。
  • 高层 更偏向于捕捉 语义、语境 等深层信息
  • 在某些任务(如命名实体识别)中,将最后几层(例如,最后四层)的向量进行拼接(Concatenate)或相加(Sum),有时能获得比单独使用最后一层更好的效果。

GPT

  • 完全基于 Transformer 解码器 构建
  • 根据给定的上文,以自回归的方式预测下一个最可能的词元

从微调到提示

  • GPT-1:有监督微调(Supervised Fine-tuning)
  • GPT-2:零样本学习(Zero-shot Learning)
  • GPT-3:上下文学习(In-context Learning)
    • 仅凭输入提示中给出的少量示例(Demonstrations),就能理解并完成新任务

GPT 架构解析

模型架构与微调策略

  • 分类任务:在文本前后添加起始 (Start) 和提取 (Extract) 标记。
  • 蕴含任务:将前提和假设用分隔符 (Delim) 拼接。
  • 相似度任务:由于 GPT 是单向模型,无法像 BERT 那样同时“看到”两个句子,所有它对句子顺序敏感。为了消除这种顺序偏差,将两个句子按不同顺序拼接(Text1-Text2 和 Text2-Text1),分别输入模型,最后将两者的特征相加作为最终表示。
  • 多选题任务:将上下文与每一个答案选项分别拼接,独立输入模型计算得分。

T5 (Text-to-Text Transfer Transformer)

  • Encoder-Decoder 结构
  • BERT 擅长理解(如分类、实体识别),GPT 擅长生成(如续写、对话)
  • T5 将所有 NLP 任务都视为 “文本到文本” (Text-to-Text) 的转换问题

提示词的先驱与多任务平衡

  • 为了让同一个模型能够区分不同的任务,T5 引入了 Task Prefix (任务前缀) 的概念
  • T5 Prefix 与 GPT Prompt 的区别
    • T5 Prefix:主要用于有监督微调。模型在训练时就见过这些前缀,它们是“多任务学习”的一种标记,告诉模型当前要调动哪部分参数。
    • GPT Prompt:主要用于零样本/少样本推理。模型在预训练时可能没见过特定的 Prompt,但依靠强大的泛化能力,它能通过 Prompt 理解用户的意图,而无需更新参数。
  • 全新预训练目标——Span Corruption(片段破坏与重构):在输入文本中随机选中一些连续的片段(Span),并将它们替换为特殊的哨兵符(Sentinel Token),如 <extra_id_0>, <extra_id_1>,要求 Decoder 生成被遮盖的片段。

T5 架构解析

  • 相对位置编码

    • 在 BERT 和 GPT 中,使用的是绝对位置编码(给每个位置分配一个固定的向量)。但 T5 认为,注意力机制应该关注词与词之间的相对距离,而不是它们在句子中的绝对坐标。
    • T5 采用了一种基于分桶 (Bucketing) 的相对位置编码方案
      • 近距离精确,远距离模糊
      • 参数共享,位置编码的参数在所有层之间共享
  • SentencePiece 分词器

    • 处理原始文本:BERT 需要先将文本进行预分词(Pre-tokenization,如按空格切分),这对于中文或不使用空格的语言并不友好。T5 的 SentencePiece 直接在原始文本(Raw Text)上进行训练,将空格视为一种特殊字符(如 _)处理。
    • 语言无关性:这种设计使得 T5 能够天然地支持多语言混合训练,而不需要针对每种语言设计特定的分词规则,非常符合其“大一统”的设计哲学。

参考

[1] https://datawhalechina.github.io/base-llm

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐