PaddleNLP AutoNLP 低代码自动化文本分类实战:从模型搜索到一键部署

发布时间:2026/9/25 15:21:34
PaddleNLP AutoNLP 低代码自动化文本分类实战:从模型搜索到一键部署
人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载AutoNLP 是 PaddleNLP 的早期实验项目代码位于 paddlenlp/experimental/autonlp其核心定位是在有限计算资源下用低代码方式自动完成 NLP 建模通过自动化的模型搜索AutoML帮你选出不错的文本分类模型。读完本文你将掌握AutoTrainerForTextClassification的完整用法如何构造训练器、启动多试验自动搜索、查看与恢复实验结果、导出静态图模型并借助 Taskflow 一键部署推理。注意AutoNLP 目前处于实验阶段Experimental官方明确提示 在正式发布之前AutoNLP API 有可能会变动生产环境接入前请评估 API 稳定性风险。AutoNLP 的项目定位与设计理念AutoNLP 是 PaddleNLP 官方推出的实验性质自动化机器学习AutoML能力与用大规模算力刷 SOTA的传统 AutoML 路线刻意保持差异其四项核心理念如下有限算力下的不错模型而非最先进模型项目假设用户至多拥有几张 GPU希望在 8 小时内用自己的数据集训出不错的模型而不是在巨型集群、海量数据上追求 State-of-the-Art 精度。低代码而非无代码目标是让开发者用几行 Python 代码就能训练出可用模型但它不是拖拽式的无代码训练服务仍保留编程接口的灵活性与可控性。抽象化 PaddleNLP 的全流程能力尽可能自动化并封装 PaddleNLP 已有的完整 NLP 流程——预处理、分词、微调Finetuning、提示学习Prompt Tuning、模型压缩、一键部署等帮助开发者针对自己的业务场景快速适配落地。免费且开源AutoNLP 本身是 PaddleNLP 开源仓库的一部分遵循 Apache-2.0 许可源码可直接阅读与二次开发。从仓库源码看AutoNLP 的工程实现集中在 paddlenlp/experimental/autonlp 目录auto_trainer_base.py定义了所有 AutoTrainer 的公共基类抽象元类text_classification.py实现了当前唯一支持的任务——文本分类对应的AutoTrainerForTextClassificationutils.py提供 UTCUniversal Text Classification训练所用的UTCLossinit.py 对外导出核心类。目前仅文本分类一个任务被支持因此 README 的全部内容都围绕AutoTrainerForTextClassification展开。安装 AutoNLP安装 AutoNLP 与安装 PaddleNLP 几乎相同唯一区别是需要在 extras 中追加[autonlp]标签pip install -U paddlenlp[autonlp]你也可以从 PaddleNLP 官方仓库 clone 源码后在仓库根目录执行pip install .[autonlp]从源码安装可获取 develop 分支的最新成果。在 setup.py 中可以看到该 extras 的定义extras[autonlp] read_requirements_file(paddlenlp/experimental/autonlp/requirements.txt)extras 的依赖清单记录在 paddlenlp/experimental/autonlp/requirements.txt主要包括ray[tune]2.5.1Ray Tune 是 AutoNLP 的试验调度与超参搜索后端hyperopt0.2.5提供 HyperOpt 贝叶斯超参搜索算法protobuf3.20.2、pydantic依赖版本锁定。也就是说AutoNLP 的自动搜索能力建立在 Ray Tune 之上这是理解其训练机制的关键线索详见下文训练流程一节。创建 AutoTrainerForTextClassification 对象AutoTrainerForTextClassification是你运行模型实验、与训练结果交互的主要类构造方式如下auto_trainer AutoTrainerForTextClassification( train_datasettrain_ds, eval_datasetdev_ds, label_columnlabels, text_columnsentence, languageChinese, output_dirtemp )构造函数参数说明参数类型/必填说明train_datasetpaddle.io.Dataset必填训练数据集必须包含下方指定的text_column与label_column字段eval_datasetpaddle.io.Dataset必填评估数据集同样必须包含text_column与label_column字段text_columnstring必填数据集中的文本字段名是模型的主要输入label_columnstring必填数据集中的标签字段名languagestring必填文本语言当前支持Chinese与English见源码中supported_languages属性metric_for_best_modelstring可选用于选择最优模型的评估指标名默认为eval_accuracy多标签场景默认为eval_macro_f1greater_is_betterbool可选指标越大是否代表模型越好需与metric_for_best_model配合使用默认Trueproblem_typestr可选按问题性质在[multi_class, multi_label]中选择默认multi_classoutput_dirstr可选实验结果输出目录源码默认值为autonlp_resultsREADME 中拼写为autpnlp_results属于文档笔误以源码实现为准verbosityint可选控制日志详细程度默认为1此时 worker 日志会输出到 driver需要减少日志量时可增大该值关闭 worker 日志回传源码层细节指标前缀与标签推断结合 text_classification.py 的实现构造阶段还有几个值得注意的行为指标自动加前缀基类AutoTrainerBase.__init__中如果你传入的metric_for_best_model不以eval_开头会自动改写为eval_指标名与 Trainer 内部的评估指标命名对齐见 auto_trainer_base.py。默认指标随问题类型切换multi_class默认用eval_accuracymulti_label默认用eval_macro_f1。标签自动收集_data_checks_and_inference会遍历数据集校验text_column/label_column字段存在并自动生成id2label/label2id映射你也可以通过构造函数的kwargs传入自定义的id2label键为类别 id、值为类别名。多标签阈值kwargs中可传入multilabel_threshold默认0.5用于多标签场景下将 sigmoid 概率转换为预测标签的判定阈值。启动自动训练Train使用train()方法即可启动模型试验Trial搜索auto_trainer.train( num_cpus2, num_gpus1, max_concurrent_trials1, num_models10, time_budget_s60 * 10, verbosity1 )train() 参数说明参数类型/必填说明num_modelsint必填运行的模型试验数量即 Ray Tune 的采样样本数num_gpusstr/int可选每次试验使用的 GPU 数量默认根据检测到的 GPU 数量自动设置num_cpusstr/int可选每次试验使用的 CPU 数量默认根据检测到的 vCPU 数量自动设置max_concurrent_trialsint可选同时运行的最大试验数必须为非负数为None或0时不加限制默认Nonetime_budget_sint/float/datetime.timedelta可选以秒为单位的全局时间预算超时后停止所有模型试验experiment_namestr可选实验名称实验日志存放在output_dir/experiment_name下默认为 UNIX 时间戳hp_overridesdict[str, Any]可选仅供高级用户使用。覆盖每个候选模型的超参数例如{TrainingArguments.max_steps: 5}custom_model_candiatesdict[str, Any]可选仅供高级用户使用。运行用户自定义的候选模型替代 PaddleNLP 内置默认候选可参考._model_candidates属性底层机制Ray Tune HyperOpt 贝叶斯搜索train()的实现位于基类 auto_trainer_base.py其核心调度链可以概括为构造可训练函数_construct_trainable()定义trainable(model_config)对每个候选配置依次执行构造 Trainer →trainer.train()→trainer.evaluate()→trainer.save_model()四步并在训练后清理training_checkpoints以节约磁盘。组织候选搜索空间_filter_model_candidates()按language与preset过滤出候选配置集合再包装成{candidates: hp.choice(candidates, model_candidates)}的 HyperOpt 搜索空间。选择搜索算法HyperOptSearch依据metric_for_best_model与greater_is_better决定modemax或min做贝叶斯优化ConcurrencyLimiter施加max_concurrent_trials并发限制。配置硬件资源tune.with_resources为每次试验分配num_gpus/num_cpus。调度与落盘tune.Tuner.fit()执行全部试验并返回ResultGrid每个 trial 的目录名与名字即trial_id结束后将结果 DataFrame 写入output_dir/experiment_name/experiment_results.csv对应基类常量results_filename。此外基类在初始化时设置了TUNE_DISABLE_AUTO_CALLBACK_LOGGERS1关闭 Ray Tune 自动 logger并以log_to_driverTrue if verbosity 1 else False控制日志回传这是verbosity参数生效的底层原因。内置候选模型空间_model_candidates文本分类任务的默认候选模型定义在 text_classification.py 的_model_candidates属性中分为三组、五种配置中文微调模型presetfinetuneernie-1.0-large-zh-cw、ernie-3.0-xbase-zh、ernie-3.0-tiny-base-v2-zh、ernie-3.0-tiny-medium-v2-zh、ernie-3.0-tiny-mini-v2-zh、ernie-3.0-tiny-micro-v2-zh、ernie-3.0-tiny-nano-v2-zh、ernie-3.0-tiny-pico-v2-zh从 272M 到 5.9M 参数覆盖大、中、小、微多个量级英文微调模型presetfinetuneroberta-large、roberta-base、distilroberta-base、ernie-2.0-base-en、ernie-2.0-large-en中文 UTC 提示学习模型presetutcutc-xbase、utc-base、utc-medium、utc-mini、utc-micro、utc-nano。每组配置还包含可搜索的超参per_device_train_batch_size在[2, 4, 8, 16, 32]中通过hp.choice采样per_device_eval_batch_size为其两倍num_train_epochs100配合early_stopping_patience5实现提前停止学习率则提供了3e-5快速学习与5e-6慢速学习UTC 为1e-5两档策略。此外train()还有一个 README 未强调的preset参数可显式指定finetune或utc以锁定训练范式不传时由数据自动推断。候选模型若命中utc前缀会走 PromptTrainer UTCTemplate UTCLoss见 utils.py的提示学习训练管线否则走普通TrainerDataCollatorWithPadding的标准微调管线两者在_construct_trainer中分流。检查与恢复实验结果查看训练结果实验结束后调用show_training_results()会打印一个 pandas DataFrameauto_trainer.show_training_results()实验结果同时保存在output_dir/experiment_name/experiment_results.csv中README 中描述为output_dir/experiment_results.csv实际路径带实验名子目录。不同试验产生的模型用trial_id唯一标识你可以在 DataFrame 或 CSV 的对应列中找到它后续evaluate/export/to_taskflow均以它为选择依据。加载之前的实验结果你可以从之前的运行包括未完成的运行中恢复实验结果auto_trainer.load(path/to/previous/results)其底层实现是tune.Tuner.restore(path)再get_results()见 auto_trainer_base.py 的load方法恢复后即可继续使用show_training_results()查看结果。需要注意再次调用train()会覆盖之前的结果。使用不同的评估数据集除了构造时提供的评估数据集你也可以用新数据集评估指定模型auto_trainer.evaluate( trial_idtrial_123456, eval_datasetnew_eval_dataset )参数说明trial_idstr可选通过trial_id指定要评估的模型默认取metric_for_best_model排名下的最佳模型eval_datasetDataset可选自定义评估数据集必须包含text_column和label_column字段未提供时默认使用构造时传入的评估数据集。评估阶段evaluate()会根据最佳模型的model_config重新构建 Trainer从trial 目录/trained_model加载动图权重再对新数据集做与训练时一致的分词预处理后评估并返回eval_accuracy、micro/macro三种粒度的precision/recall/f1等指标多标签场景下用 sigmoid multilabel_threshold生成预测标签。此外源码还提供了 README 未展开的predict(test_dataset, trial_id)方法用于在无标签测试集上输出预测结果。模型导出与部署导出静态图模型export()会将指定 trial 的模型导出为 Paddle 静态图推理模型供后续推理或部署使用auto_trainer.export( trial_idtrial_123456, export_pathdifferent/path/to/store/the/model )参数说明export_pathstr必填模型输出路径trial_idstr/int可选通过trial_id指定要导出的模型默认导出metric_for_best_model下的最佳模型。从 text_classification.py 的实现看导出产物包含model.pdmodel/model.pdiparams静态图文件、tokenizer_config.json、vocab.txt以及描述推理配置的taskflow_config.json内含task、model、problem_type、id2label、multilabel_threshold、max_length、task_path等字段。导出带幂等保护同一 trial 已导出过且目标路径一致时会直接跳过若已导出但目标路径不同则直接拷贝。_get_input_spec会根据模型类型生成对应的静态图InputSpecUTC 模型需要input_ids、token_type_ids、position_ids、attention_mask、omask_positions、cls_positions六路输入ERNIE-M 只有input_ids其余模型为input_idstoken_type_ids。一键转换为 Taskflow 推理to_taskflow()可以免去手工拼接直接把最佳或指定模型转成 PaddleNLP 的Taskflow进行推理taskflow auto_trainer.to_taskflow() taskflow(this is a test input)参数说明trial_idint可选指定要转换的模型默认取最佳模型另有batch_size默认 1、precision在[fp32, fp16]中选择默认fp32、compress是否输出压缩模型三个可选参数。其内部流程是导出静态图模型 → 读取导出的taskflow_config.json→ 注入batch_size/precision→ 以Taskflow(**taskflow_config)构造推理实例。导出的 UTC 模型会注册为zero_shot_text_classification任务利用schema即类别集合做零样本分类普通微调模型则注册为text_classification任务。模型压缩值得补充的是AutoTrainerForTextClassification还提供了compress()方法用于对导出的静态图模型做后训练量化Post Training Quantization, PTQ这也是当前唯一内置的压缩策略。压缩过程使用paddle.static.quantization.PostTrainingQuantization默认以 KL 散度算法对matmul/matmul_v2算子做 8-bit 权重channel_wise_abs_max与激活range_abs_max量化量化后的模型同样可通过to_taskflow(compressTrue)加载推理在保持精度的同时减小模型体积、加速推理。端到端实战示例综合以上 API一个完整的 AutoNLP 文本分类工作流如下from paddlenlp.experimental.autonlp import AutoTrainerForTextClassification # 1. 准备 paddle.io.Dataset 格式的数据集train_ds / dev_ds 均须含 sentence 与 labels 字段 # 2. 构造自动训练器 auto_trainer AutoTrainerForTextClassification( train_datasettrain_ds, eval_datasetdev_ds, label_columnlabels, text_columnsentence, languageChinese, output_dirautonlp_results ) # 3. 启动自动模型搜索10 个试验总预算 10 分钟 results auto_trainer.train( num_cpus2, num_gpus1, max_concurrent_trials1, num_models10, time_budget_s60 * 10, verbosity1 ) # 4. 查看结果 DataFrame也可查看 CSV按 trial_id 定位每个模型 df auto_trainer.show_training_results() # 5. 恢复历史实验可选 # auto_trainer.load(autonlp_results/experiment_name) # 6. 用新数据集评估最佳模型可选 # auto_trainer.evaluate(eval_datasetnew_eval_dataset) # 7. 导出静态图模型 auto_trainer.export(export_pathexported_model) # 8. 转成 Taskflow 直接推理 taskflow auto_trainer.to_taskflow() print(taskflow(今天北京的天气怎么样))小结AutoNLP 是 PaddleNLP 在自动化机器学习方向上的实验性尝试核心价值在于把模型选择、超参搜索、微调/提示学习、评估、导出、部署、压缩等繁琐环节封装在AutoTrainerForTextClassification一个类里以 Ray Tune HyperOpt 为搜索引擎在有限的算力和时间预算内自动产出不错的文本分类模型。理解其参数语义尤其是metric_for_best_model与greater_is_better的选择逻辑、trial_id的定位作用、hp_overrides/custom_model_candidates的扩展方式是把它用好的关键。鉴于其 API 仍处于实验阶段建议在正式项目中跟进版本更新并结合 paddlenlp/experimental/autonlp 目录下的源码了解最新实现。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐5分钟掌握Webhook部署自动化从零到一键部署实战5分钟掌握Webhook部署自动化从零到一键部署实战 Webhook是一款轻量级的传入webhook服务器能够运行shell命令帮助开发者实现自动化部署流后端API网关FF14动画跳过插件告别冗长副本动画的终极解决方案FF14动画跳过插件告别冗长副本动画的终极解决方案 还在为《最终幻想14》国服副本中那些无法跳过的动画而烦恼吗FFXIV_ACT_CutsceneSkip插人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP3步搞定大麦网抢票脚本Python自动化抢票的终极解决方案3步搞定大麦网抢票脚本Python自动化抢票的终极解决方案 还在为抢不到心仪的演唱会门票而烦恼吗每次热门演出开票瞬间售罄手动刷新总是慢人一步今天我要分享网页爬虫工作流自动化上一篇别让老游戏死在启动画面上一份 ddraw.dll 免费根治 DirectX 1-7 兼容顽疾的完整指南下一篇两台 Windows 电脑直接传文件SyncTrayzor 让同步不再绕道网盘创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考