新闻详情

新闻详情

首页 / 资讯中心 / 详情

PaddleNLP 中的 EFL 少样本学习实战:把 NLP Fine-tune 任务统一转化为蕴含二分类

发布时间:2026/9/25 3:19:15来源:尧图网络
PaddleNLP 中的 EFL 少样本学习实战:把 NLP Fine-tune 任务统一转化为蕴含二分类
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载EFLEntailment as Few-Shot Learner是一种将各类 NLP Fine-tune 任务统一转换为蕴含entailment二分类任务的小样本学习方法。本篇基于 PaddleNLP 仓库中 slm/examples/few_shot/efl/README.md 及其配套源码展开系统讲解如何在内置的 FewCLUE 中文小样本测评数据集上用一行代码加载数据、定义 Prompt 模板、完成训练/评估/预测并生成榜单提交文件同时深入源码剖析 EFL 的数据改写逻辑与PromptTrainer的训练链路读完后你可以直接复现 EFL 的完整少样本实验流程。一、算法核心思想一切任务皆可蕴含Entailment as Few-Shot Learner 的核心思想是无论原任务是情感分类、文本匹配、自然语言推理还是成语填空都可以改写成同一个形式的问题——给定一段文本和一个候选标签描述这两者是否相互蕴含匹配模型只需学习输出0/1两个标签候选标签成立为 1不成立为 0。这样做的两个直接收益是任务归一化所有任务共享二分类头预训练模型的序列分类能力而非任务专属的多分类头被充分复用在标注样本极少时更容易迁移标签以自然语言表达候选标签不再是抽象的 id而是通过 Prompt 模板与文本拼接成可读语句模型可以在语义空间中判断文本 ↔ 标签词的匹配关系。PaddleNLP 通过其 Prompt Learning APITemplateVerbalizer实现标签描述与数据文本的拼接具体定义方式可参考 Prompt API 文档。二、载体数据集FewCLUE 与 PaddleNLP 的内置支持CLUEChinese Language Understanding Evaluation是中文语言理解权威测评榜单FewCLUE 是其设立的中文小样本学习测评子榜。PaddleNLP 已内置 FewCLUE 数据集加载器 paddlenlp/datasets/fewclue.py覆盖 EFL 示例中的 9 个任务且每个任务都预置了train_0~train_4、train_few_all、dev_0~dev_4、dev_few_all、unlabeled、test、test_public等切分可直接用于训练、评估、预测并生成 FewCLUE 榜单的提交结果。从 fewclue.py 的FewCLUE构建器注释可以确认各任务含义task_name任务描述任务类型bustmXiaoBu Dialogue 短文本匹配短文本匹配chid中文成语完形填空Chinese IDiom Dataset for Cloze Test完形填空iflytek应用描述主题分类多分类tnews头条新闻短文本分类多分类eprstmt电商产品评论情感分析情感二分类ocnli中文自然语言推理自然语言推理csldcp中国学科论文分类多分类cluewscWSCWinograd 中文语义角色消解共指判断csl论文关键词识别关键词匹配三、示例代码结构与整体数据流EFL 示例位于slm/examples/few_shot/efl/目录结构如下与 README 一致├── run_train.py # EFL 算法提示学习脚本 ├── data.py # 数据集构造、数据增强 ├── utils.py # FewCLUE 提交结果保存等工具函数 └── prompt/ # FewCLUE 各数据集的 prompt 定义文件各文件职责结合源码确认run_train.py训练主入口。定义DataArguments与ModelArguments参数组加载预训练模型、ManualTemplate、ManualVerbalizer组装PromptModelForSequenceClassification与PromptTrainer并按开关执行训练、公开测试集评估、提交文件生成、伪标签标注和静态图导出data.py核心数据变换层负责把 FewCLUE 原始样本改写为 EFL 标准的蕴含二分类样本并对chid、cluewsc两个特殊任务做前置预处理还支持用伪标签数据扩充训练集utils.py解析 Prompt 配置文件、保存伪标签数据以及按 FewCLUE 官方格式保存预测提交结果含tnews/iflytek的标签到标准 id 映射LABEL_TO_STANDARDprompt/9 个任务各自的 prompt 定义 JSON 文件如 prompt/eprstmt.json、prompt/tnews.json、prompt/chid.json 等。3.1 EFL 数据改写convert_efl 的逐样本展开EFL 落地的关键在于 data.py 中的convert_efl函数。它对每个原始样本做标签展开训练集is_trainTrue若标签数大于num_neg默认 5则只保留真实标签 随机抽样的num_neg个负标签共num_neg1个候选避免每样本展开的候选过多造成计算浪费每个候选生成一条新样本字段labels int(candidate true_label)即蕴含判断的正/负二元标签验证/测试集对全部标签逐一展开每条候选样本同样打上 0/1 标签预测阶段将每个样本的num_labels个二分类结果按softmax后取 argmax 还原为原始多分类预测见 run_train.py 的 compute_metrics其中preds.reshape([-1, num_labels])正是按候选顺序重组。此外还有两个辅助变换convert_chiddata.py成语完形任务中原始句子里的#idiom#占位符被拆成content_pre/content_post两段每个候选成语cand填入空位构成一条蕴含判断样本候选填对为 1填错为 0convert_cluewscdata.pyWinograd 任务用[ ]标记实体、用_标记代词把代词是否指代该实体转为二分类extend_with_pseudo_datadata.py当指定--pseudo_data_path时把模型此前对无标签数据标注的伪标签样本追加进训练集形成训练 → 标注 → 再训练的自监督增强闭环。原始标签字段因任务而异默认取label字段tnews取label_desciflytek取label_desdata.py改写时以这些字段的值作为标签文本参与蕴含判断。3.2 数据加载一行代码读取 FewCLUE 数据集只需要 1 行代码见 data.py 中 load_fewclue_dataset以情感分类数据集eprstmt为例from paddlenlp.datasets import load_dataset # 通过指定 fewclue 和数据集名字 nameeprstmt 即可一键加载 FewCLUE 中的 eprstmt 数据集 train_ds, dev_ds, public_test_ds load_dataset(fewclue, nameeprstmt, splits(train_0, dev_0, test_public))split_id参数取值0、1、2、3、4或few_all在脚本内部会被展开为train_{split_id}、dev_{split_id}切分名data.py因此同一命令骨架可以无缝切换不同小样本编号few_all对应合并后的train_few_all切分。四、Prompt 模板与 Verbalizer 的定义Prompt 配置文件是文本 ↔ 标签拼接规则的核心放在prompt/目录下按任务组织。以 prompt/eprstmt.json 为例{ template: [ {text: 这表达了{text: candidate_label}的情感。{text:sentence}} ], verbalizer: [ {Negative: 不满意, Positive: 满意} ] }结构约定template模板字符串列表{text: 字段名}表示从样本中取对应字段填充。EFL 场景中必须包含candidate_label占位符因为 EFL 把候选标签拼进句子verbalizer与template等长的列表每项是原始标签 → 标签描述词的映射dict 或 list 形式均可。例如eprstmt把Positive/Negative映射为中文描述词满意/不满意prompt/tnews.json 则把news_finance映射为财经等 14 个类别词。utils.py中的load_prompt_argumentsutils.py负责按--prompt_index从配置中选出第i个模板与 verbalizer并做了两处容错verbalizer 中允许后续项为None/空自动回退到上一个有效项若 verbalizer 是 list 形式则自动转换为{k: k}的 dict。模板与标签映射最终在 run_train.py 中实例化为ManualTemplate与ManualVerbalizer。五、模型训练、评估、预测5.1 训练命令通过如下命令指定 GPU 0 卡在 FewCLUE 的eprstmt数据集上进行训练评估原文档给出的完整命令python -u -m paddle.distributed.launch --gpus 0 run_train.py \ --output_dir checkpoint_eprstmt \ --task_name eprstmt \ --split_id few_all \ --prompt_path prompt/eprstmt.json \ --prompt_index 0 \ --do_train \ --do_eval \ --do_test \ --do_predict \ --do_label \ --max_steps 1000 \ --learning_rate 3e-5 \ --eval_steps 100 \ --save_steps 100 \ --logging_steps 5 \ --per_device_train_batch_size 16 \ --max_seq_length 128 \ --load_best_model_at_end \ --metric_for_best_model accuracy \ --save_total_limit 15.2 参数含义说明原文档给出的完整参数说明如下task_name: FewCLUE 中的数据集名字split_id: 数据集编号包括0、1、2、3、4和few_allprompt_path: prompt 定义文件名prompt_index: 使用定义文件中第prompt_index个 promptaugment_type: 数据增强策略可选swap、delete、insert、substitutenum_augment: 数据增强策略为每个样本生成的样本数量word_augment_percent: 每个序列中数据增强词所占的比例pseudo_data_path: 使用模型标注的伪标签数据文件路径do_label: 是否使用训练后的模型给无标签数据标注伪标签do_test: 是否在公开测试集上评估模型效果model_name_or_path: 预训练模型名默认为ernie-1.0-large-zh-cwuse_rdrop: 是否使用对比学习策略 R-Dropalpha_rdrop: R-Drop 损失值权重dropout: 预训练模型的 dropout 参数值用于 R-Drop 策略中参数配置export_type: 模型导出格式默认为paddle动态图转静态图更多配置参考 Trainer 参数文档 和 PromptTrainer 参数文档结合源码可以对其中关键参数进一步确认参数默认值源码位置与说明task_nameeprstmtDataArguments指定 FewCLUE 任务名split_id0同上训练/验证切分编号prompt_path/prompt_indexprompt/eprstmt.json/0同上对应 prompt/ 目录 中的定义文件pseudo_data_pathNone伪标签文件路径配合extend_with_pseudo_data使用do_label/do_testFalse控制是否标注无标签数据 / 在test_public上评估model_name_or_pathernie-1.0-large-zh-cwModelArguments也支持本地模型路径dropout0.1通过AutoModelForSequenceClassification.from_pretrained的hidden_dropout_prob/attention_probs_dropout_prob注入run_train.py是 R-Drop 双前向差异化的前提use_rdrop/alpha_rdropFalse/5.0定义于 PromptTuningArgumentsalpha_rdrop为 R-Drop KL 散度损失权重注意若alpha_rdrop设为 0 会自动关闭 R-Dropprompt_args.pymax_seq_length512本命令覆盖为 128同 PromptTuningArguments控制模板填充后的最大输入长度export_typepaddle支持paddle与onnxModelArguments说明augment_type/num_augment/word_augment_percent等数据增强参数是 PaddleNLP few-shot 示例系列PET/P-Tuning 等通用的文本增强配置本 EFL 脚本的DataArguments中未直接声明它们EFL 的样本扩充由 EFL 自身的候选标签展开num_neg完成。5.3 训练链路解析源码级run_train.py 的主流程可以概括为加载预训练模型AutoTokenizerAutoModelForSequenceClassification.from_pretrained(..., num_labels2)——注意分类头恒为2 类这正是 EFL统一转二分类在代码层面的体现定义 Template / VerbalizerManualTemplate(prompt, tokenizer, max_seq_length)与ManualVerbalizer(label_words, tokenizer)并打印实际使用的模板与标签映射便于核对数据加载与 EFL 改写load_fewclue_dataset一次加载train_*、dev_*、test_public、test、unlabeled五个切分并完成convert_chid/convert_cluewsc/convert_efl/伪标签扩充run_train.py构建 Prompt 模型PromptModelForSequenceClassification(model, template, None, freeze_plm..., freeze_dropout...)损失函数为paddle.nn.CrossEntropyLoss指标计算compute_metrics对二分类 logits 取 softmax 后切出正类概率按num_labels重组为多类得分向量再做 argmax与标签对比得到accuracyrun_train.py——这就是二分类头还原多分类的关键一步分开关执行--do_traintrainer.train()后保存模型与指标--do_test在test_public上trainer.predict对应 FewCLUE 公开测试集评估--do_predict在私有test上预测调用save_fewclue_prediction生成提交文件--do_label对unlabeled数据预测并调用save_pseudo_data落盘伪标签--do_export按input_spec导出静态图模型export_type可选paddle/onnx。5.4 FewCLUE 提交结果与伪标签闭环utils.py中的save_fewclue_predictionutils.py负责把模型输出转成榜单要求的格式bustm、csl输出{id: uid, label: str(pred)}chid由于每个样本展开为 7 个候选成语先将概率矩阵reshape([batch_size // 7, 7])再取 argmax输出{id: uid, answer: idx}cluewsc、eprstmt、ocnli、csldcp输出标签文本labels[preds]iflytek、tnews通过LABEL_TO_STANDARD映射表把标签文本转换为官方标准 id如tnews的news_finance→104见 utils.py。save_pseudo_datautils.py则把无标签样本与预测标签、置信度prob一并按行保存产物即下一轮训练--pseudo_data_path的输入从而构成训练 → 无标签数据伪标注 → 扩充训练集再训练的迭代小样本增强流程。六、模型部署原文档中标注Coming soon...。从源码看部署的前置能力已具备run_train.py在--do_export开启时会以固定的InputSpecinput_ids、token_type_ids、position_ids、attention_mask均为变长维度调用trainer.export_model将 Prompt 学习后的模型导出为静态图export_type支持paddle动态转静态与onnxrun_train.py导出的模型即可对接 Paddle Inference 等推理部署链路。七、总结与延伸阅读本示例展示了 PaddleNLP Prompt Learning 体系下的完整 EFL 实践以convert_efl的候选标签展开实现任务 → 蕴含二分类的归一化以ManualTemplate/ManualVerbalizer完成标签语义化拼接以PromptTrainer承载训练/评估/预测/伪标注/导出的一体化流程并可直接产出 FewCLUE 榜单提交文件。相关的仓库资源示例入口slm/examples/few_shot/efl/run_train.py、data.py、utils.py数据集构建器paddlenlp/datasets/fewclue.pyPrompt 训练参数paddlenlp/prompt/prompt_args.py文档Prompt 学习指南、Trainer 指南算法出处Wang, Sinong, Han Fang, Madian Khabsa, Hanzi Mao, and Hao Ma. Entailment as Few-Shot Learner. ArXiv:2104.14690, April 2021.赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP Few-Shot 策略库实战基于 FewCLUE 的 PET、P-Tuning 与 EFL 小样本学习指南PaddleNLP Few Shot 策略库实战基于 FewCLUE 的 PET、P Tuning 与 EFL 小样本学习指南 Few Shot Learni人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleHub 迁移学习实战基于预训练模型 Fine-tune 的 CV/NLP/Audio 全流程指南PaddleHub 迁移学习实战基于预训练模型 Fine tune 的 CV/NLP/Audio 全流程指南 迁移学习Transfer Learning利人工智能大模型微调模型推理服务PaddleHub hrnet18_imagenet 图像分类模型实战安装、Fine-tune 与服务化部署PaddleHub hrnet18_imagenet 图像分类模型实战安装、Fine tune 与服务化部署 本文以 PaddleFormers 仓库中 mo人工智能大模型微调模型推理服务上一篇FaceSwapLab批量处理教程如何高效处理多张图片的面部交换下一篇gh_mirrors/re/resume模板与容器化部署一致性环境方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

从波形图理解多周期路径:setup与hold的物理本质 2026/9/25 5:02:07

从波形图理解多周期路径:setup与hold的物理本质

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
宁波市靠谱的橡胶密封件制造厂家推荐,一站式密封解决方案实力参考 2026/9/25 5:02:07

宁波市靠谱的橡胶密封件制造厂家推荐,一站式密封解决方案实力参考

宁波市泓泰橡胶科技有限公司位于东海之滨——浙江省宁波市,是一家集研发、生产、销售于一体的橡胶密封件制造商,始终秉持客户至上的经营理念,依托经验丰富的技术团队和成熟的生产工艺,为客户提供从材料选型、模具开发到批量交付的…

阅读更多 →
企业微信API接口如何实现会话自动归档?消息数据存储与检索方案解析 2026/9/25 5:02:07

企业微信API接口如何实现会话自动归档?消息数据存储与检索方案解析

最近做的企微二开里有个合规需求:所有客户会话要自动归档,按合规要求留存 N 年,且能按客户、按时间、按内容检索。和之前聊的消息中枢不同,消息中枢是支撑 AI 的实时消息层,归档是合规留存的冷数据层。把落地方案记下来…

阅读更多 →
如何用Docker一键部署MindSpeed LLM:昇腾镜像构建指南 2026/9/25 5:02:01

如何用Docker一键部署MindSpeed LLM:昇腾镜像构建指南

如何用Docker一键部署MindSpeed LLM:昇腾镜像构建指南 【免费下载链接】MindSpeed-LLM 昇腾LLM分布式训练框架 项目地址: https://gitcode.com/Ascend/MindSpeed-LLM MindSpeed LLM 是昇腾大语言模型分布式训练框架,支持分布式预训练、指令微调、…

阅读更多 →
昇腾NPU监控入门:npu-smi info命令详解与性能调优实战 2026/9/25 5:02:01

昇腾NPU监控入门:npu-smi info命令详解与性能调优实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
西工大NOJ C程序设计100题:从零吃透底层逻辑与避坑指南 2026/9/25 5:02:01

西工大NOJ C程序设计100题:从零吃透底层逻辑与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉