113 lines
7.5 KiB
Markdown
113 lines
7.5 KiB
Markdown
# Spec-3:出题管线 v2(失败机理靶向 + 逐题质量门)
|
||
|
||
- **日期**: 2026-07-11
|
||
- **状态**: 已批准(用户确认:双标签体系、轻量档全量 + 重量档 15% 抽检)
|
||
- **依据**: 三轮分析——`findings/2026-07-11-question-gen-calibration-analysis.md`(生成题缺陷与根因)、`findings/2026-07-11-benchmark-failure-taxonomy.md`(242 错题机理分类与 11 种题型规格)
|
||
- **系列**: Spec-1/2/3 三件套之一;Spec-1 修好的推理环境是本 spec 重量抽检的前置
|
||
|
||
## 1. 目标重定义
|
||
|
||
出题目标从"难度与 benchmark 一致"改为:**覆盖已证实的失败机理(M1-M5)+ 逐题质量门**。
|
||
|
||
| 决策 | 内容 |
|
||
|------|------|
|
||
| calibrate 降级 | 仅作观测性报表,不再是验收门 |
|
||
| 评分协议不变 | 标准四选一按字母判分;harness/推理侧零改动。题型规格中"附证据节点 id"等要求降级为**构造时验证材料**,存题目元数据供 diagnose 分析 |
|
||
| 双标签体系 | 主标签 `task_type`(Video-MME 12 类,进化循环 mini-batch/gate/skills/diagnose 零改动)+ 附加字段 `skill_target`(M1-M5/题族,仅用于出题配比、质检、覆盖率统计) |
|
||
| 质检两档 | 轻量四门全量逐题;重量档(盲 Agent 全树试答)15% 抽检 + 难度标签 |
|
||
|
||
## 2. 流水线架构
|
||
|
||
重构 `app/question_gen/synthesizer.py` + `tools/generate_questions.py` generate 子命令:
|
||
|
||
```mermaid
|
||
graph LR
|
||
S[采样器<br/>按题族选素材] --> G[生成器<br/>题族 prompt 模板<br/>双标签输出]
|
||
G --> P[确定性后处理<br/>shuffle+答案重映射<br/>指代黑名单<br/>verbatim 检测]
|
||
P --> Q{轻量四门 全量}
|
||
Q -->|拒| R[带拒因重出<br/>同 slot 最多 3 次]
|
||
R --> G
|
||
Q -->|过| H[重量抽检 15%<br/>盲 Agent 试答→difficulty_steps]
|
||
H --> W[入库 generated-v2]
|
||
```
|
||
|
||
### 2.1 五题族(11 种题型的落地归并)
|
||
|
||
每族一个采样器 + 一个 prompt 模板,题型(shape)作为模板参数:
|
||
|
||
| 题族 | 覆盖题型 | 采样约束 | 治什么 | 默认配比 |
|
||
|------|---------|---------|--------|---------|
|
||
| 检索族 | 证据埋深/反"不存在"、ASR 实体对齐、属性辨析 | 证据取自 entities/visible_entities/visible_text/长字幕单句;配镜像题(真不存在) | M1 负证据幻觉(最大杠杆) | 30% |
|
||
| 推理族 | 转述还原、NOTA 校准对 | 从字幕单句做一步语义变换(蕴含/虚拟语气/序数映射);NOTA 成对生成(半正解半陷阱) | M2 字面匹配 | 25% |
|
||
| 枚举族 | 多实例锚定、序数枚举、覆盖率权重 | **source_nodes ≥ 3 跨 L1**;同类事件 ≥2 次;首个表面匹配必须是错的 | M3 锚定/盘点 | 20% |
|
||
| 视觉族 | 状态演化多帧、实例消歧数字 | 证据仅在帧内、不在任何 card 文本;多时刻真实读数做干扰项 | M4 视觉验证 | 15% |
|
||
| 空间族 | 参照系空间 | spatial_layout 字段 + 时间锚;摄像机/被摄者双参照系 | T5 空间 | 10% |
|
||
|
||
### 2.2 确定性后处理(零 LLM 成本,通用硬约束)
|
||
|
||
1. **选项 shuffle** + 答案字母重映射(修复 v1 答案 57% 在 A 的偏斜)
|
||
2. **指代黑名单**(正则):禁 this segment / this frame / this clip / the current frame / the scene / frame summary 等;题干必须含 L1 time_range 时间锚("between 10:52 and 21:44"式)或全局限定语("in the entire video")
|
||
3. **verbatim 检测**:题干+正确项 vs 源节点文本的 n-gram 重合门(检索族豁免正确项检测——其证据本来就在文本,见 2.3)
|
||
4. **出题禁区**:不出 T1 类素材题(瞬时动作/记分牌时序/无对白因果);不复刻 T7 噪声模式(选项重复、口径含糊的计数边界)
|
||
|
||
### 2.3 轻量四门(全量逐题,约 4 次单轮 LLM 调用/题)
|
||
|
||
| 门 | 判定 | 杀什么 |
|
||
|----|------|--------|
|
||
| 键验证 | 拿出题依据(source_nodes 原文)判标注答案是否成立 | 标注幻觉(v1 CP 组 2 例无出处) |
|
||
| 盲答测试 | 不给任何视频信息裸答,答对即拒 | 常识可解题、干扰项秒排题 |
|
||
| 多真测试 | 拿全树素材判是否 >1 选项可为真 | 歧义多解题(v1 SR 组 5/8) |
|
||
| 泄漏测试 | **按题族条件化**(见下) | 一跳检索捷径 |
|
||
|
||
**泄漏门的题族捷径画像**("信息不对称化"的落地):
|
||
|
||
| 题族 | 捷径画像(该捷径必须失败才放行) |
|
||
|------|--------------------------------|
|
||
| 检索族 | top-5 语义搜索片段裸答必须失败(全树 card 文本裸答**允许**成功——考的是检索深度) |
|
||
| 视觉族 | 全树 card 文本裸答必须失败(逼 observe_frame) |
|
||
| 推理/枚举/空间族 | 锚点节点文本裸答必须失败(需变换/跨节点) |
|
||
|
||
### 2.4 重出循环与重量抽检
|
||
|
||
- 拒题 → 拒因回填到生成 prompt → 同 slot 重出,最多 3 次;3 次仍拒则该 slot 换素材重采样
|
||
- 通过四门的题按 15% 抽样跑盲 Agent 全树试答(复用 Spec-1 修复后的推理管线):验证真实可答性,产出 `difficulty_steps` 难度标签
|
||
|
||
## 3. 数据与版本
|
||
|
||
| 项 | 决策 |
|
||
|----|------|
|
||
| 旧 240 题 | 原地保留 `store/questions/generated/`(infer_gen240 run 引用它,保可复现) |
|
||
| 新题集 | `store/questions/generated-v2/`,workspace 以 `--questions generated-v2` 指向 |
|
||
| 题目元数据新增 | `skill_target`、`source_nodes`(已有)、`gate_report`(四门判定)、`difficulty_steps`(抽检题) |
|
||
| 规模 | 默认 240 题;**task_type 均匀(20/类)为硬约束**(进化循环分层需要),**族配比为软目标(±5%)**——采样器按"族 × task_type 兼容矩阵"(如枚举族→Counting/Temporal 类)分配每题的双标签;YAML 可扫 |
|
||
|
||
## 4. 配置归属(D7 规则)
|
||
|
||
- **科研配置**(per-experiment YAML):族配比、门阈值(n-gram 窗口、多真判定温度)、抽检率、重出上限、规模
|
||
- **工程配置**(`.env`):LLM/VLM 端点、超时、熔断——沿用现有
|
||
|
||
## 5. 运行时数据
|
||
|
||
每题的门判定记录(哪门拒、拒因文本、重出轮次、最终状态)落 SQLite。表结构在设计批准后走 `structured-logging` skill 单独设计(本 spec 只约定:记录必须逐题可追溯、可聚合出各门拦截率报表)。
|
||
|
||
## 6. 不做什么(YAGNI)
|
||
|
||
- 不改判分协议、不改 harness/推理侧、不改 mini-batch/gate/diagnose 的 task_type 分组
|
||
- 不做对抗式加难迭代(留到自进化循环跑通后,须固定出题对手版本)
|
||
- 不做 T1 树增强(用户已确认本次不做)
|
||
- 不引入树外信息源(原始视频重新抽帧出题)——视觉族用现有帧缓存即可
|
||
|
||
## 7. 验证
|
||
|
||
1. Smoke:12 个视频 × 每族 2-3 题,验证四门拦截率、重出收敛(≤3 轮)、双标签与元数据完整性
|
||
2. 全量:生成 240 题 → `bash scripts/infer_generated.sh`(指向 generated-v2)→ calibrate 报表观测
|
||
3. 回归断言:新题集答案位置分布均匀(卡方检验);指代黑名单零命中;泄漏门画像全部通过
|
||
4. 单测:后处理层纯函数(shuffle 重映射、黑名单、n-gram 门)
|
||
|
||
## 8. 被否方案
|
||
|
||
- **纯 prompt 补丁**:第二轮设计层分析证明 7 类缺陷中 5 类会换形复发(信息闭环是结构问题)
|
||
- **失败机理作为主标签**:进化循环全链改造,收益不明确;先以元数据形式观察其价值
|
||
- **重量档全量**:240 题 ≈ 一次完整推理实验(4-5 小时),轻量四门已拦截三轮发现的全部缺陷类型
|
||
- **难度一致性作为验收门**:三轮分析证明分数一致性是坏代理指标(假难/假易双向失真)
|