为什么要附原文片段
每个抽取值附一段原文连续片段(span),一方面便于人工核对,另一方面给程序侧的「原文校验」提供依据:把 span 拿去在原文里做子串匹配,匹配失败即丢弃该字段,脏数据进不了库。它也能抑制改写与编造,因为模型知道每处取值都要有出处。要注意 OCR 或 PDF 文本常有断行与全半角噪声,比对前先统一空白字符。
基本信息
| 输出 | 字段名 + 取值 + 原文连续片段 |
|---|---|
| 校验 | 程序用子串匹配验证 span 确实存在于原文 |
| 兜底 | span 校验失败即丢弃该字段,降低脏数据入库 |
| 注意 | OCR/PDF 文本的断行与全半角噪声需先归一化 |
典型使用场景
- 合同要素抽取:每个金额、日期都带原文出处,便于法务核对
- 票据与账单识别:金额字段附原行文本,便于对账
- 简历解析:经历条目附原文句子,便于确认时间与职责
- 质检取样:抽取结果带出处,人工只需核对片段
- 入库前校验:用程序校验 span 存在性,拦截幻觉字段
带片段的抽取模板
带片段的抽取模板
抽取字段并给出原文依据片段(必须是对原文的连续复制,不得改写):
{"fields": [{"name": "amount", "value": "1,280.00", "span": "合计:1,280.00 元"}]}
若找不到连续依据片段,value 输出 null。
# 要求“连续复制”,避免模型把分散信息拼成一句无依据的话
# 程序侧先归一化空白与全半角,再做子串匹配
# 匹配失败即丢弃该字段并记入失败统计,不要静默入库常见问题与处理
| 问题 | 表现 | 处理 |
|---|---|---|
| 改写标点 | span 与原文标点不一致 | 比对前归一化全半角与空格 |
| 张冠李戴 | 数值取自另一行 | 按字段就近抽样复核 |
| 拼接伪造 | span 由多处片段拼成 | 要求必须是连续片段,失败即丢弃 |
| 跨行字段 | 值分布在两行之间 | 先做换行归一化再比对 |
模型改写标点后 span 匹配失败很常见;比对前先归一化全半角与空白字符,能显著降低误判。
长文本里 span 容易张冠李戴(数值取自另一行),按字段就近抽样复核比全量核对更划算。