OCR Invoices Pre-NER BIO Format 标注模板完整指南:发票预标注数据准备一条龙
【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio
发票信息抽取管线里,OCR 文本要先经人工校对,才能用于 NER 训练。Label Studio 社区标注模板「OCR Invoices Pre-NER BIO Format」把这套预标注数据准备变成可直接套用的流程:框选 token、校对转写,最后导出 BIO 就绪的 token 序列。
数据流:一张发票图到一条 BIO 语料
这一节解决"数据从哪来、到哪去"的问题:一张发票图要经过四个阶段,才变成 NER 训练能用的语料。
- 输入:每个任务的
data字段只需一个image键,值是发票图片的 URL 或 base64。 - OCR 检测识别:OCR 模型输出带坐标的文本 token。token 即发票上的每个词条或字段,每个 token 对应一个 bounding box(矩形框)。有预检测时框已生成,没有就手动框选。
- 人工校对(Pre-NER 阶段):标注者逐个核对框内转写文本,可修改错字。所有 token 初始标签都是
O(Outside,实体外部)。 - 导出:标注结果按区域 id 聚合成"坐标 + 文本 + 标签"的 token 列表。
- NER 训练输入:把该列表按阅读顺序排列,在其上标注 B-(实体开始)与 I-(实体内部)标签。BIO 约定即 B-、I-、O 三者组合。仓库中的 ner-tagging-invoices-bio-format 模板就是为第 5 步准备的。
这个模板的产出不是最终 NER 语料,而是一份全部标为 O 的 token 序列。
配置拆解:三个控件如何协同
这一节解决"配置怎么写"的问题:Image、RectangleLabels、TextArea 三个控件组合成一份完整可运行的配置。
<View> <!-- The image to annotate --> <Image name="image" value="$image" zoomControl="true"/> <!-- Bounding-box control that will receive the "rectanglelabels" results coming from your OCR model (from_name = "label") --> <RectangleLabels name="label" toName="image" choice="single"> <!-- You only emit the generic "O" class, but feel free to add more labels --> <Label value="O" background="#FFA500"/> </RectangleLabels> <!-- Per-region transcription box (from_name = "transcription"). Because perRegion="true", one TextArea is linked to each rectangle. --> <TextArea name="transcription" toName="image" perRegion="true" editable="true" rows="1" required="true" placeholder="Type or correct OCR text…"/> </View>这段配置与仓库 config.yml 中的 config 段一致。注意两点:value="$image"从任务数据取图;每个矩形产出两条结果,from_name分别为label和transcription。完整配置可直接复制使用。
Image:图片展示与缩放
<Image>负责展示发票图片。它决定了坐标的参照系:标注结果的坐标以图片原始尺寸的百分比(0–100)存储,而非像素值。
| 参数 | 类型 | 默认值 | 本文取值 | 说明 |
|---|---|---|---|---|
| name | string | — | image | 控件名称,其他控件 toName 的绑定目标 |
| value | string | — | $image | 从任务数据取图片 URL 或 base64 |
| zoomControl | boolean | false | true | 显示缩放控件,支持放大观察 |
这么配的原因:发票小字号多,zoomControl="true"让你能放大看清字段,而百分比坐标让不同分辨率的票据可以共用一套配置。
RectangleLabels:框选 token 并打 O 标签
<RectangleLabels>创建带标签的矩形框,是 OCR 预检测结果的落点。本模板只定义了一个标签O,橙色填充便于肉眼识别。
| 参数 | 类型 | 默认值 | 本文取值 | 说明 |
|---|---|---|---|---|
| name | string | — | label | 控件名称,结果的 from_name |
| toName | string | — | image | 绑定的 Image 控件 |
| choice | single | multiple | single | single | 每个矩形只能选一个标签 |
| maxUsages | number | — | 未设置 | 单标签每任务最大使用次数 |
| opacity | float | 0.6 | 未设置 | 矩形填充透明度 |
| strokeWidth | number | 1 | 未设置 | 边框粗细 |
| canRotate | boolean | true | 未设置 | 是否显示旋转控制 |
choice="single"保证一个框只属于一个类别,导出时无需处理多标签歧义。标签集本身很轻,注释也说明可以按需要扩充。
TextArea:逐框转写校对
<TextArea>提供转写输入。perRegion 表示按区域标注:与整图标注不同,它让每个矩形框绑定一个独立输入框。
| 参数 | 类型 | 默认值 | 本文取值 | 说明 |
|---|---|---|---|---|
| name | string | — | transcription | 控件名称,结果的 from_name |
| toName | string | — | image | 绑定的 Image 控件 |
| perRegion | boolean | — | true | 按区域标注,每个矩形一个输入框 |
| editable | boolean | false | true | 提交后仍可编辑文本 |
| rows | number | 1 | 1 | 输入框行数;单行可用 Enter 提交 |
| required | boolean | false | true | 强制每个区域都有转写内容 |
| placeholder | string | — | Type or correct OCR text… | 输入提示文案 |
| maxSubmissions | string | — | 未设置 | 每区域最多提交次数 |
| skipDuplicates | boolean | false | 未设置 | 是否禁止重复提交 |
| displayMode | tag | region-list | tag | 未设置(默认 tag) | tag 模式输入框在标注区,region-list 模式集中在 Regions 面板 |
perRegion="true" 是整个模板的关键。它让"一个矩形一段文本"成为硬绑定:选中哪个框,输入框就对应哪段 OCR 文本。rows="1"再配合 Enter 直接提交,校对节奏快,无需点击 Add 按钮。
上手四步 🚀:从建项目到导出
这一节解决"怎么跑起来"的问题:建项目、导数据、标注、导出,每步附一个常见卡点。
建项目贴配置:新建项目,在 Labeling Setup 选择 Custom template,粘贴上文完整配置并保存。卡点:
toName必须与<Image>的name完全一致,否则控件不绑定,框选不可用。导入任务数据:在项目 Import Data 页上传 JSON 文件,或经 API 与 S3、GCS 等存储后端导入,参考 tasks.md 与 storage.md。数据形态只需一个
image键:{ "data": { "image": "https://your-domain.com/invoices/1024.png" } }这里的 URL 换成你自己的可访问地址即可,base64 数据同样支持。卡点:
image用了相对路径时浏览器无法解析,必须换成完整 URL。标注操作序列:框选一个 token → 在输入框核对并修正转写文本 → 按 Enter 提交 → 继续下一个框。有 OCR 预检测时,只需核对框位与文本。卡点:
required="true"意味着存在未填转写的框时,Submit 会被拦截,无法提交整条任务。导出:在 Export 页选择 JSON 格式下载,流程见 export.md。卡点:导出的 x、y、width、height 是 0–100 的百分比,需乘以
original_width、original_height才能还原像素坐标。
导出结果怎么读 📦
这一节解决"导出物怎么用"的问题:同一条标注里的 rectanglelabels 与 textarea 记录靠相同 id 配对。
每个矩形区域产出两条记录,片段如下(字段取自仓库文档示例,实际字段以仓库实际为准):
{ "result": [ { "id": "X_12fGk", "type": "rectanglelabels", "from_name": "label", "to_name": "image", "original_width": 1920, "original_height": 1280, "image_rotation": 0, "value": { "x": 3.1, "y": 8.2, "width": 20, "height": 16, "rectanglelabels": ["O"], "rotation": 0 } }, { "id": "X_12fGk", "type": "textarea", "from_name": "transcription", "to_name": "image", "value": { "text": ["Invoice No. 1024"] } } ] }逐字段看:
- rectanglelabels 记录:
from_name为label,对应 RectangleLabels 控件。value.x、value.y是旋转前左上角坐标,width、height是宽高,均为百分比。original_width、original_height记录原图像素尺寸,image_rotation记录图片旋转角度。rectanglelabels数组即该框的标签,本模板固定为["O"]。 - textarea 记录:
from_name为transcription。value.text是数组,对应该区域提交的全部转写文本;单行提交时通常只有一个元素。 - 两条记录的
id相同(示例中的X_12fGk),说明它们来自同一个矩形区域。按 id 聚合后,每个 token 就同时拥有坐标、文本与标签。
变成 NER 训练输入的方法:按阅读顺序(先 y 后 x 排序)取出各 token 的text,组成 token 序列,初始标签全为 O。后续在该序列上打 B-/I- 标签,即得 BIO 训练语料。仓库的 ner-tagging-invoices-bio-format 模板以granularity="word"的 Text 控件承接这一步,界面如下。
进阶:从单一 O 标签到细粒度实体
这一节解决"能否提前标实体类型"的问题:发票字段类型已知时,标签集直接扩展即可,无需两遍标注。
可直接替换原 RectangleLabels 片段的扩展配置:
<RectangleLabels name="label" toName="image" choice="single"> <Label value="O" background="#FFA500"/> <Label value="B-Vendor" background="#4CAF50"/> <Label value="B-InvoiceNo" background="#2196F3"/> <Label value="B-Amount" background="#F44336"/> <Label value="B-Date" background="#9C27B0"/> </RectangleLabels>choice="single"保持不变,每个框仍只选一个标签。标注者在框选时直接选实体类型,Pre-NER 阶段即产出带类型的 token,省去后续转换。
扩展标签应保留 BIO 前缀约定(B-xxx、I-xxx、O),下游解析代码才能统一处理。适用场景:字段类型稳定(供应商、发票号、金额、日期)且希望一遍完成。若你倾向"先框选校对、后分类"的两步流程,保持默认 O 标签,把实体分类留给 NER 模板即可。
总结与资源索引
本节收口要点并集中给出资源。OCR Invoices Pre-NER BIO Format 只做一件事:Image 展示发票,RectangleLabels 以 O 标签框选 token,TextArea perRegion 完成逐框转写校对。导出的"坐标 + 文本 + O"token 序列,正是 NER 训练的标准输入。预标注数据准备,照此流程即可复用。
| 资源 | 相对路径 |
|---|---|
| 模板配置 config.yml | config.yml |
| 后续 NER 标注模板 | ner-tagging-invoices-bio-format/config.yml |
| Image 标签文档 | image.md |
| RectangleLabels 标签文档 | rectanglelabels.md |
| TextArea 标签文档 | textarea.md |
| View 标签文档 | view.md |
| 任务数据导入指南 | tasks.md |
| 导出指南 | export.md |
| 模板界面截图 | ocr-invoices-pre-ner-bio-format.jpg |
【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考