
T5 文本摘要系统构建CNN/Daily Mail 微调实战完整指南【免费下载链接】Transformers-TutorialsThis repository contains demos I made with the Transformers library by HuggingFace.项目地址: https://gitcode.com/GitHub_Trending/tr/Transformers-Tutorials手头几万字长的报道、报告人工提炼摘要又慢又难以保持一致。跟着 Transformers-Tutorials 项目跑一套 T5 摘要微调在 CNN/Daily Mail 数据集上训练几轮模型就能在几秒内输出一条 highlights 级摘要。先看效果最终效果长这样模型生成的摘要与人工撰写的参考摘要信息量基本一致可以直接作为验收基准。阶段内容原文片段The transit authority said on Tuesday that it would suspend two bus lines starting next month because of budget cuts, and asked commuters to switch to the metro…模型摘要The transit authority will suspend two bus lines next month due to budget cuts.参考摘要* The transit authority will suspend two bus lines next month due to budget cuts * Commuters are asked to use the metro *注意细节模型输出是单句压缩参考摘要highlights 字段本身也是带*分隔的短句列表二者粒度天然接近所以 ROUGE 指标才有可比性。为什么选 T5 CNN/Daily Mail选型理由很简单T5 把所有 NLP 任务统一成 text-to-text 映射摘要就是原文 → 摘要这一个方向不用单独设计任务头。数据侧CNN/Daily Mail 提供约 30 万篇带人工标注 highlights 的新闻省去标注成本直接开训。落地路径落地路径拆成三件事先把数据接进来并体检再配置训练最后用指标加真实推理验证。数据接入与体检先装依赖再加载 3.0.0 版本数据集并查看字段与样本。pip install transformers datasets accelerate torch sentencepiecefrom datasets import load_dataset ds load_dataset(cnn_dailymail, 3.0.0) # train/validation/test 三个分片 print(ds[train][0][article][:200]) # 原文 print(ds[train][0][highlights]) # 人工摘要每个样本只有两个字段article原文和highlights摘要。体检时重点看三处是否存在空highlights的脏样本、摘要平均长度是否稳定、原文长度分布是否有异常长尾。这一步发现问题比训练到一半 OOM 便宜得多。预处理也在这里一并完成给原文加任务前缀并按 512 token 输入上限截断。def preprocess(batch): src tok([summarize: a for a in batch[article]], max_length512, truncationTrue) with tok.as_target_tokenizer(): tgt tok(batch[highlights], max_length150, truncationTrue) src[labels] tgt[input_ids] return srctok即AutoTokenizer.from_pretrained(t5-base)的产物import 略去。配置与训练summarize:前缀不是装饰它是 T5 预训练阶段见过的任务提示推理时必须与训练保持完全一致否则模型接不上。训练用Seq2SeqTrainingArguments配置GPU 上开fp16True走混合精度单卡 8GB 显存即可跑 base如果你在 TPU 上训练仓库里的示例 T5 示例目录 中的 CNN/Daily Mail 微调 notebook 用 HuggingFace Accelerate notebook_launcher把训练分片到多核上内存占用和速度都会好一档。args Seq2SeqTrainingArguments(./t5-cdm, learning_rate2e-5, per_device_train_batch_size8, num_train_epochs1, fp16True, predict_with_generateTrue) # 评估时用束搜索生成并计算 ROUGE trainer Seq2SeqTrainer(model, args, train_datasettrain, eval_datasetval) trainer.train()验证与试跑✅ 验证分两层先看指标再看真实生成。指标层predict_with_generateTrue会在验证集上用束搜索生成并自动算出 ROUGE-1/2/L。t5-base 单 epoch 通常在 ROUGE-2 30 上下加到 2~3 个 epoch 能到 35 附近再往上边际收益变小。推理层从测试集取一条真实样本跑一次生成与参考摘要对照inputs tok(summarize: article, return_tensorspt, max_length512, truncationTrue) out model.generate(**inputs, max_length150, num_beams4, early_stoppingTrue) print(tok.decode(out[0], skip_special_tokensTrue))判断标准很朴素实体时间、机构、数字不能错关键事件不遗漏措辞与 highlights 不同是正常的。踩坑与排查⚠️ 这条链路最容易踩的四类问题排查逻辑都是同一套现象 → 原因 → 对策。1. 训练中报 CUDA OOM现象训练进行到第二个 epoch 直接崩日志里出现 out of memory。 原因paddingmax_length把每条样本都补到 512实际计算量远超名义 batch。 对策把 padding 改为 longest或把per_device_train_batch_size减半并配 gradient accumulationTPU 上则确认走混合精度。2. ROUGE-2 长期低于 20现象训练收敛了但测试集 ROUGE-2 始终停在 20 以下。 原因摘要侧max_length150过紧highlights 被截断teacher 信号缺失。 对策把目标长度提到 200 左右并检查labels的 padding 位是否已置为 -100。3. 生成结果里出现 summarize: 或 #### 等特殊 token现象摘要开头复述前缀或夹带####、pad。 原因推理时的前缀与训练不一致或解码参数配错。 对策推理严格复用训练时的summarize:前缀并用num_beams4 early_stoppingTrue生成别用裸do_sample。4. loss 从第一步就不下降现象训练曲线贴着初始值走几乎无波动。 原因预处理函数里batch[article]拿到的是标量而非列表map(batchedTrue)语义没生效。 对策在preprocess入口断言isinstance(batch[article], list)先单条跑通 tokenizer 再上全量。batch 只有 8 为什么还会 OOM答案就在 padding 策略里。调优速查表下表是参数选择的起点每次只动一个参数动完对比 ROUGE-2 再决定去留。维度建议取值预期影响learning_rate2e-5 ~ 5e-5过高第 1 个 epoch 就发散过低需要更多 epoch 才收敛per_device_train_batch_sizeGPU 8~16 / TPU 2×8多卡越大收敛越稳需配合梯度累积显存成比例上涨num_train_epochs1 ~ 32~3 个 epoch 后 ROUGE-2 边际收益明显变小max_length输入512覆盖绝大多数新闻正文调大基本只增计算max_length摘要150 ~ 200过小截断 highlightsteacher 信号丢失num_beams推理4提到 5~6 可小幅提升 ROUGE-2生成速度变慢fp16 混合精度GPU/TPU 都开训练提速约 1.5~2 倍显存占用下降约三成模型规格t5-base → t5-3B3B 可再抬 1~2 分 ROUGE-2但显存要求超过 24GB下一步基线跑通后可以换 LoRA 低秩微调把显存和时长再压一档或把训好的模型包成 API 服务对外提供。仓库里其他文本类教程如 BERT 文本分类、TAPAS 表格问答同样复用这套接入体检 → 配置训练 → 指标验证的流程方法可以平移。【免费下载链接】Transformers-TutorialsThis repository contains demos I made with the Transformers library by HuggingFace.项目地址: https://gitcode.com/GitHub_Trending/tr/Transformers-Tutorials创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考