Files
bid-doctor/docs/architecture/extract-eval.md
YANG JIANKUAN 602703c47c docs(evals): S01–S10 标注集 v1、评测工具和评测报告
- evals/gold:1,887 个标注单元(AI 标注、逐条裁定,未经人工复核),规范见 GUIDELINES.md
- prepare / run_all / score / gold:导出文字层、批量抽取、打分、标注定位
- docs/architecture/extract-eval.md:修复前后的结果(三项目标全部达标)和剩余问题
- decisions.md 记 M1(只用 Flash)和 Q1–Q4;架构 §13 SK13;AGENTS.md 进度

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 23:19:30 +08:00

18 KiB
Raw Blame History

读标抽取评测:S01–S10 标注集 v1(2026-11-03)

修复后的结果见 §7:F1–F8 和四个口径问题已经处理,三项目标全部达标。§1–§6 是修复前(base)的评测,保留作对照。

范围:读标(M2)的五类清单抽取和项目基本信息,在 S01–S10 上的召回率和准确率。 模型:DeepSeek Flash 不思考模式(决策 M1,不再对比 Pro 和思考模式);提示词 substantive v4、qualification / scoring / schedule / tech_param v3、project_info v2;代码版本 f99bb8b。 工具和复现方法见 evals/README.md;标注规范见 evals/gold/GUIDELINES.md。

1. 结论

指标 目标(TV1) 结果
标注类实质性条款召回(★ / * / 斜体下划线) ≥ 99% 正式清单 99.4%,含待确认区 99.7%(346/347) ✓
写明无效类召回 ≥ 90% 正式清单 77.0%,含待确认区 85.4%(223/261) ✗
进入正式清单的实质性条款准确率 ≥ 95% 87.8%(811/924) ✗
  • 标注类达标:规则兜底起了作用。唯一漏掉的一条,是 S07 那句既说明标注方式、又带 * 号的长句。

  • 另外两项不达标,原因都在规则,不在模型:

    • 写明无效类:表格项靠表后的说明定性,「拒绝接收」这类写法没认出来。
    • 准确率:合并清单项时,没通过校验的条目被并进了正式条目。
  • 其他四类:

    类别 召回 准确率 主要问题
    资格条件 98.9% 38.4% 模型多抽
    评分项 93.8%(含待确认 99.5%) 100%
    日期与递交 100% 73.7%
    技术参数(抽样页) 91.1% 98.6% 召回差在一种静默丢失:分块输出接近上限时,模型提前收尾
  • 项目信息:12 个字段里 8 个全对。eval_method 只对 3/10,sme_only 只对 1/10,都是规则问题(§3.6)。

  • 成本:10 份文件全部任务,输入 386 万 token,输出 76 万 token,约 13.8 元(高峰价,未计缓存命中),平均每份约 1.4 元。tech-validation §4.3 推算的是 0.6~1.0 元,实测偏高,主要多在 S03、S06 这两份长文件的技术参数输出。D2 定额度时按实测值算。

2. 方法

  • 标注集:evals/gold/S01.json~S10.json,共 1,829 个单元(其中 76 个是裁定后补的,见下文)。
    • 每份文件由一个子代理按 GUIDELINES.md 标注。子代理只看文字层(sentences.txt),不看模型输出。
    • 定位用「页码 + 原文片段」,切句规则变了也能用。
    • 五类清单和项目信息全文标注。技术参数量太大,每份在技术要求章里等距抽 6 页,这 6 页上全标。
    • 目前是 AI 标注、AI 复核,没有人工复核(reviewed: false)。
  • 口径统一:标完后发现各份的处理不一致,统一了三条:句子本身带标注的一律必标;章节标题带 ★ 的继承暂记可选;sme_only 原文没写明的改为 null(GUIDELINES §4)。
  • 打分(evals/score.py):
    • 召回:有对应类别的清单项,出处句子和标注的句子有交集,就算召回。正式清单算一遍,加上待确认区再算一遍。
    • 准确率:正式清单里这一类的条目,出处和这一类的某条标注有交集,就算准确。
    • optional 的标注不进召回的分母,抽到了算对。
  • 裁定:正式清单里对不上标注的 543 条,逐条判断是标注漏了还是模型抽错了。
    • 实质性条款、资格条件、日期递交由三个子代理裁定,评分和技术参数我自己裁定。
    • 标注漏了的有 76 条,补成 optional + added_in_review:只修正准确率,不抬高召回率。
    • 抽错的按原因分类,结果在 §3。
  • S07 的预处理:S07 是 WPS 旧版 DOC,产品现在的转换流程直接转,正文全是「第第第第」(S1 §1.3 记录过,转换流程还没做这一步)。评测时在 prepare.py 里先转 DOCX、修正字符集。这是产品缺陷,要在转换流程里补上。

3. 问题和原因

按「改规则能解决」和「要改提示词」分开。规则只修真正的缺陷,不迁就模型的错误输出(SK11 的原则)。

3.1 合并清单项时,没通过校验的条目被并进正式条目(规则缺陷,影响最大)

  • 现象:merge_items 按首句合并各任务的结果,只跳过「同一任务」的待确认条目。别的任务的待确认条目照样把类别、重要性和出处并进正式条目。
  • 后果:实质性条款任务里依据校验没通过的条目,借技术参数、资格条件的正式条目进了正式清单,还被标成实质性。
    • 实质性条款多出来的 113 条里,89 条原文根本没写无效后果,大部分是这样来的。
    • S07 一份就有 93 条:普通技术参数被标成了「致命」。
  • 修复:合并时,待确认条目不给正式条目加类别、不提高重要性。它单独留在待确认区,或作为待确认的依据附在正式条目上。

3.2 写明无效类的漏抽(规则为主)

原因 条数 修复
表格项靠表后的说明定性:「上述第 1~6 项必须全部提供,否则投标无效」写在资格证明表、符合性审查表下面。结构识别只往上找上级条款,看不到它 33(S03、S05、S07、S08) 结构识别加一种:以「上述」开头、写明无效后果的说明,覆盖它上方同一张表的各项
后果写在另一条里:「有下列情形之一的,视为串通投标」下的各项,「串通投标的投标无效」写在别处 7 「视为串通投标」作为无效的上级标题。依据:87 号令,串通投标的投标无效
无效写法没认全:「其投标将被拒绝」「拒绝接收」「拒绝接受」「无资格参加」 7 INVALID 补这几种写法
符合性审查表各项只在表头写了「不通过的投标无效」,上级关系没识别出来 13 和第一行一起做:表格结构识别

3.3 资格条件多抽(提示词为主)

正式清单里 466 条资格条件,裁定后 287 条不是资格条件:

抽错的内容 条数
技术参数,尤其是写着「提供认证证书 / 检测报告」的参数行 112
投标文件的组成、编制、递交、签章、授权书 54
无效情形、串通情形 34
第六章格式范本里的声明函、承诺函正文(提示词已经禁止,模型照样抽) 27
价格扣除、联合体组成规则 18
合同履约、服务要求 11
程序说明 5
其他 26
  • 规律:句子里带「资格」「证明材料」「须提供」就收。
  • 修复:
    • 规则:结构识别补上章节层级(架构 §3.5 的 TODO)。第六章格式范本和第四章技术参数,不交给资格任务。这一项能去掉一半以上的错。
    • 提示词:qualification v4 把「技术参数里的证书要求」「投标文件组成和签章」「无效情形」写进「不要输出」,各给一个例子。

3.4 日期与递交多抽(提示词)

88 条对不上标注,裁定后 29 条是标注漏了(同一要求在另一处换了说法),59 条是模型抽错了:

  • 质疑投诉的程序和形式 23 条;
  • 运维服务时限、驻场人数 11 条,主要在 S09,模型看到时限、人数就当成了日期;
  • 开标记录 5 分钟内提疑义 7 条;
  • 中标后事项 5 条;
  • 其他 13 条。

修复:schedule v4 的「不要输出」补这几类。

3.5 技术参数漏抽(规则 + 提示词)

  • 静默丢失(规则):S03 一个分块有 259 句密集参数表。模型输出 97 条、7,757 个 token(上限 8,192)就自己收了尾,JSON 完整,没被判成截断,后面两页多的参数整段丢了(抽样页上 17 条)。
    • 修复:输出 token 超过上限的 90%,且最后一条证据离分块末尾还远,按截断处理、对半重跑。技术参数任务的分块也可以改小。
  • 描述性的实施、服务要求被当成背景(提示词):S05、S06、S08、S09、S10 共约 30 条,例如「须统一部署于市级政务云」「试运行不少于 1 个月」。
    • 修复:tech_param v4 写明:带「须」「不少于」「不得」的实施、服务要求要抽,项目背景和建设目标才不抽。

3.6 项目信息(规则)

  • eval_method 7/10 没答出来:「本项目采用综合评分法」写在第五章评标办法里,项目信息只看前 3 个分块。
    • 修复:项目信息任务再加一个分块,就是评标办法一章的开头。
  • sme_only 8/10、accept_imported 2/10 核对不通过:是 / 否字段的否定词表没有「非」「不专门」,「非专门面向中小企业」被判成证据和取值对不上。
    • 修复:否定词表补上。

3.7 其他

  • 评分项待确认区里 68% 是好结果(17/25):被拦下的原因是引文不是原文、分值找不到,都出在评分表被切碎的地方。这正好是已经排好的「表格按单元格切句」。
  • 重复条目:
    • 同一条标注被两条以上正式条目命中:实质性条款 115、资格条件 41、日期递交 35。
    • 主要原因是同一要求在公告、前附表、审查表里各出现一次,各抽一条。
    • 这本身不算错,但清单会显得重复。查标阶段要考虑按语义合并。

4. 修复清单(按收益排序)

# 改什么 类型 预计影响
F1 合并时待确认条目不给正式条目加类别、提重要性(§3.1) 规则 实质性条款准确率 87.8% → 95% 以上
F2 结构识别:「上述……否则无效」往上覆盖表格各项;「视为串通投标」算无效标题;INVALID 补写法(§3.2) 规则 写明无效类召回 85% → 95% 左右
F3 静默提前收尾按截断处理、对半重跑(§3.5) 规则 技术参数召回,S03 这类长表
F4 章节层级:第六章格式、第四章参数不交给资格任务(§3.3) 规则 资格条件准确率
F5 qualification v4、schedule v4、tech_param v4 的「只找 / 不要输出」(§3.3–3.5) 提示词 资格、日期准确率,技术参数召回
F6 项目信息加评标办法分块;是 / 否字段否定词补「非」(§3.6) 规则 eval_method、sme_only
F7 转换流程补 WPS 旧版 DOC 预处理(§2) 规则 S07 这类文件能用
F8 表格按单元格切句(已排期) 规则 评分项、技术参数的待确认

5. 口径问题(已定,见 decisions.md Q1–Q4)

标注时遇到、规范里没定的,影响产品行为,需要拍板:

  1. ★ 标在整节标题上(S01「三、★商务要求」并写明商务条款全部是实质性、负偏离无效;S07「★售后」;S10「★(一)技术要求」「★(二)商务要求」):节里不带 ★ 的各句算不算实质性条款?
    • 现在的流水线只认标题这一句,标注集暂把节里的句子记为可选。
  2. ★ 没写无效后果(S02):文件只说「★ 为核心技术参数」,评分表里 ★ 不满足只扣 4 分。
    • 现在一律按实质性处理,用户会看到「致命」,实际只是扣分。
  3. 「必须 / 应」都是实质性要求(S07 第 18 页的声明):逐句标出不现实。
    • 建议只在文件层面提示「本文件声明含『必须』『应』字样的要求均为实质性要求」,不逐句抽。
  4. 资格条件是否一律带「无效」类别:政府采购里资格审查不合格就是投标无效,87 号令第六十三条有规定。
    • 一律带上的话,§3.2 第一行那 33 条漏抽自然解决。
    • 但写明无效类的口径会从「文件写明」变成「法规规定」,要和「双层口径」一并考虑。

6. 没覆盖的

  • 标注集没有人工复核。
    • 1,829 个单元是 AI 标的;裁定时发现,各份文件之间对「授权书算不算资格」「质疑截止算不算日期」的处理仍有差异。
    • 建议先人工抽查实质性条款(S03、S06 最难),再把 reviewed 改成 true。
  • 样本缺口没变:扫描件、补遗、招标投标体系、配套投标文件。
  • 原句高亮准确率(FR-M2-06)不在本次范围,等表格按单元格切句后再验。

7. 修复后(fix3,2026-11-03)

F1–F8 全部实现,四个口径按建议执行(决策 Q1–Q4)。改完先请 Fable 当顾问审读(§7.3),改了它指出的问题,再跑两轮。

7.1 结果

指标 目标 修复前(base) 修复后(fix3)
标注类实质性条款召回(含待确认区) ≥ 99% 99.7% 99.4% ✓
写明无效类召回(含待确认区) ≥ 90% 85.4% 98.1% ✓(正式清单 84.7%)
实质性条款准确率(正式清单) ≥ 95% 87.8% 98.4% ✓
资格条件 召回 / 准确率 98.9% / 38.4% 97.7% / 90.0%
评分项 召回 / 准确率 93.8% / 100% 97.4% / 100%
日期与递交 召回 / 准确率 100% / 73.7% 95.6% / 99.3%
技术参数(抽样页) 召回 / 准确率 91.1% / 98.6% 98.4% / 98.8%
项目信息:评标方法 / 最高限价 / 是否专门面向中小企业 3 / 9 / 1(共 10 份) 9 / 10 / 7
每份文件的成本(Flash 高峰价) 约 1.4 元 约 1.2 元(按章跳过,输入少了 27%)
  • 口径:两次的标注集不完全相同。修复后按 Q1、Q2 改了口径(S01 节内 12 条改必标,S02 的 11 条 ★ 改可选),技术参数的 S07、S09 在新分页上重标,两轮裁定共补了 117 个可选单元。召回率的分母基本没变(597 → 610)。
  • 裁定:准确率都是裁定过的,正式清单里对不上标注的条目逐条判断过,方法同 §2。

7.2 改了什么

# 改动 位置
F1 合并时,待确认条目不再给正式条目加类别、提重要性;没通过的类别记在正式条目的 ai_values.pending_categories 里,不丢 extract.merge_items、add_pending_categories
F2 表后往回指的说明(「上述……否则投标无效」)覆盖上方的编号条目和表格行;「视为串通投标」算无效依据;INVALID 补「被拒绝」「拒绝接收」「投标文件无效」「不实质性响应」等写法;规则兜底也认表后说明 structure.trailing_notes、extract.INVALID
F3 输出用到上限的 92% 以上按截断处理、对半重跑;拆到底时采用已有输出 ai/providers/base.near_limit
F4 章识别(公告、须知、合同、采购需求、评审、格式……),资格、日期、参数、评分任务跳过不相干的章;章认不可靠时不跳过 structure.chapters、extract.SKIP_CHAPTERS
F5 提示词 substantive v5、qualification v4、schedule v4、tech_param v4;规则兜底:格式范本正文(「我单位……」)、列表引导句和整表概括句不收 prompts/、extract.TEMPLATE、BLANKET
F6 项目信息多看写着「本项目采用综合评分法」的那一块;是 / 否字段否定词补「非」「不专门」 extract.EVAL_METHOD、NEGATIVE
F7 WPS 旧版 DOC:直接修正 DOC 字体表里中文字体的字符集,不用先转 DOCX convert.fix_wps_doc_charset
F8 有框线的表格按单元格切句(切句 s3-v4),竖排窄列、两栏表格不再串行 text_layer._fragments
Q1 ★ 节标题下的条款继承实质性 structure.star_sections
Q2 ★ 被定义成计分项时降为「重要」,条件从严 extract.star_scored
Q3 「必须 / 应」声明记成 keyword 标注规则 extract.marking_notes、checklist.service.merge
Q4 政府采购项目的资格条件带「无效」类别,依据记 statute extract._qualification

7.3 顾问审读(Fable)

请 Fable 只读审了第一版修复,确定的问题 7 条,都已改正:

  1. ★ 定义句的降级会误伤真正的废标 ★:改成要有计分证据,而且全文没有带 ★ 的后果写法;
  2. 章识别会被目录、正文里的引用带偏:排除编号条目,同样长取靠后的序列,不可靠时不跳过;
  3. F1 第一版把待确认条目直接丢了:改成记在 pending_categories;
  4. Q2 文件里实质性任务仍标致命:改为按重要性规则定级;
  5. 表后说明会把标注说明、否定句当成无效依据:排除这两种写法;
  6. 参数行带 ★ 编号被当成节标题:要求 ★ 紧挨编号,标题短、不带标点和数字;
  7. 接近上限拆到底时丢弃完整输出:改为采用已有输出。

推测性的几条也采纳了:合同章里的「拒绝接受」不算无效依据,引导句过滤只针对冒号结尾或很短的句子,F7 收紧字体记录长度的检查。

7.4 还剩的问题

  • 写明无效类正式清单召回只有 84.7%:大部分在待确认区(规则兜底或依据校验没过),用户能看到,但要多点一下。主要是符合性审查表各项(表头写「任何一项不符合即无效」,在表格上方),以及串通情形。
  • 待确认区里只有 62% 是好结果(127/205):规则兜底和 pending_categories 带进来的噪音偏多。查标阶段要看待确认区的处理体验再定要不要收紧。
  • 资格条件准确率 90%:剩下的错误主要是「本项目不接受进口产品 / 分包」被当成资格条件,以及联合体、中小企业政策条款。
  • 项目信息:accept_imported、sme_only 各 7/10,多数是模型答「有歧义」或没核对通过。
  • ★ 节里的商务条款(S01 付款方式、履约保证金):规则兜底不对继承来的句子逐句生成待确认,模型没抽到就漏了。
  • 标注集没有人工复核,口径同 §6。