测试结果¶
本页用于跟踪 Context Type 1-5 的样本基准验证。
结果版本:2026 年 4 月 13 日
本次更新范围:
- Parklane 与 Kingsbrook 章节继续沿用当前最新发布重跑结果。
- Fairway Type 3 章节已按新重跑审计刷新(
debug/ui_01/run_20260413_003852_502094_4873242e__ui_01/)。
Context Type 定义¶
Type 1 — Contextual Tables(上下文表格)¶
独立辅助表(如 Glazing Schedule)提供补充数据,需要并入主条目表。当主表出现 GL-03 之类引用时,应自动补全对应辅助表整行信息。关联可能是显式 1:1,也可能是规则型(例如 if Fixed -> use this glass makeup)。
Type 2 — Contextual Text & General Notes(上下文文本与通用备注)¶
自由文本备注(钢化玻璃规则、性能指标、鸟类友好材料要求、结构设计标准)会对全部或部分条目施加规则。系统需要将其内化并应用到相关条目元数据。
Type 3 — Contextual Item Cards (style/legend)(样式/图例卡片)¶
图例类视觉卡片定义开启方式、类别、配置等。当清单写明 D1 = Style C 时,应根据图例补全其具体类别与开启方式等字段。
Type 4 — Item Cards with Variables(带变量的条目卡)¶
复杂图卡中,同一系统(如 V1/V2)在子项间可能存在不同宽高,且有时需要计算(如总高减窗台高)。输出应拆分为独立行(如 D1、D2)并给出正确计算尺寸。
Type 5 — Multi-label Item Cards(多标签条目卡)¶
一张图定义多个条目(如 W3A & W3B),共享几何但在 basis-of-design 或参数上不同。系统应正确拆分条目,并区分共享属性与差异属性。
样本覆盖矩阵¶
| 样本 | 文档中采用的最新运行 | 覆盖类型 | 状态 |
|---|---|---|---|
Parklane (CRPA-Park Lane T1.pdf) |
run_20260412_011036 |
Type 1、Type 2 | Active |
Kingsbrook (kingsbrook_takeOFF T2.pdf) |
run_20260412_010342 |
Type 1-5(广覆盖混合样本) | Active |
Fairway (VTT - Fairway T3.pdf) |
run_20260413_003852_502094_4873242e__ui_01 |
Type 3 | Active |
评估方法¶
Ground Truth(GT)¶
GT 文件是人工整理的基准真值,用于定义每个样本在行级与字段级上的期望输出,并作为回归评估的权威基线。
- 目录:
test/ground-truths/ - 示例:
gt__r01-02__parklane.json、gt__r01-05__kingsbrook.json - 对齐键:
row_id
GT 的定位
GT 是人工维护的评估基线,不是模型输出。当源文档、字段契约或单位规范发生变化时,应在同一变更窗口同步更新 GT,否则评分会失真。
归一化比较器架构¶
Cartex 的测试汇总默认使用 test/gates/phase_gate_report.py 中的归一化比较器。
评估流程:
- 读取实际输出
debug/run_*/<run_id>_rows.json与 GT 文件。 - 按
row_id对齐行。 - 应用样本级忽略规则,过滤 Kingsbrook 类版式中“遮挡区导致的非确定性伪行提取”问题(详见已知限制中的“遮挡行引发的提取伪行”)。
- 对所有公共行的所有字段执行“字段感知”的归一化比较。
- 聚合字段不匹配,生成行级与运行级指标。
字段归一化规则:
| 字段组 | 归一化匹配逻辑 |
|---|---|
| 通用文本字段 | 忽略大小写并折叠空白后比较 |
Width、Height |
先统一换算为英寸,再做数值比较 |
Rough Opening Measurements |
解析为 A x B 的英寸对并比较规范化结果 |
Quantity、Glass Layer |
提取整数语义并做数值比较 |
Frame Brand |
采用 token 包含/重叠匹配(如 Rehau 与 Starr Rehau) |
Glass Arrangement Configuration |
比较 panel 尺寸结构、panel 数量及 metal-panel 标记 |
Special Notes |
先提取语义事实,再按召回率/精确率阈值判定 |
报告口径
测试文档中的核心 KPI 采用归一化比较器。严格逐字比较可用于内部诊断,但不作为发布质量指标对外展示。
评分计算¶
设某次运行对齐后的公共行数为 common_rows,每行可比字段数为 F:
total_comparable_fields = common_rows * F
total_field_mismatches = 归一化后判定不匹配的字段比较次数
field_accuracy = (total_comparable_fields - total_field_mismatches) / total_comparable_fields
row_accuracy(row_i) = matched_fields(row_i) / F
Gate 指标:
row_completeness_pass:应用忽略规则后,missing_row_ids == []且extra_row_ids == []。no_high_conf_severe_errors_pass:不存在confidence >= 0.9且row_accuracy <= 0.4的行。
Type 1 + Type 2 基准(Parklane)¶
样本: CRPA-Park Lane T1.pdf
测试页: 1
模板: Glass Schedule
触发策略: auxiliary_table、text_rule、dimension_card
运行目录: debug/run_20260412_011036/
运行开关: High Accuracy Tables on,Monolithic off
当前结果摘要¶
| 指标 | 值 |
|---|---|
| 期望行数 / 实际行数 | 19 / 19 |
| 行完整性 gate | 通过 |
| 高置信严重错误 gate | 通过 |
| 字段准确率(归一化比较器) | 0.857143 |
| 归一化后剩余不匹配 | Glass Layer (19)、Glass Width (19) |
结果解读¶
- Type 1 行为正常(辅助表映射与行级补全有效)。
- Type 2 行为正常(文本规则可被应用到行级元数据)。
- 剩余不匹配聚焦于模板字段契约语义重叠(
Glass Layer与Glass Width),不是行丢失问题。
回归明细(归一化比较器,按 GT 对齐)¶
Glass Layer — 19 处不匹配¶
原因
玻璃厚度文本(1" IGU)被写入“层数”字段。当前行为受 CATO2 模板提供的字段规则契约影响,这些契约会注入到各专业策略指令中。现有模板源里,Glass Layer 与 Glass Width 使用了同一条逐字规则(Glass thickness if determinable),导致两个字段的指导语义出现一对一重叠与歧义。该问题正作为上游规则定义问题进行排查。
示例:
Glass Width — 19 处不匹配¶
原因
同一厚度 token 泄漏到 Glass Width,根因与字段契约注入一致:CATO2 提供的字段规则会直接注入专业策略提示,而 Glass Width 当前与 Glass Layer 共享同一条逐字规则(Glass thickness if determinable)。该上游规则重叠问题正在调查中。
示例:
Type 1-5 广覆盖基准(Kingsbrook)¶
样本: Pages from kingsbrook_takeOFF T2.pdf
测试页: 1-2
模板: Standard Takeoff
触发策略: auxiliary_table、text_rule、image_legend、dimension_card、multi_label
运行目录: debug/run_20260412_010342/
运行开关: High Accuracy Tables on,Monolithic off
当前结果摘要¶
| 指标 | 值 |
|---|---|
| 期望行数 / 实际行数(原始) | 50 / 51 |
| 期望行数 / 实际行数(样本抑制后) | 50 / 50 |
| 行完整性 gate | 通过 |
| 高置信严重错误 gate | 通过 |
| 字段准确率(归一化比较器) | 0.806 |
| 归一化后剩余不匹配 | Material (50)、Special Notes (47) |
已知“非确定性”提取问题¶
主清单底部被遮挡区域会在最后约 5 行触发伪行/幻觉提取。
- 该问题尚未修复。
- 本次 run 出现
W75B,但未来 run 中的伪行 ID 与值可能不同。 - 不应将其视为单一固定行 bug,而应视为遮挡区的不稳定提取现象。
回归明细(归一化比较器,按 GT 对齐)¶
Material — 50 处不匹配¶
原因
文档中的材质通常是“隐含信息”(通过产品族推断),不是显式文本。当前流程尚未稳定完成品牌到材质的隐式映射。
示例:
Special Notes — 47 处不匹配¶
原因
备注综合能覆盖大量事实,但常丢失关键约束条款。高频缺失真值事实包括 design_pressure、safety_glazing、air_leakage、head_height_rule 以及部分 u_factor。
示例:
W11B
实际: 1 3/4" Triple Glazed IGU ... Warm-edge spacer ...(已缩写)
真值: ... U-0.18 ... 最小窗头高度 7'-0" ... +/- 48 PSF 设计压力 ... 安全玻璃条款 ...
W13A
实际: 1 3/4" Triple Glazed IGU ...(已缩写)
真值: ... 包含 design pressure 与 safety glazing 条款 ...
Type 3 基准(Fairway)¶
样本: VTT - Fairway T3.pdf
测试页: 1
模板: Standard Takeoff
触发策略: text_rule、image_legend
运行目录: debug/ui_01/run_20260413_003852_502094_4873242e__ui_01/
运行开关: High Accuracy Tables on,Monolithic off
当前结果摘要¶
| 指标 | 值 |
|---|---|
| 期望行数 / 实际行数 | 21 / 21 |
| 行完整性 gate | 通过 |
| 高置信严重错误 gate | 通过 |
| 字段准确率(归一化比较器) | 0.948413 |
| 归一化后剩余不匹配 | Product Type (7)、Operability (3)、Frame Material (1)、Glass Type (1) |
结果解读¶
- 本次重跑中,Type 3 图例映射主链路整体稳定(行完整性通过,且无高置信严重错误)。
Special Notes在归一化语义比较下本次为全量通过。- 剩余问题主要集中在分类口径(
Product Type)与少量Operability行。
回归明细(归一化比较器,按 GT 对齐)¶
Product Type — 7 处不匹配¶
原因
部分窗口行的子类型提取覆盖不足。即使存在子类型证据,Product Type 仍会在部分行被留空。
示例:
Operability — 3 处不匹配¶
原因
图例中的少数门型样式在视觉与语义上较为接近,Gemini 在样式卡到开启方式标签映射时会出现歧义。D11 与 D12 是这类图例歧义的代表样例。
示例:
Frame Material — 1 处不匹配¶
原因
单行门型仍丢失显式框体材质。
示例:
Glass Type — 1 处不匹配¶
原因
单行输出了更宽的复合描述(double glazed insulated glass; Tempered glass),而 GT 仅保留 Tempered glass。
测试能力后续计划¶
Dissent-based confidence signal(计划中)¶
计划引入“异议信号”机制:当 Gemini 在提取时遇到弱证据、歧义或内部不一致,自动下调置信度。
预期收益:
- 在遮挡/低质量区域提升置信度校准
- 更清晰地区分“高置信错误”与“不确定提取”
- 提升人工审计的优先级排序效率