ARTICLE DETAIL

资讯详情

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

PaddleNLP UIE Slim 数据蒸馏实战:以无标注数据为桥梁,将 UIE 大模型蒸馏为封闭域轻量信息抽取模型

PaddleNLP UIE Slim 数据蒸馏实战:以无标注数据为桥梁,将 UIE 大模型蒸馏为封闭域轻量信息抽取模型 人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载UIEUniversal Information Extraction模型具备强大的零样本抽取能力但其基于提示prompt的结构在实时推理场景中计算开销大难以直接上线。本文基于 PaddleNLP 的 UIE Slim 数据蒸馏方案源码位于 slm/applications/information_extraction/text/data_distill完整讲解教师模型微调 → 离线蒸馏生成合成数据 → 学生模型训练 → 端到端评估 → Taskflow/SimpleServing 部署的全流程以数据为桥梁把 UIE 的知识迁移到封闭域小模型在精度损失很小的前提下实现推理速度的大幅提升。读完本文你将能够基于自己的标注数据与无标注文本独立搭建一套可落地的封闭域信息抽取蒸馏流水线。一、原理为什么数据蒸馏能压缩 UIEUIE 通过统一的提示式建模实现实体、关系、事件、观点等任务的抽取具有强大的零样本能力但提示结构在实时推理时需要较多计算资源难以在推理性能要求高的工业场景直接上线。UIE Slim 数据蒸馏的思路是把数据当作知识迁移的桥梁将 UIE 模型教师的知识迁移到更小的封闭域信息抽取模型学生从而以极小的精度损失换取显著的推理加速。从仓库的目录结构data_distill可以看到蒸馏流水线由以下脚本与模块组成data_distill/ ├── data_distill.py # 离线蒸馏生成学生模型训练/验证/测试数据与标签映射 ├── evaluate_teacher.py # 教师UIE模型端到端评估 ├── train.py # 学生模型训练GlobalPointer / GPLinker ├── evaluate.py # 学生模型评估 ├── criterion.py # 稀疏多标签交叉熵损失 ├── data_collator.py # 训练/评估数据整理 ├── metric.py # 实体/关系 F1 计算 ├── utils.py # 标注数据转换、合成数据转换、标签映射、后处理等工具 └── deploy/ └── simple_serving/ # SimpleServing 服务化部署蒸馏整体分为三个步骤Step 1在有标注数据上微调 UIE 模型得到教师模型Teacher ModelStep 2处理用户提供的无标注数据用 Taskflow UIE 批量推理出标签形成合成数据Synthetic DataStep 3使用原始标注数据与 Step 2 的推理结果训练一个封闭域的学生模型Student Model。学生模型不再需要提示式结构schema抽取目标被固定并编译进模型输出层因此推理时无需逐条拼接 prompt这就是速度提升的核心来源。二、Step 1微调 UIE 教师模型蒸馏的第一步是获得一个在该业务领域表现良好的 UIE 教师模型。UIE 模型微调的整体流程数据标注、模型微调、评估、一键预测见 文本信息抽取应用 README微调脚本为 finetune.py。推荐使用 Trainer API 以uie-base作为预训练模型进行微调单卡示例python finetune.py \ --device gpu \ --logging_steps 10 \ --save_steps 100 \ --eval_steps 100 \ --seed 1000 \ --model_name_or_path uie-base \ --output_dir ./checkpoint/model_best \ --train_path data/train.txt \ --dev_path data/dev.txt \ --max_seq_len 512 \ --per_device_train_batch_size 16 \ --per_device_eval_batch_size 16 \ --num_train_epochs 20 \ --learning_rate 1e-5 \ --do_train \ --do_eval \ --do_export \ --export_model_dir ./checkpoint/model_best \ --overwrite_output_dir \ --disable_tqdm True \ --metric_for_best_model eval_f1 \ --load_best_model_at_end True \ --save_total_limit 1微调完成后得到的模型保存为../checkpoint/model_best相对于data_distill目录包含模型权重文件model_state.pdparams与配置文件model_config.json供后续蒸馏步骤加载。多卡场景可通过python -u -m paddle.distributed.launch --gpus 0,1 finetune.py ...启动具体参数说明同样见 文本信息抽取应用 README。三、Step 2离线蒸馏——为无标注数据预测标签离线蒸馏由 data_distill.py 完成它读取标注数据与无标注文本加载训练好的 UIE 模型进行推理并输出学生模型可直接用于训练的 JSONL 数据。python data_distill.py \ --data_path ../data \ --save_dir student_data \ --task_type relation_extraction \ --synthetic_ratio 10 \ --model_path ../checkpoint/model_best3.1 输入数据准备data_path目录下需要准备以下文件由标注平台导出或由 label_studio.py 数据转换脚本生成标注数据label_studio.jsonLabel Studio 导出默认平台或doccano_ext.jsonDoccano 导出需--platform doccano数据划分索引sample_index.json其中包含train_ids、dev_ids、test_ids决定标注数据如何划分训练/验证/测试集无标注文本unlabeled_data.txt每行一条文本用于生成合成训练数据当synthetic_ratio 0时读取。注意仓库中的data目录需要自行下载数据集并解压得到如军事关系抽取数据集military.tar.gz下载命令见 文本信息抽取应用 README。3.2 schema 配置关键schema 需要在data_distill.py中按标注数据配置且必须覆盖标注数据中的所有标签类型。脚本末尾默认配置为武器关系抽取的示例# Define your schema here schema {武器名称: [产国, 类型, 研发单位]}其中顶层 key 为实体类型其 value 列表为关系类型。schema 会被 utils.py 中的schema2label_maps()递归构造成 SchemaTree进而生成封闭域标签映射对entity_extraction只收集实体类型生成entity2id对opinion_extraction不开放自定义 schema固定使用{评价维度: 0, 观点词: 1}与sentiment2id {正向: 0, 负向: 1}对relation_extraction/event_extraction遍历 schema 树生成entity2id与relation2id并追加统一的object实体类型。生成的标签映射会保存为save_dir/label_maps.json供训练与评估脚本共享。3.3 合成数据生成逻辑从源码看data_distill.py的合成逻辑如下--synthetic_ratio 10时读取unlabeled_data.txt的全部文本计算actual_ratio ceil(无标注文本数 / 标注训练样本数)若actual_ratio synthetic_ratio则使用全部无标注文本否则用随机采样抽取synthetic_ratio × 标注训练样本数条文本用Taskflow(information_extraction, schema..., task_pathmodel_path)对每条文本推理通过synthetic2distill()utils.py把 UIE 的层级式预测结果实体 → relations → 对象展开为扁平化的entity_list与spo_list从而让封闭域学生模型无需提示即可直接学习将合成数据追加到标注训练数据之后。最终在save_dir下输出四个文件label_maps.json、train_data.json、dev_data.json、test_data.json均为 JSONL 格式每条样本形如{text: ..., entity_list: [...], spo_list: [...]}。3.4 可配置参数说明参数说明默认值data_path标注数据doccano_ext.json/label_studio.json、sample_index.json与无标注文本unlabeled_data.txt所在目录../datamodel_path训练好的 UIE 定制模型路径../checkpoint/model_bestsave_dir学生模型训练数据的保存目录./distill_tasksynthetic_ratio合成数据比例控制合成数据最大条数 synthetic_ratio × 标注训练样本数设为-1表示使用全部无标注文本10platform标注平台可选doccano、label_studiolabel_studiotask_type任务类型可选entity_extraction、relation_extraction、event_extraction、opinion_extraction。封闭域抽取的不同任务后处理逻辑不同必须显式指定entity_extractionseed随机种子1000四、教师模型端到端评估在 UIE 微调阶段模型是在 UIE 训练格式数据上评估的对关系抽取、事件抽取而言并不是标准的端到端评价方式。由于学生模型面对的是封闭域抽取教师模型的蒸馏数据质量直接影响学生模型上限因此先通过 evaluate_teacher.py 做一次端到端评估来确认教师模型质量python evaluate_teacher.py \ --task_type relation_extraction \ --test_path ./student_data/dev_data.json \ --label_maps_path ./student_data/label_maps.json \ --model_path ../checkpoint/model_best该脚本用Taskflow加载 UIE 教师模型对蒸馏格式的测试数据进行端到端推理再用 metric.py 计算实体/关系或事件、观点的 Precision、Recall、F1。可配置参数说明参数说明默认值model_path训练好的 UIE 定制模型路径Nonetest_path测试数据集路径蒸馏格式 JSONLNonelabel_maps_path学生模型标签映射文件label_maps.json./ner_data/label_maps.jsonbatch_size推理批次大小8max_seq_len最大文本长度256task_type任务类型同上四种取值封闭域抽取评估必须指定entity_extraction五、Step 3学生模型训练学生模型是编码器 结构化预测头的封闭域模型由 train.py 训练python train.py \ --task_type relation_extraction \ --train_path student_data/train_data.json \ --dev_path student_data/dev_data.json \ --label_maps_path student_data/label_maps.json \ --num_epochs 50 \ --encoder ernie-3.0-mini-zh5.1 模型结构与损失函数从源码看学生模型的组装逻辑为task_type entity_extraction时使用GlobalPointerForEntityExtraction(encoder, label_maps)其余任务使用GPLinkerForRelationExtraction(encoder, label_maps)来自paddlenlp.layers分别对应苏神的 GlobalPointer 与 GPLinker 结构编码器默认选择轻量的ernie-3.0-mini-zh损失函数为 criterion.py 实现的稀疏多标签分类交叉熵_sparse_multilabel_categorical_crossentropy训练时对三个输出 logits 的损失取平均优化器使用AdamW默认不对 bias 与 LayerNorm 参数施加 weight decay通过apply_decay_param_fun过滤参数名学习率调度采用LinearDecayWithWarmup。训练过程中每eval_steps步在验证集上计算 F1只有当 F1 超过历史最优时才保存为save_dir/model_best/同时保存model_state.pdparams、model_config.json与 tokenizer因此最终部署取./checkpoint/model_best即可。init_from_ckpt可加载已有参数进行热启动续训。5.2 可配置参数说明参数说明默认值train_path训练集文件路径蒸馏输出的train_data.jsonNonedev_path验证集文件路径dev_data.jsonNonebatch_size训练批次大小16learning_rateAdam 初始学习率3e-5save_dir模型保存路径./checkpointmax_seq_len最大文本长度256weight_decayAdamW 优化器的 weight_decay 系数0.0warmup_proportion学习率 warmup 比例如0.1表示前 10% 训练步学习率从 0 线性上升到learning_rate之后缓慢衰减0.0num_epochs训练轮数100seed随机种子1000encoder学生模型编码器底座ernie-3.0-mini-zhtask_type任务类型四种取值封闭域抽取必须指定entity_extractionlogging_steps日志打印间隔步数10eval_steps验证间隔步数200device训练设备可选cpu或gpugpuinit_from_ckpt可选模型参数路径热启动训练None六、学生模型评估训练完成后用 evaluate.py 在测试集上评估学生模型python evaluate.py \ --model_path ./checkpoint/model_best \ --test_path student_data/dev_data.json \ --task_type relation_extraction \ --label_maps_path student_data/label_maps.json \ --encoder ernie-3.0-mini-zh评估流程为加载编码器与 GlobalPointer/GPLinker 预测头从model_path/model_state.pdparams恢复权重通过 utils.py 的postprocess()将 logits 解码为实体与关系采用双头打分求交集判定关系最后由 metric.py 输出entity_f1/relation_f1及对应 Precision、Recall。可配置参数说明参数说明默认值model_path训练好的学生模型路径需含model_state.pdparamsNonetest_path测试数据集路径Nonelabel_maps_path标签映射文件label_maps.json./ner_data/label_maps.jsonbatch_size评估批次大小16max_seq_len最大文本长度128encoder学生模型编码器底座ernie-3.0-mini-zhtask_type任务类型四种取值entity_extraction七、学生模型部署7.1 Taskflow 一键部署封闭域信息抽取模型可直接通过 Taskflow 部署task_path指向学生模型路径。由于是封闭域抽取schema 已固化在模型中调用时无需再传 schema from pprint import pprint from paddlenlp import Taskflow my_ie Taskflow(information_extraction, modeluie-data-distill-gp, task_pathcheckpoint/model_best/) pprint(my_ie(Virgo deceleration bomb was developed by the Swedish FFV Ordnance Company specially for the attack aircraft of the Swedish Royal Air Force to carry out low-altitude and high-speed bombing. It was developed in 1956 and entered service in 1963. It is equipped on the A32 \Contradiction\, A35 \Dragon\, and AJ134 \Thunder\ attack aircraft are mainly used to attack landing craft, parked aircraft, anti-aircraft artillery, field artillery, light armored vehicles and active forces.)) [{weapon name: [{end: 14, probability: 0.9976037, relations: {country of origin: [{end: 18, probability: 0.9988706, relations: {}, start: 16, text: Sweden}], RD unit: [{end: 25, probability: 0.9978277, relations: {}, start: 18, text: FFV Ordnance Company}], type: [{end: 14, probability: 0.99837446, relations: {}, start: 12, text: bomb}]}, start: 0, text: Virgo slowing bomb}]}]输出为层级式 JSON外层为实体类型如weapon name每个实体附带起止位置、置信度probability与嵌套的relations如country of origin、RD unit、type与 UIE 的输出格式一致便于下游业务直接解析。7.2 SimpleServing 服务化部署仓库还提供了基于 PaddleNLP SimpleServing 的服务化部署方案deploy/simple_serving需要paddlenlp 2.4.4。启动服务端paddlenlp server server:app --workers 1 --host 0.0.0.0 --port 8189客户端请求python client.py服务端可自定义 schema 与模型路径默认task_path../../checkpoint/model_best/模型为uie-data-distill-gp并支持多卡负载均衡预测——注册多个 Taskflow 任务即可uie1 Taskflow(information_extraction, task_path../../checkpoint/model_best/, schemaschema, device_id0) uie2 Taskflow(information_extraction, task_path../../checkpoint/model_best/, schemaschema, device_id1) service.register_taskflow(uie, [uie1, uie2])八、参考与延伸阅读本方案的学生模型结构建立在两篇经典方法之上GlobalPointer通过全局指针网络统一处理实体/关系/事件的 span 抽取以稀疏多标签交叉熵训练与GPLinker在 GlobalPointer 基础上用链接器建模实体间关系。仓库中相关实现可直接查看 GlobalPointerForEntityExtraction / GPLinkerForRelationExtraction 与 criterion.py其损失实现即参考了 GlobalPointer 原始论文思路。进一步的工业落地可参考文本信息抽取应用 README数据标注、UIE 微调、评估与实验指标0-shot / 5-shot / 10-shot / full-set 的 F1 对比SimpleServing 部署说明服务端/客户端自定义参数与多卡负载均衡Label Studio 数据标注指南标注规则与导出格式说明。至此一条微调 UIE 教师 → 用无标注数据离线蒸馏生成合成数据 → 训练封闭域小模型 → 端到端评估 → 服务化部署的完整闭环已经打通。在实践中建议先用evaluate_teacher.py验证教师模型端到端质量再按需调整synthetic_ratio过小则合成数据不足过大则引入噪声并对照 README 中的实验指标观察学生模型与教师模型之间的精度差距从而在推理性能与抽取精度之间找到合适的平衡点。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐PaddleNLP SimpleServing 部署 UIE 数据蒸馏封闭域信息抽取模型从服务启动到多卡负载均衡PaddleNLP SimpleServing 部署 UIE 数据蒸馏封闭域信息抽取模型从服务启动到多卡负载均衡 本文面向已完成 UIE Slim 数据蒸馏训人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP 文本信息抽取应用实战基于 UIE 微调的数据标注、模型训练与封闭域蒸馏全流程指南PaddleNLP 文本信息抽取应用实战基于 UIE 微调的数据标注、模型训练与封闭域蒸馏全流程指南 本文以 PaddleNLP 信息抽取应用中的 文本信息抽人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPPaddleNLP 通用信息抽取大模型 PP-UIE 实战指南零样本抽取、数据标注、模型微调与高性能推理PaddleNLP 通用信息抽取大模型 PP UIE 实战指南零样本抽取、数据标注、模型微调与高性能推理 PP UIEUniversal Informati人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP上一篇SteamShutdown终极指南让电脑在Steam下载完成后自动关机的完整解决方案下一篇Cesium3DTilesConverter3D模型格式转换利器使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表