diff --git a/research-wiki/findings/2026-07-15-question-gen-v2-diagnosis-and-strategy.md b/research-wiki/findings/2026-07-15-question-gen-v2-diagnosis-and-strategy.md new file mode 100644 index 0000000..9979166 --- /dev/null +++ b/research-wiki/findings/2026-07-15-question-gen-v2-diagnosis-and-strategy.md @@ -0,0 +1,74 @@ +# 出题质量 v2 诊断与重构策略:Phase A 为何不够、四层病灶、锁定方向 + +- **日期**: 2026-07-15 +- **触发**: Phase A(grounded selector)落地并生成 30 道 AR 题后,Claude 三 agent + Codex 独立质量抽检均判"未真正过关";遂精读已下载 6 篇论文,定位根因并锁定 v2 重构方向。 +- **前序**: [2026-07-14-ar30-too-easy-analysis.md](96.7% 太简单诊断)、[2026-07-14-hard-distractor-literature.md](首轮文献调研)、[2026-07-14-grounded-question-gen-phaseA-design.md](Phase A 设计)。 + +## 一、质量抽检结论:Phase A 部分奏效,但没解决真问题 + +对 Phase A 生成的 12 道新题 + 8 道旧 baseline 做了两次独立抽检: + +| | Claude 三 agent | Codex(独立) | +|---|---|---| +| 负空间干扰项 | 基本消灭(12 道仅 1 处) | 减少但 grounding **不可审计** | +| 仍可 shortcut | 4/12 | **8/12** | +| 严格 grounded | 多数 | **仅 1/12** | +| 双正解高风险 | 3 处 | **4/12** | + +机制层证据:干扰项视觉分落 [0.05,0.35] 甜区 90%——**但这是 selector 用自己的 VLM 给自己打分(循环自证)**,Codex 一针见血:"视觉可信分包装过的、不可审计的近似答案"。 + +## 二、四层病灶(根因) + +| 层 | 病 | 证据 | +|----|----|----| +| **① grounding 来源** | 用**同一个 VLM 生成+打分**,且是"生成式 judge 打分"而非跨模态度量 → 循环自证、不可审计 | 抽检;GroundAttack 对照 | +| **② 题型结构** | **1-vs-3 单共识 + 自由编辑**天然可被:逐槽多数投票、最模糊/子串项获胜(A⊃B)、最长项获胜 | 抽检逐题 | +| **③ 歧义控制** | Phase A **松绑了 multi_true**——方向反了,放进更多近双正解 | 抽检 4 道双正解 | +| **④ 对抗信号位置** | 只做后置过滤(Phase B);过滤天生分不清"难"和"歧义",且产量靠反复补生成 | AFLite 自认局限 | + +## 三、文献回挖(6 篇,对症三缺口) + +### GroundAttack(grounding 的正解 + 关键纠偏) +- **三个独立冻结模型**:Qwen2.5VL 描述 / DeepSeek-V3(纯文本 LLM)生成候选 / **SigLIP(CLIP) 打分**。生成候选的模型**看不到视频**,结构上无法自评。 +- **打分是跨模态 embedding 相似度**(候选文本嵌入 vs 真实帧视觉嵌入的 cos),**不是 VLM 生成一个分**。Clustering+CLIP:K-means 聚类 → 每簇取与真实帧 argmax。 +- **纠偏**:只把自评 VLM 换成第二个 VLM(MiniMax-M3)只解决"同模型循环",**仍不是 GroundAttack 机制**(那是 embedding 度量)。且 bge 是纯文本、算不了跨模态,跨模态必须 CLIP/SigLIP。 +- GroundAttack 独立验证了"grounded",**没独立验证"wrong"**——这是它的短板,正好留给 MiniMax-M3 补。 + +### TempCompass / VITATECS / Vinoground(题型 + 歧义) +- **放弃 1-vs-3,改对称 1-vs-1 对比对**:VITATECS 五条约束(禁蕴含=杀子串、等信息量=杀最长项、只改单维);Vinoground **正负选项同词不同序**(bag-of-words 相同 → 长度/具体度线索结构上不存在)+ **双向 AND 评分**(问 A 问 B 都对才算,杜绝蒙)。 +- **text-only 盲答过滤**:Vinoground 0 帧探针 / VITATECS NLI 蕴含过滤——去视频只喂选项,高于随机就剔。 +- **歧义靠收紧不靠松绑**:全用"人在环 + 一致性 κ + 高精度过滤器(宁杀错勿放歧义)"。VITATECS 原话"更在乎 precision 而非 recall"。 +- 警钟:随机换词/名词替换干扰项极易被解(74.5–90.3%),动作反事实必须落在**动词/事件结构** + 等信息量 + 禁蕴含。 + +### AFLite / AdVQA(对抗信号位置) +- AFLite 作者**自认**:模型化过滤**分不清"题难"和"题烂/歧义"**(过滤后人类正确率反降)。我们的作弊者门是其单模型无集成弱化版,**必然继承并放大盲点**。 +- AFLite 不解决产量,靠超大池剔剩 1/3 糊弄;无补生成。 +- AdVQA 正解:**对抗前移到生成端**(出题当下让活模型试答)+ **独立于求解器的多裁判答案一致性门**(10 人,<6 confident 或无共识→剔)。自动对抗(无一致性校验)会制造歧义/标签漂移——同我们盲点。 + +## 四、两个把方案串起来的洞察 + +1. **Phase B 翻转门 = Vinoground 双向对比**:机制对,但**用错层**——应把"对称 before/after 对"做成**生成格式**,而非先生成 1-vs-3 再事后翻转检验。 +2. **MiniMax-M3 定位不是 grounding scorer,是独立"错误性/歧义核验器"**:补 GroundAttack 缺的"wrong"验证 + 堵"歧义当难度"盲点。 + +## 五、锁定的 v2 重构方向(用户已拍板:三个都选治本重构) + +| 岔路 | 决定 | +|------|------| +| **题型** | **全面转对称 1-vs-1 对比对**(改 4 选项契约,评测/训练侧跟着动) | +| **grounding** | **引入独立 CLIP/SigLIP 依赖**(跨模态 embedding 相似度,最贴 GroundAttack 原意) | +| **对抗位置** | **对抗信号前移到生成端**(作弊者门降为第二道网;主信号生成时产生) | + +目标架构(待 brainstorming 细化): +``` +生成: 出"正解 + 单维反事实"对称对(等信息量/禁蕴含/尽量同词不同序) +grounding: 独立 CLIP/SigLIP 对真实帧算相似度选负项(不是 VLM 自评) +歧义门: MiniMax-M3 独立核验"确实错、非双正解" + NLI 禁蕴含 + text-only 盲答过滤(收紧) +对抗: 主信号前移生成端; 作弊者门 = 第二道网; 双向 AND 评分 +``` + +**下一步**:brainstorming 定 question-gen v2 设计(重点解决:对比对如何进 inference/eval/training 的 4 选项契约、CLIP 适配器如何装配、生成端对抗的反馈环怎么设计、Phase A/B 既有代码如何取舍)→ Codex 审 → writing-plans → 实现。 + +## 相关 +- 论文:`reference/papers-distractor-gen/`(GroundAttack/TempCompass/VITATECS/Vinoground/AFLite/AdVQA) +- 现有实现:`app/question_gen/distractor_selector.py`(VLM 自评,待换 CLIP)、`adversarial_filter.py`(Phase B 翻转门,待前移为生成格式) +- 独立 VLM:`.env` 的 `M3_VL_LLM_*`(MiniMax-M3,异于生成用的 qwen3.6-plus)