目录
Label-Studio导出数据后可通过label_studio.py脚本轻松将数据转换为输入模型时需要的形式,实现无缝衔接。
以下标注示例用到的环境配置:
在终端(terminal)使用pip安装label-studio:
pip install label-studio==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simplelabel
安装完成后,运行以下命令行:
label-studio start
如报:sqlite3.OperationalError: no such function: JSON_VALID => https://www.cnblogs.com/vipsoft/p/17562196.html
在浏览器打开http://localhost:8080/,输入用户名和密码登录,开始使用label-studio进行标注。
用邮箱注册一个帐号
点击创建(Create)开始创建一个新的项目,填写项目名称、描述,然后选择Object Detection with Bounding Boxes
。
图中展示了Span实体类型标签的构建,其他类型标签的构建可参考2.3标签构建
先从本地或HTTP链接上传图片,然后选择导入本项目。
<Relations>
<Relation value="单位"/>
<Relation value="数量"/>
<Relation value="金额"/>
</Relations>
实体抽取
标注示例:
该标注示例对应的schema为:
schema = ['开票日期', '名称', '纳税人识别号', '地址、电话', '开户行及账号', '金额', '税额', '价税合计', 'No', '税率']
关系抽取
进入标签
Step 1. 标注主体(Subject)及客体(Object)
Step 2. 关系连线,箭头方向由主体(Subject)指向客体(Object)
Step 3. 添加对应关系类型标签
Step 4. 完成标注
该标注示例对应的schema为:
schema = {
'名称及规格': [
'金额',
'单位',
'数量'
]
}
文档分类
标注示例
该标注示例对应的schema为:
schema = '文档类别[发票,报关单]'
勾选已标注图片ID,选择导出的文件类型为JSON
,导出数据:
将导出的文件重命名为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 "发票" "报关单"
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的构造方式,可选有ch
和en
。默认为ch
。ocr_lang
:选择OCR的语言,可选有ch
和en
。默认为ch
。layout_analysis
:是否使用PPStructure对文档进行布局分析,该参数只对文档类型标注任务有效。默认为False。备注:
negative_ratio
控制自动构造的负样本比例;负样本数量 = negative_ratio * 正样本数量。我用的 NLP是 V2.5.0 、 label_studio v1.6.0 ,可能版本问题,运行 label_studio.py 时报
python paddlenlp\utils\tools.py items["text"] = line["data"]["text"]
解决方法:
在 Label_Studio 导出的 json 里,找到 data 块,加上 text ,不知道为啥导出来的没这个 text
Label-Studio导出数据后可通过label_studio.py脚本轻松将数据转换为输入模型时需要的形式,实现无缝衔接。 items["text"] = line["data"]["text"]