Datawhale 大模型基础与量化微调 task2:预训练模型
摘要:本文介绍了三种主流预训练语言模型的技术特点。BERT采用双向Transformer编码器结构,通过掩码语言模型(MLM)和下一句预测(NSP)任务进行预训练,其输入包含token、位置和片段三种嵌入。GPT基于单向Transformer解码器,以自回归方式生成文本,经历了从微调到零样本学习的演进。T5采用编码器-解码器架构,将所有NLP任务统一为文本转换问题,使用Span Corruptio
·
Datawhale 大模型基础与量化微调 task2:预训练模型
此博客为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 能够天然地支持多语言混合训练,而不需要针对每种语言设计特定的分词规则,非常符合其“大一统”的设计哲学。
参考
更多推荐



所有评论(0)