多模态数据标注怎么做
要给VLM构建图文对,问题老是脱离图像纯文本可答、回答爱臆造、图中文字转写不规范,标出来的数据训VLM尽是幻觉。
有人这样说「这图文对标注老出幻觉,图里文字转写还乱来,真头疼。」
能替你选的都选好了。不想动,直接点下面「交给 AI 办」,点一下就开始做;想改,就点一下要的那个。
已替你选好想改就点一下
更多选项(一般不用动)
只有你知道的不填就先空着,成品里留【待填】
还想怎么改可以不选
高级选项一般不用动 · 这件事通常 1 分钟左右做好
示例成品全文按上面这组示例选项真跑出来的
直接给方案。核心一句:以图片为唯一事实源,所有回答必须能引用图片内文字/区域;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% 的不可回答样本,训练模型学会拒答。
示例:
坏:
Q:这家店是什么品牌?
A:应该是星巴克。
图:只有绿色logo,文字模糊。
好:
Q:这家店是什么品牌?
A:图片中logo文字模糊,无法确认店名。2. Label Studio 配置
建三个项目,配置相同:
- 项目 A:标注员甲
- 项目 B:标注员乙
- 项目 C:仲裁
A/B 必须是两个独立项目,不要单项目多人共标,避免互相看到结果。
Label Config 示例:
<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,一行一个样本:
{
"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",