结业考核
这是本书过程化考核的最后一环,由两部分组成:综合项目与结业测验。全部完成后,你应当能脱离任何 AI 工具独立使用 Hugging Face 生态完成一次模型微调,并读懂、验证 AI 生成的训练代码——这正是本书的两个核心目标。
一、综合项目
从下面三个主题中任选一个,独立完成。也可以自拟同等难度的主题,但必须先按第 12 章的审查清单自评。
主题 A:情感分类微调工具
- 用
datasets加载 GLUE/SST-2(或你自己的中文评论数据集)。 - 完成数据分词与
DataCollator组装;模型使用带id2label/label2id的分类头。 - 用
Trainer完成微调,记录训练日志并给出验证集准确率。 - 保存模型与分词器,写一个可复用的
predict(text)函数,对至少 5 条新句子给出预测。 - 输出一份简短实验报告:数据规模、超参数、训练曲线、评估结果、失败案例。
主题 B:LoRA 消融实验
- 用同一个模型(如
prajjwal1/bert-tiny)和同一份数据,分别做:全量微调 与 LoRA(r=2 / r=8)。 - 记录三组的可训练参数数量与验证集准确率,解释 LoRA 的参数量节省与效果差异。
- 保存 adapter,验证
PeftModel.from_pretrained可以脱离训练环境加载。
主题 C:数据预处理管道
- 构造一个混合数据源:两个不同格式的文件(如 CSV 与 JSONL),用
datasets合并成统一Dataset。 - 完成:清洗(去空、去重)、长度统计、标签映射、按比例切分、
save_to_disk持久化。 - 用
streaming=True验证大数据集上可以边下载边处理,写出两种加载方式的取舍说明。
统一验收标准(全部满足才算通过):
| 标准 | 说明 |
|---|---|
| 可运行 | 按 README 或注释说明可一键运行,无语法错误 |
| 有注释 | 关键函数有注释,说明「为什么」 |
| 有容错 | 空文件、缺失值、异常输入不会导致程序崩溃 |
| 结构清晰 | 用函数组织代码,没有大段重复 |
| 结果可复现 | 设置固定种子,运行两次得到相同结果 |
| 诚实评估 | 评估数字来自真实运行,不挑选有利结果,失败案例如实报告 |
二、结业测验
覆盖第 1~12 章知识点,共 15 题,答对 12 题(80%)以上视为通过。
pipeline("text-classification")中,「text-classification」是什么?(第 1 章)- A. 模型名
- B. 任务名
- C. 数据集名
- D. 损失函数名
- transformers 生态中,负责「数据集加载与变换」的库是?(第 1 章)
- A. tokenizers
- B. datasets
- C. peft
- D. accelerate
AutoModel.from_pretrained("...")中from_pretrained的作用是?(第 3 章)- A. 从 Hub 或本地目录加载预训练权重与配置
- B. 随机初始化一个新模型
- C. 把模型保存到本地
- D. 下载数据集
- 模型保存后目录里常见的
model.safetensors是?(第 3 章)- A. 分词器词表
- B. 模型权重文件
- C. 训练日志
- D. 配置文件
- BERT 分词器对文本开头自动加的特殊 token 是?(第 4 章)
- A.
[SEP] - B.
[PAD] - C.
[CLS] - D.
[MASK]
- A.
tokenizer(..., padding="longest", truncation=True)中,truncation=True的作用是?(第 4 章)- A. 把短句补到和最长句一样长
- B. 超过长度上限的序列被截断
- C. 删除空句子
- D. 随机采样句子
load_dataset("nyu-mll/glue", "sst2")中"sst2"指的是?(第 5 章)- A. 数据集版本号
- B. 数据集的 config(子任务)
- C. 数据格式
- D. 机器名
- 用
Dataset.map批量分词时,为什么常常要传remove_columns?(第 6 章)- A. 减少磁盘占用
- B. 避免 DataCollator 把原始文本列也当输入
- C. 提高下载速度
- D. 让 label 变成字符串
TrainingArguments(output_dir=...)中的output_dir的作用是?(第 7 章)- A. 数据缓存目录
- B. 训练日志与检查点保存目录
- C. 模型下载目录
- D. 输出文字的长度
- 训练日志里
eval_accuracy表示什么?(第 7 章)- A. 训练集上的损失
- B. 验证集上的准确率
- C. 学习率
- D. 梯度范数
- 微调文本分类模型时,
BertConfig(..., id2label={...}, label2id={...})的作用是?(第 8 章)- A. 控制分词粒度
- B. 让类别编号与名称互相映射,推理输出可读
- C. 设置学习率
- D. 指定 GPU
Accelerator(mixed_precision="fp16")中的fp16是什么?(第 9 章)- A. 分布式并行方式
- B. 半精度浮点(混合精度训练)
- C. 优化器名称
- D. 数据集格式
- LoRA 的核心思想是?(第 10 章)
- A. 训练全部参数
- B. 冻结原权重,只训练低秩增量矩阵
- C. 把模型量化成 8 位
- D. 增加模型层数
- TRL 中 SFT 的全称与含义是?(第 11 章)
- A. 随机微调
- B. 监督微调(Supervised Fine-Tuning)
- C. 结构化微调
- D. 稀疏微调
- 在 Hub 上分享模型前,必须先完成哪一步?(第 12 章)
- A. 删除本地文件
- B. 登录(
huggingface_hub.login()或hf auth login) - C. 关掉网络
- D. 卸载 accelerate
三、结业评审
- 综合项目:对照验收标准逐条自评;如果可能,请另一位同学或老师运行你的程序。
- 结业测验:15 题答对 12 题以上。
- 两项都通过,即完成本书全部学习目标。
结业后的下一步
本书覆盖的是 transformers 生态的 Python 主线。之后可以按兴趣深入:
- 多模态:
transformers的 vision 与 audio 模型、diffusers(图像生成) - 部署与推理:
text-generation-inference、vLLM、ONNX 导出与量化 - 训练框架:PyTorch 官方
torch.compile、DeepSpeed、多机多卡训练 - 社区实践:阅读 Hub 上的优秀模型卡,复现论文里的微调实验,向 Hub 贡献自己的模型与数据集
无论选哪个方向,记住本书的两条原则:独立写出能跑的微调代码,读懂并验证别人(包括 AI)写的代码。
