Files
Video-Tree-TRM5/research-wiki/findings/2026-07-14-ar30-too-easy-analysis.md
T

16 KiB
Raw Blame History

AR30 靶向题"太简单"根因分析(baseline 29/30 = 96.7%

  • 日期: 2026-07-14
  • 目的: 30 道用 ActionRecognitionStrategy 6 个 SubPattern 靶向生成的 Action Recognition 题,本意复现 Agent 在 Video-MME AR 上的 6 种失败子模式(原生 AR 正确率约 65%),但 baseline 正确率 96.7%。逐题核实为何失败模式未被触发。
  • 数据: scratchpad/ar30_baseline_analysis.json30 题 × question/options/reasoning+ store/questions/generated-ar30/accepted_questions.jsonsource_nodes/difficulty
  • 对照: [2026-07-11-benchmark-failure-taxonomy.md]M1M5 失败机理)
  • 代码: app/question_gen/strategy_action_recognition.py6 SubPattern)、store/prompts/question_gen/action_recognition.md(出题 prompt)、store/prompts/question_gen/gate_multi_true.md(去歧义门)

一、结论摘要

单一系统性根因:干扰项是"负空间"(视频中根本不存在的事件),而非"易混正例"(真实发生过、需辨析的近似动作)。 Agent 的工具箱(search_similar×3 → 判定不存在)恰好擅长确认"不存在",于是每道题坍缩成一次检索存在性核对——"哪个选项能搜到证据,其余三个搜不到就排除"——而非动作理解。这与靶向的失败模式(M1 负证据幻觉、M3 多实例锚定、M4 视觉粒度)正好相反:靶向想让 Agent 的坏启发式(搜不到就断言不存在)害它出错,但因为干扰项真的不存在,这个坏启发式反而变成了对的。

量化证据 数值
reasoning 通过"干扰项无证据/未出现"排除法定位答案 24 / 3080%
时序题直接读取树内显式时间戳排序(无需时序推理) 9 / 30
source_nodes = 6(单个小 L2 子树即含全部答案) 13 / 30
唯一答错题 [29] 的失败原因 树内证据(T1),非靶向失败模式
SubPattern 归属是否持久化到 accepted_questions (诊断盲区,见 §五)

二、根因一:干扰项质量——"负空间"干扰项使排除法万能

出题 prompt 的 distractor_rules 与全局约束共同把干扰项推向"视频中不存在的动作"。典型 reasoning 结构是"正解有证据 + 其余三项全网搜不到":

正解证据 干扰项性质 reasoning 片段
[2] 0kRsiSdDFYg 举起/黑盒/PS5 三帧确认 跨域捏造 "B: 全视频搜索无任何 bicycle kick 或 goalkeeper hug 场景,排除"
[22] 068rdc75mHM (John Bell) 三重确认 完全无关物件 "B: coffee cup/city skyline/satellite dishes 完全未出现…C: dice/cups with lights 无任何节点提及"
[0] 0ncLRRLvdfk (金融) 3 个 L1 一致 异域动作(写代码/电视直播) "D: 全视频无任何软件编码或自动交易算法相关内容"
[9] 5WIdIs3A9Ok (美洲豹) 凯门鳄/牛尸独立证据 未发生的捕食 "B:无任何伏击鹿或牧场睡觉的证据。D:未发现跟踪水豚或猎杀活牛的证据"
[23] 4IenX7OHumk 鸟起飞/雄狮穿行两帧 未发生 "C: 鸟类俯冲向水坑和狮子爬树在整个视频中均无任何证据"

干扰项区分度过大:Agent 无需理解"发生了什么动作",只需确认正解选项能被检索命中、其余三项检索空返回。Video-MME 原生题之所以难,是错误选项都是"可能发生/部分发生"的近似物,逼真辨析;而这里错误选项是可证伪的缺席,search_similar 三次空返回即高置信排除。

门控是"负空间干扰项"的制度性推手(smoking gun

gate_multi_true.md"≥2 个选项 plausibly correct → verdict fail"。任何把干扰项做成"真实近似正例"的题,天然会让≥2 选项都合理,被此门直接毙掉。出题 prompt(action_recognition.md)末条同样写死 "Do NOT write questions where multiple options could reasonably be correct"。二者联合导致:只有"1 个清晰正解 + 3 个明显缺席"的安全题能通过门控,恰好把复现 M2/M3/M4 所需的易混题全部过滤掉。去歧义门在为"合法"服务时,杀死了"有用"。

三、根因二:证据集中度——答案在树摘要里,不需要跨段/多帧推理

  • 时序题的正确顺序被写成树内时间戳,排序退化为数值比大小。 [15] "指地图(437s)→锤木板(478s)→行军(519s)→骑兵(539s),时间戳完全匹配"[18] "sandwich(2504s)→chocolate(2667s)→soda(2691s)→eat(2761s)"[25] "1576s→1747s→1897s→2046s 升序"。设计意图是"打乱时序即答错",但正确时序在 L2/L3 摘要里以时间戳明写,Agent 读出来排序即可,时序推理环节被树旁路。9/30 属此类。
  • 跨段题的合并已由 L1 摘要代劳。 cross_segment_entity_tracking 采样在 L1sampling_level_override=1),而 L1 摘要本身就是跨段聚合后的高层描述。[0] "三个 L1 节点一致支持"、5 步作答——树替 Agent 完成了跨段合并,cross_segment 的"漏读某段"失败无从发生。
  • 13/30 题 source_nodes=6(单个带帧的小 L2 子树),正解在头 1–2 次 view_node 即到手。步数中位数≈11 的高步数([26]=20、[28]=18、[23]=15)几乎全花在反复检索确认干扰项缺席这种冗余动作上,而非构建正解——空转仍稳落正确。

四、6 个 SubPattern 逐一复现失败分析

SubPattern 靶向失败 为何未触发(题例)
premature_evidence_anchoring 找到首个证据就停搜 干扰项是缺席事件而非"前段的强局部匹配"。[8] 赛果题正解=官方成绩表,"首段诱饵"根本不存在,无从过早锚定
temporal_reasoning_failure 排错序/数错第 N 次 正确顺序=树内时间戳,读数即排序([15][16][18][24][25]);干扰项是时序全反的排列,一眼可判
semantic_rigidity 要求字面匹配拒同义词 同义改写太浅、且干扰项仍是缺席动作。[5] 吸管"缠绕"直接命中字幕,[4] 释义题靠排除异域项即中
fine_grained_visual_action 分不清"怎么做" 干扰项换成了缺席的执行方式而非"同动词的另一种真实做法"。[19] 墨镜"摘下 vs 推头顶/放鼻梁"——后两者视频无证据,非真实近似;[21][28] 同理
cross_segment_entity_tracking 无法跨段合并实体 L1 摘要已聚合(§三);干扰项混入的是"未发生动作"而非"另一实体的真实动作"[3][14][22] 排除法即中
evidence_gap_confabulation 缺证据时编造因果 反被利用:正解是"仅旁白暗示/描述未展示"的诚实项,干扰项是缺席因果链,Agent 排除缺席项即选中诚实项。[20][12] 均一次命中

共性:每个 distractor_rules 名义上要求"近似/合理但错",但都留了"未出现/缺乏证据支持"的口子(如 fine_grained 的"确保都是合理执行方式"未被 VLM 落实),VLM 一律取"捏造缺席动作"这条最省力且最不会触发 multi_true 门的路径。

五、VLM + 门控的系统性偏差

VLM 面对采样素材被要求写 3 个错项,最省力且最安全的路径是编造素材里没有的动作:保证"错"、gate_key_verify 不会误判正解、且绝不触发 multi_true 门。反之,"错但有部分真实证据支撑"的近似干扰项需要 VLM 在素材里挖真实近似事件(更难),还有被 multi_true 门判歧义毙掉的风险。于是出题目标函数(过门率最大化)与靶向目标(复现失败模式)直接冲突:门控奖励"唯一清晰答案"=奖励"容易"。

附带缺陷:build_prompt_context 记录了 sub_pattern,但 accepted_questions.json 未持久化该字段(§一表);不过 run_store 的 DBlogs/question_gen_ar30.db)落了 sub_pattern 列,可据此做真实归属核对(见 §5.5)——产物 JSON 未落盘 sub_pattern 仍是可观测性盲区,需从 DB 补齐到 JSON

5.5 归属核对:题目内容 vs 声称的 SubPattern(用 DB 真实归属)

前节靠题面反推有偏差。改用 logs/question_gen_ar30.dbsub_pattern 列(真实归属)逐题核对接受题(30 道),发现近一半题目内容与其声称的失败结构脱节

SubPattern 接受/生成 过门率 靶向意图 题目实际内容 名副其实?
temporal_reasoning_failure 5/44 11% 排错序/定位第 N 次 5 道全是明确 "correct chronological order" 排序题 是(但顺序在时间戳里明写,故太简单)
cross_segment_entity_tracking 7/26 27% 无法跨段合并实体 6/7 确跨段追踪同一实体(替补球员、white skirt、jaguar 跨段对比) 基本是(但 L1 摘要已聚合)
fine_grained_visual_action 4/8 50% 分不清"怎么做" 3/4 是 how/manner 细粒度(handle sunglasses、manipulate straws、cat's manner 匹配最好
evidence_gap_confabulation 3/31 10% 缺证据时编造因果 仅 1/3 真涉证据缺口(predation evidence),另 2 道泛序列题 ⚠️ 部分跑偏
premature_evidence_anchoring 5/34 15% 首个证据即停搜 几无一体现"前段诱饵→过早锚定"结构,全是普通结局/序列题 基本跑偏
semantic_rigidity 6/24 25% 字面匹配拒同义词 几无一是真正"同义改写 vs 字面原文"辨析,退化成通用 "which sequence/description accurate" 基本跑偏

结论:DB 忠实记录了每题"打算"针对哪个子模式,但 11 道(semantic_rigidity 6 + premature_anchoring 5)严重跑偏,另 2 道(evidence_gap)部分跑偏。

跑偏机制instruction 注入到 prompt 的 ## Special Focus: 段后,VLM 未贯彻特异的失败结构,回退到最省力的"哪个序列/描述准确"通用模板。尤其 semantic_rigidity(需"正解同义改写 + 干扰项字面原文语义错"这种精巧结构)被直接忽略。

佐证:过门率越是靠"易混"取胜的模式越低——temporal 11%、evidence_gap 10%、premature 15%,说明真正尝试做易混的题大量被 multi_true 门杀掉,能通过的都是退化后的安全题。这与 §二"负空间干扰项"是同一病的两面:过门率压力下,VLM 既把干扰项做成缺席事件,也把题型拉平成通用序列题,两头都丢特异性。

六、Action Items

A. 改 SubPatternapp/question_gen/strategy_action_recognition.py

  1. 全部 distractor_rules 增加硬约束:"每个干扰项必须对应视频中真实发生过的动作/实体,仅在时点、主体、执行方式或对象上与正解不同;严禁使用视频中不存在的动作作为干扰项。" 落实"负空间干扰项"禁令。
  2. temporaldistractor_rules 增加"正确顺序不得可由单一时间戳字段线性读出;采用同一 L2 段内、时间戳接近(<Δ 秒)的多个真实事件,迫使逐帧核对而非读数排序"。
  3. fine_grained:强制"4 选项为同一动词的 4 种真实执行方式(如顺/逆时针、单手/双手),其中≥2 种在视频不同片段真实出现过"。
  4. cross_segmentsampling_level_override 由 1 改回 2L2,避免 L1 摘要预聚合;distractor_rules 要求"强干扰项=只包含部分片段真实动作的合法子序列"。
  5. premature_anchoring:强制"前段必须存在一个与某干扰项字面吻合的真实局部匹配"(诱饵必须真实存在,当前是缺席)。
  6. 持久化 sub_pattern:在候选落盘时写入 accepted_questions(补 metadata.sub_pattern),供后续诊断按模式分层统计(DB 已有,需同步到产物 JSON)。 6b. 修复归属跑偏(semantic_rigidity / premature_anchoring:这两类 instruction 太抽象,VLM 回退成通用序列题(见 §5.5)。改法:instruction 内嵌 1-2 个"必须长这样"的具体题型模板 + few-shot 正例,并加一个"结构符合度"额外 gateextra_gates),校验题目是否含该模式的必要成分(如 semantic_rigidity 必须有一个字面复用素材原文的干扰项),不符则退回重生成。

B. 改出题管线 / 门控

  1. gate_multi_true 松绑为分级:区分"两个选项都完全正确"(应毙)与"两个选项都部分沾边、需辨析"(应留)。当前二元门是易混题的主要杀手,需改为"仅当≥2 选项完全满足题干时 fail"。
  2. action_recognition.md 删除/改写 "Do NOT write questions where multiple options could reasonably be correct" —— 改为"错误选项应是视频中真实发生、但在时点/主体/方式/对象上与正解不同的近似动作(near-miss),而非视频中不存在的动作"。
  3. 新增"负空间干扰项"检出门:对每个干扰项做一次 search_similar/树核实,若某题≥2 个干扰项在树中零命中 → 判定为"负空间安全题",退回重生成(把"能被排除法秒杀"变成显式失败信号)。
  4. 新增难度基线门(观测性):出题后用当前 baseline agent 试答,正确率>85% 的批次触发告警——把"太简单"从事后发现变成管线内的可观测指标。

七、独立审查修正(Codex,只读核实原始数据/代码/门控)

Codex 独立重数了 reasoning、查了 DB 拒绝原因、读了门控与管线代码,证实主病但修正三处夸大、补三处遗漏根因。整体可信度:诊断 7/10、action items 7/10。

被修正的原结论(本报告更新为以下)

原结论 修正
§一"80% 靠负证据排除"24/30 排除式 reasoning 约 23/30 成立;但纯"负空间"事件严格计只 18–21/30——原数把"错序/错主体/表格反证"也混入了负空间
§二 multi_true 是完整 smoking gun multi_true 确是首因拒绝最多的门(137 拒中约 63 次首因),但大量 multi_true='fail' 的实际原因是 "No source material provided",源于下方 gate 树错配 bug,而非"两真实近似选项都合理"——smoking gun 被此 bug 污染,不能全算门控之过
§5.5 evidence_gap "仅 1/3 贴合" 实为 2/3 贴合(#12 描述未展示、#20 展示 vs 旁白暗示均属 evidence gap),仅 #10 跑偏

遗漏的根因(新增,均已核实)

  1. gate 树错配 bug(真代码 bug,最高优先级)pipeline_v2.py retry 换视频后用 current_tree 采样/生成(370/391 行),但 run_gates(tree=tree,...) 仍传原始 tree(471 行)。换视频重试的题门控用错树验证→大量"无 source material"假拒绝,污染了 DB 拒绝原因统计。需先修此 bug 再重估门控归因。
  2. gate_key_verify 过宽:只要"文本或帧任一支持正解"即 pass,不校验错误选项是否 near-miss,故放行"1 正解+3 缺席动作"。
  3. OCR/静态文本泄漏未挡#1 gym visible_text、#8 最终成绩表、#26 board/Spanish labels 本质是读屏字非动作识别。

Action items 评估修正

  • 纯改 distractor_rules 文案不够(A1/A3 等):当前失败正是 VLM 不落实抽象规则,必须配"真实动作候选池"或结构 gate。
  • 松绑 multi_true 有风险:需把 rubric 精确为"错误选项可有局部证据,但在题干限定的主体/时点/方式/对象下必须为假",否则放进真歧义坏题。
  • A9 负空间检出门用 search_similar 成本高、误判多(同义/视觉细节/字幕缺漏会误判):更优是先从素材抽真实动作库存,再由库存组合 near-miss 干扰项(从源头杜绝负空间,而非事后检出)。
  • 新增更优改法:①先修 tree bug;②建"真实动作候选池"(实体/动作/时点/对象/方式)供 near-miss 构造;③per-pattern 结构验证器(semantic 必含"同义正解+字面陷阱"、premature 必含"前段真实诱饵");④AR 加 OCR/静态文本惩罚门;⑤"树可见性"难度评估——用完整树/去时间戳树/L2-only/frame-only 分别测,定位到底是视频理解难还是摘要泄漏。

相关文件

  • 6 SubPattern 定义:app/question_gen/strategy_action_recognition.py:26-212
  • 出题 promptstore/prompts/question_gen/action_recognition.md
  • 去歧义门(根因制度推手):store/prompts/question_gen/gate_multi_true.md
  • 数据:store/questions/generated-ar30/accepted_questions.jsonscratchpad/ar30_baseline_analysis.json
  • SubPattern 真实归属(DB):logs/question_gen_ar30.dbquestion_gen_itemssub_pattern(§5.5 核对依据)