写点什么

2. 基于 Label studio 的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等

作者:汀丶
  • 2023-03-04
    浙江
  • 本文字数:2176 字

    阅读完需:约 7 分钟

文档抽取任务 Label Studio 使用指南

1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等


2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等


3.基于Label studio的训练数据标注指南:文本分类任务


4.基于Label studio的训练数据标注指南:情感分析任务观点词抽取、属性抽取


目录


1. 安装

以下标注示例用到的环境配置:


  • Python 3.8+

  • label-studio == 1.7.1

  • paddleocr >= 2.6.0.1


在终端(terminal)使用 pip 安装 label-studio:


pip install label-studio==1.7.1
复制代码


安装完成后,运行以下命令行:


label-studio start
复制代码


在浏览器打开http://localhost:8080/,输入用户名和密码登录,开始使用 label-studio 进行标注。

2. 文档抽取任务标注

2.1 项目创建

点击创建(Create)开始创建一个新的项目,填写项目名称、描述,然后选择Object Detection with Bounding Boxes


  • 填写项目名称、描述



  • 命名实体识别、关系抽取、事件抽取、实体/评价维度分类任务选择 Object Detection with Bounding Boxes`



  • 文档分类任务选择 Image Classification`

  • 添加标签(也可跳过后续在 Setting/Labeling Interface 中添加)



图中展示了 Span 实体类型标签的构建,其他类型标签的构建可参考2.3标签构建

2.2 数据上传

先从本地或 HTTP 链接上传图片,然后选择导入本项目。

2.3 标签构建

  • Span 实体类型标签



  • Relation 关系类型标签



Relation XML 模板:


  <Relations>    <Relation value="单位"/>    <Relation value="数量"/>    <Relation value="金额"/>  </Relations>
复制代码


  • 分类类别标签


2.4 任务标注

  • 实体抽取

  • 标注示例:



  • 该标注示例对应的 schema 为:


schema = ['开票日期', '名称', '纳税人识别号', '地址、电话', '开户行及账号', '金   额', '税额', '价税合计', 'No', '税率']
复制代码


  • 关系抽取

  • Step 1. 标注主体(Subject)及客体(Object)



  • Step 2. 关系连线,箭头方向由主体(Subject)指向客体(Object)



  • Step 3. 添加对应关系类型标签



  • Step 4. 完成标注



  • 该标注示例对应的 schema 为:


schema = {    '名称及规格': [        '金额',        '单位',        '数量'    ]}
复制代码


  • 文档分类

  • 标注示例



  • 该标注示例对应的 schema 为:


schema = '文档类别[发票,报关单]'
复制代码

2.5 数据导出

勾选已标注图片 ID,选择导出的文件类型为JSON,导出数据:


2.6 数据转换

将导出的文件重命名为label_studio.json后,放入./document/data目录下,并将对应的标注图片放入./document/data/images目录下(图片的文件名需与上传到 label studio 时的命名一致)。通过 label_studio.py 脚本可转为 UIE 的数据格式。


  • 路径示例


./document/data/├── images # 图片目录│   ├── b0.jpg # 原始图片(文件名需与上传到label studio时的命名一致)│   └── b1.jpg└── label_studio.json # 从label studio导出的标注文件
复制代码


  • 抽取式任务


python label_studio.py \    --label_studio_file ./document/data/label_studio.json \    --save_dir ./document/data \    --splits 0.8 0.1 0.1\    --task_type ext
复制代码


  • 文档分类任务


python label_studio.py \    --label_studio_file ./document/data/label_studio.json \    --save_dir ./document/data \    --splits 0.8 0.1 0.1 \    --task_type cls \    --prompt_prefix "文档类别" \    --options "发票" "报关单"
复制代码

2.7 更多配置

  • label_studio_file: 从 label studio 导出的数据标注文件。

  • save_dir: 训练数据的保存目录,默认存储在data目录下。

  • negative_ratio: 最大负例比例,该参数只对抽取类型任务有效,适当构造负例可提升模型效果。负例数量和实际的标签数量有关,最大负例数量 = negative_ratio * 正例数量。该参数只对训练集有效,默认为 5。为了保证评估指标的准确性,验证集和测试集默认构造全负例。

  • splits: 划分数据集时训练集、验证集所占的比例。默认为 0.8, 0.1, 0.1 表示按照8:1:1的比例将数据划分为训练集、验证集和测试集。

  • task_type: 选择任务类型,可选有抽取和分类两种类型的任务。

  • options: 指定分类任务的类别标签,该参数只对分类类型任务有效。默认为"正向", "负向"。

  • prompt_prefix: 声明分类任务的 prompt 前缀信息,该参数只对分类类型任务有效。默认为"情感倾向"。

  • is_shuffle: 是否对数据集进行随机打散,默认为 True。

  • seed: 随机种子,默认为 1000.

  • separator: 实体类别/评价维度与分类标签的分隔符,该参数只对实体/评价维度分类任务有效。默认为"##"。

  • schema_lang:选择 schema 的语言,将会应该训练数据 prompt 的构造方式,可选有chen。默认为ch

  • ocr_lang:选择 OCR 的语言,可选有chen。默认为ch

  • layout_analysis:是否使用 PPStructure 对文档进行布局分析,该参数只对文档类型标注任务有效。默认为 False。


备注:


  • 默认情况下 label_studio.py 脚本会按照比例将数据划分为 train/dev/test 数据集

  • 每次执行 label_studio.py 脚本,将会覆盖已有的同名数据文件

  • 在模型训练阶段我们推荐构造一些负例以提升模型效果,在数据转换阶段我们内置了这一功能。可通过negative_ratio控制自动构造的负样本比例;负样本数量 = negative_ratio * 正样本数量。

  • 对于从 label_studio 导出的文件,默认文件中的每条数据都是经过人工正确标注的。

References

发布于: 刚刚阅读数: 3
用户头像

汀丶

关注

本博客将不定期更新关于NLP等领域相关知识 2022-01-06 加入

本博客将不定期更新关于机器学习、强化学习、数据挖掘以及NLP等领域相关知识,以及分享自己学习到的知识技能,感谢大家关注!

评论

发布
暂无评论
2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等_自然语言处理_汀丶_InfoQ写作社区