ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

T5 微调三步做文本摘要:CNN/Daily Mail 实战

T5 微调三步做文本摘要:CNN/Daily Mail 实战 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新闻编辑部每小时收到几十篇千字以上的报道人工提炼三句话摘要平均要花 15 分钟而且写出来的长短不一。如果 T5 文本摘要模型能把长文自动压成几行要点编辑的工作就从改写变成审核。本文用 Transformers-Tutorials 项目里的现成示例把这条链路完整跑一遍训练语料采用 CNN/Daily Mail 新闻数据集。T5谷歌提出的把所有 NLP 任务统一成输入文本→输出文本的框架天然适合这个场景摘要任务只需把长文丢给它它会按文本序列输出一段短摘要不需要额外定义任务头或损失函数。项目里对应的实现在 T5/ 目录完整走通全流程的笔记本是 Fine_tuning_Dutch_T5_base_on_CNN_Daily_Mail_for_summarization_(on_TPU_using_HuggingFace_Accelerate).ipynb.ipynb)。示例用的是 CNN/Daily Mail 的荷兰语译版Hub 上的ml6team/cnn_dailymail_nl模型是荷兰语版 T5-base训练部分通过 HuggingFace Accelerate 在 Colab 的 TPU 上完成。选 TPU 版而非 GPU 版主要是 Accelerate 能用几行代码把普通 PyTorch 循环包起来自动分发到 8 个 TPU 核心代码骨架和 GPU 版一致换设备不用改架构。T5 的前缀设计值得一提微调时模型会把特定前缀和特定任务关联起来一套权重可以支撑摘要、翻译、问答多种任务。装什么依赖与数据集结构每条数据由article新闻正文和highlights人工要点两个字段构成正好是监督学习的原材料。依赖只有四个库装完即可开工如果目标是 TPU笔记本里还会额外安装cloud-tpu-client与torch_xla两个 wheel并且 Colab 运行环境要先切到 TPU。pip install -q transformers datasets accelerate sentencepiecefrom datasets import load_dataset train_ds, val_ds, test_ds load_dataset( ml6team/cnn_dailymail_nl, split[train, validation, test] ) print(Article:, train_ds[0][article][:100]) print(Summary:, train_ds[0][highlights])看到一段荷兰语新闻正文和几行要点说明数据就绪。跑什么编码、训练循环、启动喂给模型前要编码正文前拼任务前缀Vat samen:荷兰语的总结截断到 512 token摘要截断到 64 token并把标签里的填充位替换成 -100让交叉熵损失忽略它们。示例面向 TPU输入和标签都填充到最大长度——GPU 上填充到批内最长更省显存但 TPU 只接受固定形状。from transformers import AutoTokenizer tokenizer AutoTokenizer.from_pretrained(flax-community/t5-base-dutch) prefix Vat samen: def preprocess_examples(examples): inputs tokenizer([prefix a for a in examples[article]], max_length512, paddingmax_length, truncationTrue) labels tokenizer(examples[highlights], max_length64, paddingmax_length, truncationTrue).input_ids inputs[labels] [[t if t ! 0 else -100 for t in row] for row in labels] return inputs训练循环不用手写Accelerate 的notebook_launcher把一个普通 PyTorch 训练函数包起来模型、优化器、DataLoader 交给accelerator.prepare处理后一切自动分布到 8 个 TPU 核心。from accelerate import notebook_launcher from transformers import T5ForConditionalGeneration, AdamW hyperparameters { learning_rate: 0.0001, # 示例默认值 train_batch_size: 2, # 乘 8 个 TPU 核心全局批大小 16 patience: 3, # 早停验证损失 3 轮不降即停 output_dir: /content/, } model T5ForConditionalGeneration.from_pretrained(flax-community/t5-base-dutch) optimizer AdamW(model.parameters(), lrhyperparameters[learning_rate]) # 模型、优化器、两个 DataLoader 依次传给 accelerator.prepare() 后进入训练循环 notebook_launcher(training_function)notebook_launcher返回、且损失日志停止滚动说明训练跑完。看到什么验证曲线与生成效果训练在 Colab TPU 环境执行后用三个现象判断成功初始损失从 4 附近快速回落并趋稳验证损失周期性刷新低点连续三轮不改进即自动停止权重写入output_dir。训练结束后喂一段没见过的新闻检验生成质量。笔记本用的样例是一篇欧洲杯赛事报道比利时 1-2 负于意大利生成与人工要点大致如下生成摘要比利时队在慕尼黑 1-2 输给意大利卢卡库点球一度扳回希望但最终无缘晋级。参考要点De Rode Duivels moeten hun droom op een Europese titel opbergen红魔们不得不收起夺得欧洲冠军的梦想。生成版与参考版在核心事实上谁输、比分一致措辞更口语化。T5 做的是生成式摘要——自己写一段新句子而非从原文抽句拼接所以不要求逐字命中覆盖关键事实即可。可调优的方向最大生成长度摘要中途截断时把max_length从 50 调大生成策略do_sample换成num_beams4输出更稳但更慢学习率从 1e-4 降到 5e-5损失震荡会更平缓输入截断512 token 装不下长文时调大关键信息覆盖率更高同目录还有用 CodeT5 从 Ruby 代码生成文档字符串的示例 Fine_tune_CodeT5_for_generating_docstrings_from_Ruby_code.ipynb同一套前缀 编码 生成模板直接可复用。如果想进一步迁移可以把这套流程套到英文t5-base和官方英文 CNN/Daily Mail 数据集上把前缀换成summarize:——摘要本就包含在它的预训练任务里通常比小语种版本收敛更快。【免费下载链接】Transformers-TutorialsThis repository contains demos I made with the Transformers library by HuggingFace.项目地址: https://gitcode.com/GitHub_Trending/tr/Transformers-Tutorials创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表