缺失字段怎么表达
结构化抽取里「原文没有提到」和「提到了但认不出」是两种不同的缺失,必须在提示里分开约定输出形态。不约定时,模型倾向用常识把字段补成一个看起来合理的值,而且补出来的值和真实值长得一样,人工抽查也很难发现。通行做法是:文本未提及输出 null,出现但无法辨认输出 ?(或固定占位符),并在 notes 里写明原因。
基本信息
| 适用任务 | 信息抽取、票据识别、表单解析、简历解析 |
|---|---|
| 两种缺失 | null=原文没有;?=有但无法辨认 |
| 配套字段 | notes 记录不可辨认的具体原因 |
| 统计口径 | 按字段分别统计缺失率,不与整体准确率混报 |
典型使用场景
- 发票/合同扫描件抽取:字迹模糊的字段不能猜,要交人工复核
- 简历解析:候选人没写期望薪资,不能按行业均值补一个
- 日志与工单字段抽取:原文用缩写表达,需要标记为待确认
- 表格转结构化:合并单元格里的空白与「无」要区分对待
- 批量入库前的质量门禁:缺失率异常升高说明上游数据或提示出了问题
缺失处理条款与输出示例
缺失处理条款与输出示例
抽取规则:
- 文本中未提及的字段一律输出 null,不要根据常识补全
- 字段出现但无法辨认时输出 '?',并在 notes 说明原因
- 允许从其他来源回填时,值写入 field_filled 并注明来源
输出示例(原文只写了姓名,电话是模糊的):
{"name": "张伟", "phone": "?", "email": null,
"notes": ["phone 字段字迹模糊无法辨认"]}缺失情况对照
| 情况 | 输出 | 说明 |
|---|---|---|
| 原文未提及 | null | 禁止按常识或上下文推断补值 |
| 出现但无法辨认 | ? | 在 notes 写明原因,与 null 分开统计 |
| 原文写了但为空 | 空字符串 | 表示文本中确实存在该空位,语义与 null 不同 |
| 从外部来源回填 | 值 + source | 标注来源,避免人工把补充值当成原文 |
字段缺失率本身就是质量指标:某一字段的缺失率突然从 2% 涨到 30%,通常不是模型变差,而是上游扫描质量或版式变了,先查数据再改提示。
同一批任务里 null 与空字符串混用时,下游 SQL 的 IS NULL 与 = '' 会走不同分支,容易出现「明明有值却过滤掉」的问题。入库前统一约定,或在提示里显式声明空字符串不出现。