示例成品 · 平台演示,按左边这组点选真跑出来的
直接给方案。核心一句:**以图片为唯一事实源,所有回答必须能引用图片内文字/区域;OCR预标注只当底稿,人工逐字核;双人不一致就仲裁。**
---
## 1. 标注规范:先把幻觉压住
### 1.1 图内文字转写
- 每个文字区域一个框,类型选:`printed` / `handwritten` / `scene_text` / `unclear_text`。
- **逐字转写**,保留大小写、标点、换行、错误拼写。
- **不翻译、不纠正、不扩展缩写**。图片写 `ST0P` 就转 `ST0P`,不要改 `STOP`。
- 看不清的字符用 `□`,整片看不清写 `[模糊]`;边缘截断写 `[截断]`。
- **禁止猜**。OCR输出只能当底稿,必须放大逐字核对。谁直接复制OCR结果,打回重标。
- 文档/截图类图片:所有可见文字全量转写,不要总结。自然场景:文字转写和场景描述分开。
### 1.2 视觉描述
- 只描述可见内容:颜色、位置、数量、类型。
- 不确定就写“看起来是”“无法确定”。
- 禁止看到绿色logo就写“星巴克”,除非图内文字清晰可见。
### 1.3 对话/指令构建
每个样本生成 1–3 轮对话,覆盖类型:
- 文字读取
- 视觉描述
- 视觉问答
- 是非判断
- 简单推理
回答规则:
- 必须引用图片内可见文字或区域,**用引号原文引用**。
- 图片不足以回答时,标 `not_answerable`,回答“图片中未显示/无法确定”。
- 禁止引入图片外知识。
- 每批至少保留 10–15% 的不可回答样本,训练模型学会拒答。
示例:
```text
坏:
Q:这家店是什么品牌?
A:应该是星巴克。
图:只有绿色logo,文字模糊。
好:
Q:这家店是什么品牌?
A:图片中logo文字模糊,无法确认店名。
```
---
## 2. Label Studio 配置
建三个项目,配置相同:
- 项目 A:标注员甲
- 项目 B:标注员乙
- 项目 C:仲裁
A/B 必须是两个独立项目,不要单项目多人共标,避免互相看到结果。
Label Config 示例:
```xml
<View>
<Image name="image" value="$image" zoom="true" zoomControl="true"/>
<Header value="1. 图内文字:框选并逐字转写"/>
<RectangleLabels name="text_region" toName="image" showInline="true">
<Label value="printed" background="#B3E5FC"/>
<Label value="handwritten" background="#FFCCBC"/>
<Label value="scene_text" background="#C8E6C9"/>
<Label value="unclear_text" background="#FFECB3"/>
</RectangleLabels>
<TextArea name="transcription" toName="image" perRegion="true" whenTagName="text_region"
rows="2" placeholder="逐字转写;模糊[模糊],截断[截断],禁止猜改"/>
<Header value="2. 关键物体/LOGO(可选)"/>
<RectangleLabels name="object_region" toName="image" showInline="false">
<Label value="object" background="#CE93D8"/>
<Label value="person" background="#FFD54F"/>
<Label value="logo" background="#F48FB1"/>
</RectangleLabels>
<TextArea name="object_desc" toName="image" perRegion="true" whenTagName="object_region"
rows="2" placeholder="可见特征描述;不确定写不确定"/>
<Header value="3. 对话/指令构建"/>
<Choices name="instruction_type" toName="image" choice="single" required="true" showInLine="true">
<Choice value="text_reading"/>
<Choice value="visual_description"/>
<Choice value="visual_qa"/>
<Choice value="yes_no"/>
<Choice value="reasoning"/>
</Choices>
<TextArea name="instruction" toName="image" rows="2" required="true" placeholder="用户指令/问题"/>
<TextArea name="response" toName="image" rows="4" required="true"
placeholder="回答。必须引用图中可见文字/区域;不确定写无法确定"/>
<Choices name="answerable" toName="image" choice="single" required="true" showInLine="true">
<Choice value="answerable"/>
<Choice value="not_answerable"/>
</Choices>
</View>
```
注意:Label Studio 原生不擅长复杂证据引用。训练/质检时用“响应中的引文必须能在 `transcription` 中原样匹配”来校验。
---
## 3. 双盲 + 仲裁流程
### 3.1 OCR预标注
先用 PaddleOCR / EasyOCR / 云OCR 跑一遍文字框和文字内容,导入 A/B 项目作为预测结果。
标注员只做:**补漏、删假、改错**。这样能显著降低文字转写乱来。
### 3.2 双盲标注
同一批任务导入 A 和 B,两个标注员独立标注。
### 3.3 自动比对
导出 A/B 结果,脚本比对:
- 文字框配对:IoU ≥ 0.85
- 文字转写一致性:字符级 CER ≤ 0.02
- 指令类型一致
- `answerable` 一致
- 回答中关键引文/数字/实体一致
上述任意一项不一致,进仲裁。
### 3.4 仲裁
不一致任务导入项目 C,由高级仲裁员独立核对原图后裁决。
仲裁员先不看 A/B 结果,最后再看分歧点。仲裁结果最终覆盖。
### 3.5 抽检
每批随机抽 5% 已仲裁样本质检。重点查:
- 是否出现图片不存在的内容
- 文字转写是否逐字
- 回答是否有证据引用
**幻觉率 > 1% 或文字错误率 > 2%,整批返工。**
---
## 4. 最终交付格式
导出 JSONL,一行一个样本:
```json
{
"id": "img_001",
"image": "s3://bucket/img_001.jpg",
"image_text": [
{
"bbox": [10, 20, 30, 10],
"text": "STOP",
"type": "printed",
"quality": "high"
}
],
"conversations": [
{
"from": "human",
点左边「开工 · 直接出成品」,出一份你自己的版本(文字免费)