
把长篇新闻压成两句话摘要T5文本摘要微调实战【免费下载链接】Transformers-TutorialsThis repository contains demos I made with the Transformers library by HuggingFace.项目地址: https://gitcode.com/GitHub_Trending/tr/Transformers-Tutorials你刚收到一份40页的行业报告老板丢来一句“10分钟内给我一页纸的要点”或者你在做内容运营每天几百条新闻每条都要人工提炼一两句话。手动总结慢更糟心的是每个人写出的摘要口径还不一致。这类任务适合交给序列到序列模型喂长文、吐短摘要输出格式从第一条到最后一条都稳定。开源项目 Transformers-Tutorials 里就有现成的 T5 文本摘要微调示例拿真实新闻语料走一遍从数据到推理的完整流程链路不长跑通之后换个语料就能用在你的长文业务上。技术选型为什么选T5做摘要T5 全称 Text-to-Text Transfer Transformer它把所有 NLP 任务统一成“文本进、文本出”的形式摘要不过是把长文压成短文是原生的文本到文本映射不需要额外设计结构。你可以把它想象成银行柜台先叫号报业务——示例里用的是荷兰语 “Vat samen: ”意为 Summarize: ——柜员才开始办理。第二个优点是它的预训练语料里就包含摘要任务标准英文模型对 “summarize: ” 这个前缀开箱即用微调收敛速度比通用 seq2seq 模型快一截。项目里的对应实现在 T5/Fine_tuning_Dutch_T5_base_on_CNN_Daily_Mail_for_summarization_(on_TPU_using_HuggingFace_Accelerate).ipynb.ipynb)它在 TPU 上用 HuggingFace Accelerate 微调社区荷兰语模型flax-community/t5-base-dutch语料是 CNN/Daily Mail 的荷兰语翻译版。从数据到输入准备你的语料依赖一行装完GPU 用户可省掉 acceleratepip install transformers datasets accelerate sentencepiece这四个库覆盖了加载、分词、训练全流程。语料选 CNN/Daily Mail30 多万篇新闻每篇都配着编辑写好的 1~3 句要点摘要是摘要任务里最经典的评测基准。示例用的是它的荷兰语翻译版因为基座模型是荷兰语的换成英文场景用t5-base配同名英文数据集即可字段完全一样。加载只需一行from datasets import load_dataset train_ds, val_ds, test_ds load_dataset(ml6team/cnn_dailymail_nl, split[train, validation, test])加载出来的数据只有两个字段加一个标识三个划分直接可用划分行数articlehighlightsidtrain287,113新闻原文编辑要点摘要唯一标识validation13,368同上同上同上test11,490同上同上同上训练流水线三步走✅Step 1分词并加前缀。模型不吃文本吃的是input_ids和attention_mask这类整数序列。预处理函数做三件事给每篇原文拼上任务前缀、按 512 截断分词摘要按 64 截断再把 labels 里的 padding 位置标成 -100。tokenizer AutoTokenizer.from_pretrained(flax-community/t5-base-dutch) def preprocess(examples): x tokenizer([Vat samen: a for a in examples[article]], max_length512, truncationTrue) y tokenizer(examples[highlights], max_length64, truncationTrue) x[labels] [[t if t else -100 for t in r] for r in y.input_ids] return x为什么是 -100该模型的 pad token id 是 0不替换的话 pad 位置也会参与 loss 计算验证损失会被系统性抬高。注意这里没有写paddingmax_length——TPU 训练需要定长 paddingGPU 用户可以改用动态 padding 省显存。✅Step 2组装模型与超参。用T5ForConditionalGeneration.from_pretrained加载预训练权重优化器选常规 AdamW关键超参如下参数取值设置理由学习率1e-4示例所用值大语料微调的经验起点批大小单核2×8 个 TPU 核实际 16patience3验证损失 3 轮不降就早停num_epochs设得很大实际靠 patience 决定停止✅Step 3启动训练。把原生 PyTorch 训练函数交给notebook_launcherAccelerate 会把模型和数据复制到 8 个 TPU 核上循环体仍然是 forward → loss → backward → step 的常规写法不用自己处理设备。跑通推理让模型开口说话训练完加载 checkpoint 调 generate 即可trained_model T5ForConditionalGeneration.from_pretrained(./output_dir) input_ids tokenizer(text, return_tensorspt).input_ids out trained_model.generate(input_ids, do_sampleTrue, max_length50, temperature0.7) print(tokenizer.decode(out.squeeze(), skip_special_tokensTrue))示例用的是采样生成temperature 0.7每次结果略有不同多样性更高如果追求稳定更常用束搜索num_beams4让 4 个候选并行竞争、保留得分最高的一条early_stoppingTrue则让所有候选生成完毕时就提前停止省掉无意义的尾部 padding。输入输出长什么样拿训练集第一条样本对比输入原文节选参考摘要语料 highlights一句话点评“Vat samen: (CNN) -- de bewering van de Amerikaanse minister van Buitenlandse Zaken John Kerry...”数百 token 的荷兰语长文“Anti-terrorisme beleid leeft op de rand van het internationale recht, Alex Vines schrijft...”2~3 句荷兰语短句输入数百 token、输出两三句generate 得到的就是同形态短句⚠️ 两个高频坑记一下任务前缀不能漏模型靠前缀判断“现在要做什么任务”标准英文模型在预训练时见过 “summarize: ”效果尤其明显漏掉前缀输出质量会肉眼可见地下降。labels 的 padding 位置要置 -100不处理会让验证损失整体偏高patience 早停跟着误判停点。进阶方向与常见问题链路跑通之后提升效果的路径大多是参数层面的事要英文摘要换t5-base 英文cnn_dailymail数据集前缀改成 “summarize: ”其余流程不变。要更高质量上T5-large或者拿 BART / Pegasus 在同一份数据上对比 Rouge 分数。显存不够引入 LoRA 这类参数高效方法冻结主干大部分参数只训练小适配器。要量化评估在测试集上跑 Rougerouge1 / rouge2 / rougeL其中 rougeL 高说明句序与参考摘要更贴近。写在最后整套流程就是前缀 分词 → 监督微调 → generate。适用边界也很清楚示例是荷兰语语料配荷兰语模型产出必然是荷兰语换成英文场景把模型和语料一并替换同一套流程就能得到一个英文文本摘要模型。如果你的文档普遍超过 512 个 token先做分块或换更长上下文的模型这一步值得在投入真实业务数据之前做掉。【免费下载链接】Transformers-TutorialsThis repository contains demos I made with the Transformers library by HuggingFace.项目地址: https://gitcode.com/GitHub_Trending/tr/Transformers-Tutorials创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考