ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PaddleNLP 文本信息抽取标注指南:基于 Label Studio 从数据标注到 UIE 训练数据构建

PaddleNLP 文本信息抽取标注指南:基于 Label Studio 从数据标注到 UIE 训练数据构建 人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本指南基于 PaddleNLP 信息抽取应用Universal Information ExtractionUIE的完整开发链路系统讲解如何使用开源标注工具 [Label Studio] 完成文本类信息抽取任务实体抽取、关系抽取、事件抽取、观点抽取与句子级分类的标注并通过仓库内 label_studio.py 脚本将标注结果一键转换为 UIE 模型可直接训练的train.txt/dev.txt/test.txt数据。读完本文你将掌握从标注项目创建 → 标签体系设计 → 任务标注 → JSON 导出 → 训练数据转换的全流程实操并能正确配置negative_ratio、splits、task_type、prompt_prefix、options、separator、schema_lang等关键参数为后续 UIE 少样本微调铺平数据基础。1. 环境安装与 Label Studio 启动标注环境需要满足以下版本要求与当前仓库 label_studio.py 所配套的标注方案一致Python 3.8label-studio 1.6.0paddleocr 2.6.0.1仅在涉及文档/图片标注时使用纯文本标注可忽略在终端中通过 pip 安装指定版本的 label-studiopip install label-studio1.6.0安装完成后执行如下命令启动服务label-studio start随后在浏览器中打开 http://127.0.0.1:8080/输入用户名和密码登录后即可开始创建标注项目。Label Studio 本身是一个基于 Web 的标注平台支持文本、图像、音频等多种数据类型本项目只用到其文本标注能力。2. 标注项目创建与模板选型登录后点击Create创建新项目填写项目名称与描述。项目创建的关键在于根据目标任务类型选择对应的标注模板模板直接决定了标注界面的交互方式也会影响后续label_studio.py脚本对导出 JSON 的解析逻辑。不同任务与模板的对应关系如下目标任务选择的 Label Studio 模板命名实体识别、关系抽取、事件抽取、观点抽取Relation Extraction文本分类、句子级情感分类Text Classification文档场景下的目标检测式标注Object Detection with Bounding Boxes具体地对于命名实体识别、关系抽取、事件抽取、观点抽取等抽取类任务请选择Relation Extraction模板因为这类任务既需要框选文本片段实体又需要为实体之间建立连线关系关系模板天然支持这两种操作。对于文本分类、句子级情感分类任务请选择Text Classification模板标注员只需为整条文本打一个类别即可。文档/图片场景的目标检测式标注如增值税发票抽取则需要选择Object Detection with Bounding Boxes本文聚焦纯文本场景不展开。模板选定后需要定义标签Define labels。例如图中展示了实体类型标签的构建方式其他类型标签的构建方法见下一节 3. 标签体系构建。标签名称将成为后续 schema抽取目标 schema的直接来源因此建议在标注前认真规划标签命名。3. 标签体系构建标签体系的名称设计非常重要——label_studio.py转换脚本会直接把标注中的标签名拼接到训练 prompt 中因此标签命名应语义清晰、贴近真实业务术语。Label Studio 支持按数据类型构建三种标签体系。3.1 实体标签Entity label在Relation Extraction模板的标签设置中新增实体类型标签例如时间、选手、赛事名称、得分、武器名称等。实体标签名就是 UIE 抽取 schema 中的实体类型名。3.2 关系标签Relation label关系标签用于描述两个实体之间的语义关系。Label Studio 中关系标签通过 XML 配置模板定义典型的关系标签 XML 如下Relations Relation valueSinger/ Relation valuePublished/ Relation valueAlbum/ /Relations关系标签的命名同样会直接进入模型训练的 prompt 构造逻辑命名时应同时考虑语义合理性与 prompt 语法通顺性详见 5.2 关系抽取的 P 类型设置原则。3.3 分类标签Classification label对于分类任务在Text Classification模板中构建分类选项例如情感分类的正向/负向两个选项。分类选项会通过--options参数传递给转换脚本并自动拼装进训练 prompt。4. 数据上传在项目的数据导入页面首先上传本地txt 格式的文本文件选择List of tasks任务列表导入方式即可将文本文件导入当前项目。每一条文本会作为一条独立的标注任务进入标注队列。需要说明的是Label Studio 会为导入的每条任务分配data.text字段这正是转换脚本process_text_tag中读取line[data][text]的依据见 paddlenlp/utils/tools.py。5. 任务标注实战五类抽取任务的标注与 schema 设计下面以仓库文档配套的标注示例为准逐一说明每类任务的标注要点以及与之对应的 UIE schema 写法。5.1 实体抽取Entity Extraction标注方式为在文本中框选实体片段并打上实体类型标签。标注示例对应的 schema 为schema [ 时间, 选手, 赛事名称, 得分 ]注意实体抽取的 schema 是一个一维列表列表中的每一项就是实体类型标签名。5.2 关系抽取Relation Extraction关系抽取需要在标注两个实体后从被框选的实体 A 连接到实体 B 并指定关系类型 P。标注示例对应的 schema 为schema { 作品名: [ 歌手, 发行时间, 所属专辑 ] }关系 P 类型的设置至关重要必须遵循以下原则{P} of {S} is {O}需要能构成语义通顺的短语。例如对于三元组 (S, 父子, O)关系类别命名为父子本身没有语义问题但按照 UIE 关系类型 prompt 的构造方式S 的父子是 O 的表达不够通顺因此更建议把 P 改为孩子即 S 的孩子是 O。合理的 P 类型设置会显著提升零样本zero-shot性能。从源码看关系 prompt 在中文下按主语 的 谓词构造如歌手 of 作品名对应的中文作品名的歌手英文下按谓词 of 主语构造具体见 paddlenlp/utils/tools.py。因此 P 的命名必须保证拼接后语义自然。5.3 事件抽取Event Extraction事件抽取通过事件触发词 事件论元的结构组织标签。标注示例对应的 schema 为schema { 地震触发词: [ 时间, 震级 ] }事件触发词如地震作为 schema 的键其论元时间、震级作为键对应的列表值转换脚本会将其转化为逐阶段的关系抽取训练数据。5.4 句子级分类Sentence Level Classification句子级分类只需为整条句子选择一个类别。标注示例对应的 schema 为schema 情感倾向[正向负向]注意分类 schema 的写法是提示前缀[选项1选项2]的字符串形式与抽取任务的列表/字典形式不同。转换阶段会自动为这类任务构造训练 prompt。5.5 观点抽取Opinion Extraction观点抽取评价维度级情感分类将评价维度 观点词 情感倾向组织为嵌套结构。标注示例对应的 schema 为schema { 评价维度: [ 观点词, 情感倾向[正向负向] ] }其中评价维度实体承担主体角色观点词和情感倾向作为其属性。转换脚本会为每个评价维度实体自动构造xxx 的情感倾向 [正向负向]式的实体级分类 prompt见 paddlenlp/utils/tools.py。6. 数据导出完成标注后回到标注任务列表勾选已标注的文本 ID将导出文件类型选择为JSON并导出数据。导出的 JSON 文件是后续数据转换脚本的唯一输入其中每条记录包含data.text文本内容与annotations[0].result标注结果数组两部分。在纯文本场景下result数组中元素类型为labels的表示实体标注含start_offset、end_offset、labels[0]字段其余元素表示关系标注含from_id、to_id、labels[0]字段在分类场景下result[0].value.choices保存分类结果。这些字段的解析逻辑见 paddlenlp/utils/tools.py。7. 数据转换将标注 JSON 转换为 UIE 训练数据将导出的文件重命名为label_studio.json并放入./data目录然后通过同目录下的 label_studio.py 脚本转换为 UIE 的数据格式。该脚本位于信息抽取应用根目录与本文标注指南同属一个完整流程中文版说明见 label_studio_text.md配套中文 README 见 README.md。7.1 抽取任务转换python label_studio.py\ --label_studio_file ./data/label_studio.json \ --save_dir ./data \ --splits 0.8 0.1 0.1 \ --task_type ext脚本执行后会在save_dir默认./data下生成train.txt、dev.txt、test.txt三个文件以及记录数据划分索引的sample_index.json。每行是一条 JSON 格式的训练样本字段结构为{content: 原始文本, result_list: [{text: 抽取片段, start: 起始位置, end: 结束位置}], prompt: 抽取目标 prompt}该字段结构正是 text/utils.py 中reader()读取训练数据所依赖的格式content为文本内容、prompt为抽取目标、result_list为标注结果位置。7.2 句子级分类任务转换对于句子级分类任务数据转换阶段会自动为模型训练构造 prompt 信息。例如句子级情感分类的 prompt 形如Sentiment Classification [positive, negative]可通过prompt_prefix和options参数配置python label_studio.py\ --label_studio_file ./data/label_studio.json \ --task_type cls \ --save_dir ./data \ --splits 0.8 0.1 0.1 \ --prompt_prefix Sentiment Classification \ --options positive negative转换脚本会根据prompt_prefix [ ,.join(options) ]自动拼接 prompt见 paddlenlp/utils/tools.py并把分类选项在 prompt 中的位置作为标注结果写入result_list从而让 UIE 模型学习在 prompt 中检索类别词的任务范式。7.3 观点抽取实体级分类转换观点抽取属于抽取任务task_type ext但在数据转换阶段会为评价维度自动构造实体级的情感分类 prompt。例如某个评价维度xxx的 prompt 为Sentiment Classification of xxx [positive, negative]同样通过prompt_prefix与options声明并通过separator指定实体标签与分类标签之间的分隔符python label_studio.py\ --label_studio_file ./data/label_studio.json \ --task_type ext \ --save_dir ./data \ --splits 0.8 0.1 0.1 \ --prompt_prefix Sentiment Classification \ --options positive negative \ --separator ##其中separator用于切分形如评价维度##情感倾向的复合标签转换脚本通过label.split(separator)将实体标签与其分类子标签拆分再为每个实体构造实体名 的 提示前缀 [选项]中文或提示前缀 of 实体名 [选项]英文形式的实体级分类样本见 paddlenlp/utils/tools.py 与 paddlenlp/utils/tools.py。8. 参数全览默认值与使用场景label_studio.py 脚本的参数定义位于其argparse部分label_studio.py与文档配套的完整参数说明如下参数说明默认值label_studio_file从 Label Studio 平台导出的标注文件路径./data/label_studio.jsonsave_dir训练数据的存储目录默认存储在data目录./datanegative_ratio最大负例比例仅对抽取任务有效。合理构造负例可提升模型效果负例数量与当前实际标签数相关最大负例数 negative_ratio × 正例数。该参数只对训练集生效默认 5为保证评估指标准确验证集和测试集默认构造全量负例5splits数据集划分比例默认[0.8, 0.1, 0.1]即按8:1:1划分为训练集、验证集、测试集三者和必须为 1否则脚本会抛出校验错误[0.8, 0.1, 0.1]task_type任务类型仅两种ext抽取任务与cls分类任务extoptions分类任务的类别标签仅对分类型任务有效[正向, 负向]prompt_prefix分类任务的 prompt 前缀信息仅对分类型任务有效情感倾向is_shuffle是否随机打乱数据集Trueseed随机种子1000schema_langschema 的语言决定训练数据 prompt 的构造方式可选ch与enchseparator实体类别/评价维度与分类标签之间的分隔符仅对实体级/评价维度级分类任务有效##layout_analysis是否启用版面分析以优化 OCR 结果排序仅文档/图片标注场景使用Falseocr_langOCR 语言可选ch与en仅文档/图片标注场景使用ch其中部分参数在源码中存在校验逻辑splits的长度必须为 0 或 3三元素之和必须精确等于 1否则抛出ValueError见 label_studio.py若label_studio_file路径不存在脚本会直接报错提示输入正确路径见 label_studio.pynegative_ratio与splits均为整数/浮点数值类型is_shuffle使用strtobool解析布尔字符串见 label_studio.py。9. 转换脚本底层原理从标注 JSON 到训练样本深入阅读 label_studio.py 与底层转换类 DataConverter 的实现可以完整还原转换流程1数据划分与打乱。脚本先读取标注 JSON若is_shuffleTrue则按np.random.permutation打乱样本顺序再按splits比例计算训练/验证/测试切分点并将各集合的原始样本索引写入sample_index.json便于追溯见 label_studio.py。2自动识别标注类型。脚本通过判断首条样本的data是否包含image字段来决定anno_type是image还是text从而走不同的解析分支见 label_studio.py。3结构化解析。DataConverter.process_text_tag将每条标注记录解析为entities与relations两类结构化结果抽取任务或label分类任务见 paddlenlp/utils/tools.py。4负样本构造。这是提升模型效果的关键环节对于实体抽取第一阶段 promptadd_entity_negative_example会为每条样本构造该样本中不存在的实体标签作为负例负例数量受negative_ratio约束见 paddlenlp/utils/tools.py对于关系抽取第二阶段 prompt训练集通过三类冗余构造负例——反方向关系inverse_relation、用非黄金主体与随机谓词拼接的 prompt、用黄金主体与错误标签拼接的 prompt每类负例数量按negative_ratio // 3分配验证集和测试集则通过add_full_negative_example构造全量负例以保证评估指标准确见 paddlenlp/utils/tools.py当negative_ratio-1时脚本会构造全部可用的冗余负例不限制数量见 paddlenlp/utils/tools.py。5输出。最终按{content, result_list, prompt}结构逐行写出train.txt、dev.txt、test.txt见 label_studio.py。10. 从标注数据到 UIE 微调训练完整链路衔接转换出的train.txt/dev.txt可直接交给文本抽取微调脚本 finetune.py 使用实现标注 → 训练的无缝衔接。文本抽取全流程示例见 text/README_en.md中文版见 text/README.md。典型训练命令如下python finetune.py \ --device gpu \ --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 \ --metric_for_best_model eval_f1 \ --load_best_model_at_end True训练数据在读取时会按[CLS] Prompt [SEP] Content [SEP]的方式拼接输入max_seq_len需要大于len(prompt) 3超长文本会被自动切分并同步平移result_list中的位置标注见 text/utils.py。因此在标注阶段精心设计标签与关系 P 的名称不仅影响标注效率也会直接决定训练 prompt 的质量与模型最终效果。PaddleNLP 的 UIE 模型系列uie-base、uie-medium、uie-mini、uie-micro、uie-nano、uie-base-en、uie-m-base、uie-m-large、uie-x-base等以 ERNIE 3.0 轻量模型为底座支持实体、关系、事件、观点抽取以及中英文与跨语言场景具备很强的少样本few-shot微调能力详见信息抽取应用总览 README_en.md中文版 README.md。11. 使用注意事项综合文档说明与脚本实现转换数据时需注意以下几点默认情况下label_studio.py会按比例将数据划分为训练/验证/测试三个数据集每次执行label_studio.py都会覆盖同名的已有数据文件train.txt、dev.txt、test.txt、sample_index.json请注意备份或调整save_dir模型训练阶段建议构造一些负例来提升模型性能该功能已内置在数据转换阶段负例比例由negative_ratio控制负例数 negative_ratio × 正例数从 Label Studio 导出的文件默认假定每条数据都已由人工正确标注请勿混入未标注或标注不完整的任务options、prompt_prefix、separator、schema_lang等参数只在其对应任务类型下生效跨任务类型误用时会被忽略不会影响抽取类样本的构造。参考与延伸阅读本指南对应的中文版标注指南label_studio_text.md文档/图片抽取标注指南英文版label_studio_doc_en.md数据转换脚本label_studio.py底层数据转换器DataConverter实现paddlenlp/utils/tools.py文本信息抽取全流程示例训练/评估/推理text/README_en.md信息抽取应用总览模型列表与整体架构README_en.md赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐基于 Label Studio 的文档信息抽取标注指南从数据标注到 UIE-X 微调数据集构建PaddleNLP基于 Label Studio 的文档信息抽取标注指南从数据标注到 UIE X 微调数据集构建PaddleNLP 导读 本文是 PaddleNLP 信息抽人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP终极指南3分钟掌握macOS系统监控神器eul终极指南3分钟掌握macOS系统监控神器eul 还在为macOS系统监控而烦恼吗想要一款既美观又实用的状态栏监控工具今天我要为你介绍eul——这款采用Sw人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLPAList终极指南5分钟打造你的统一云盘管理中心AList终极指南5分钟打造你的统一云盘管理中心 你是否曾为管理多个云存储服务而烦恼阿里云盘、百度网盘、Google Drive、OneDrive...每个人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP上一篇大二操作系统实验nwpu-cram内存管理模拟终极指南下一篇Coroot Java Profiling基于 async-profiler 的零侵入 JVM 性能剖析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表