Kaggle MAP:学生数学误区识别竞赛方案复盘

2874 字
14 分钟
Kaggle MAP:学生数学误区识别竞赛方案复盘

相关资源#

比赛在做什么#

MAP(Misconception Annotation Project)比赛的核心目标是:

  • 根据学生的数学作答与开放式解释文本,自动判断其答案正确性和潜在误解类型
  • 输出每个样本的 Top-3 候选标签(Category:Misconception
  • 使用 MAP@3 评估模型在前 3 个候选中的命中质量

这项任务的实际价值在于,帮助教师更高效地定位学生“看起来会做题、但概念理解有偏差”的关键问题,从而支持更有针对性的教学反馈。

通俗解释#

可以把它理解成一个“自动阅卷助教”:

  • 它不只看学生答案对不对,还会读学生写的“为什么这么做”
  • 然后判断解释是正确、存在明确误区,还是无法归入具体误区
  • 最终给出 3 个最可能的 Category:Misconception 标签

比如一道小数比较题,学生说“0.355 比 0.8 大,因为 355 比 8 大”。

  • 模型需要识别其把小数错误地按照整数思维比较
  • 如果正确标签排在第 1 个,得分最高
  • 排在第 2 或第 3 个也有分,但权重更低
  • 前 3 个都没命中则为 0

这就是 MAP@3 的直觉:猜中很重要,猜中的位置越靠前越好

MAP 比赛任务概览
MAP 比赛任务概览

我在项目中的主要工作#

  • 设计并实现多模型融合方案,组合 10 个大语言模型进行协同预测
  • 使用 LoRA + Classification Head + Focal Loss 完成 65 类监督微调,缓解类别长尾与难样本问题
  • 迭代提示词工程,将自然文本输入重构为结构化 XML,降低题干、作答与解释之间的语义歧义
  • 在强模型分支上进一步尝试 Tree-GRPO 风格的二阶段排序后训练,直接利用 MAP@3 Reward 优化 Top-3 决策
  • 设计融合基础概率、模型一致性和置信度的集成打分机制,提升最终 Top-3 预测稳定性

方法核心#

1) 多模型协同与模型多样性#

方案整合了 4 个自训练模型和 6 个公开模型,覆盖 Qwen、DeepSeek、Hunyuan 等不同模型系列,核心目的不是单纯增加模型数量,而是利用不同模型的 Error Diversity 降低单模型偏差。

例如,对同一个学生解释:

  • Qwen 可能更擅长识别数学语言中的显式逻辑错误
  • DeepSeek 可能对推理关系和数学语义更加敏感
  • 其他模型可能在少数类或边界样本上表现更稳定

当某一个模型错误时,只要其他模型的错误模式并不完全相同,最终集成层就有机会通过概率、一致性和置信度信号把正确标签重新推到 Top-3 前列。

因此,多模型方案的核心可以概括为:

Task Specialization + Model Diversity + Ensemble Calibration

2) 基础训练:LoRA + Classification Head + Focal Loss#

基础模型采用 Sequence Classification 结构:

结构化文本输入
LLM Backbone + LoRA
最终 Hidden State
Classification Head
Linear(hidden_dim, 65)
65 类 Logits

其中 LoRA 插入 Transformer 的 Attention / FFN 投影层中,负责低成本适配 Backbone;Classification Head 位于 Backbone 之后,将文本表示映射为 65 个 Category:Misconception 类别分数。

Focal Loss#

Misconception 标签存在明显的类别不平衡。若直接使用普通 Cross Entropy,大量高频、简单样本容易主导梯度,使模型对少数类和高歧义样本学习不足。

Focal Loss 根据真实类别的预测概率降低简单样本权重,把更多优化能力集中到:

  • 少数类
  • 容易混淆的 Misconception
  • 当前模型尚未正确掌握的 Hard Samples

因此它主要解决的是监督训练阶段的长尾与难样本问题

LoRA#

基础大模型已经具备较强的数学与语言理解能力,本任务更接近“将通用能力适配到固定的 Misconception 标签体系”,因此没有必要对全部参数进行 Full Fine-tuning。

LoRA 冻结主体权重,只学习低秩增量:

W=W+BAW' = W + BA

监督训练时主要更新 LoRA 参数与 Classification Head,从而显著降低训练显存和优化器状态开销,并便于快速训练和比较多个模型分支。

3) 输入结构化:从自然文本到 XML#

最初将题干、学生答案和解释直接拼接为自然文本时,模型容易混淆不同字段的语义角色。

因此后续将输入改为类似:

<question>
...
</question>
<student_answer>
...
</student_answer>
<student_explanation>
...
</student_explanation>

这种结构化表示明确区分:

  • 题目本身是什么
  • 学生最终选择了什么
  • 学生为什么会这样判断

它的价值不在于“XML 本身更强”,而在于显式提供字段边界和角色信息,减少输入歧义。

4) Tree-GRPO:围绕 MAP@3 的二阶段排序后训练#

4.1 为什么仅靠分类 Loss 还不够#

LoRA + Focal Loss 优化的是“让真实类别获得更高概率”,但比赛真正评价的是:

正确标签有没有进入 Top-3,以及它最终排在第几位。

因此监督分类 Loss 与 MAP@3 之间仍然存在一定 Objective Gap。

在基础监督模型已经具备较高 Candidate Recall 后,我进一步将 Tree-GRPO 的树状相对优化思想适配到 Top-3 排序任务,直接使用 MAP@3 作为 Outcome Reward。

4.2 本项目中的 Tree 如何生成#

这里不生成很长的显式 Chain-of-Thought,而是把一次性 65 类分类改造成 Top-1 → Top-2 → Top-3 的三步条件排序策略

首先利用监督模型将 65 类压缩为高召回的 Top-6 Candidate Pool。随后每一步仍然由:

LLM Backbone + LoRA
Classification Head
65 类概率分布

产生候选概率,但会把已经选择的标签加入下一步输入。

例如:

Root
/ \
Rank1:Scale Rank1:Decimal
/ \ / \
Rank2:Ratio ... Rank2:Scale ...
/ \
Rank3:Decimal Rank3:Other

假设 Candidate Pool (K=6)、Tree 深度固定为 3、每个节点采用 branching factor (b=2) 的随机概率采样,则一棵完整二叉树最多形成:

23=82^3=8

条 Root-to-Leaf trajectory。

一条路径例如:

Scale → Ratio → Decimal

就是一组完整的 Top-3 排序。

因此这里的 Tree 不是自然语言 CoT,而是:

当前排名选择作为下一步输入条件,从多个候选决策处分叉,比较不同 Top-3 路径最终获得的 MAP@3。

4.3 MAP@3 Reward#

假设真实标签为 Scale

路径 A:Scale → Decimal → Ratio
Reward = 1.0
路径 B:Decimal → Scale → Ratio
Reward = 0.5
路径 C:Decimal → Ratio → Scale
Reward ≈ 0.33
路径 D:Decimal → Ratio → Arithmetic
Reward = 0

因此 RL 阶段可以直接偏向能够获得更高 MAP@3 的排序路径。

4.4 Tree 如何进行 Credit Assignment#

同一个父节点可以随机展开多个不同 child,因此可以利用各子树最终 Reward 的差异判断当前候选决策是否合理。

例如:

Root
/ \
Scale Decimal
│ │
子树平均奖励 子树平均奖励
0.90 0.35

说明当前样本中,“Rank-1 选择 Scale”比“Rank-1 选择 Decimal”更容易形成高质量 Top-3。

这种同一父节点下的局部比较构成 Intra-Tree Advantage;同时还可以将同一 Prompt 不同 Tree、相同深度的节点进行更大范围比较,构成 Inter-Tree Advantage,以获得更加稳定的相对基线。

因此 Tree 的主要价值是:

利用共享状态下不同候选分支的 Outcome 差异,为中间排序动作提供更细粒度的 Credit Assignment。

4.5 GRPO Policy Update#

Rollout 阶段使用旧策略随机采样多条 Top-3 trajectory,并记录每一步所选标签的旧策略概率。

更新阶段重新计算当前 Policy 的概率,通过:

  • Group Relative Advantage 判断某个动作相对同组是好还是差
  • Current / Old Policy Probability Ratio 做 Importance Sampling 修正
  • PPO-style Clip 限制单次策略更新过大
  • Reference Model 的 KL Regularization 限制长期策略漂移

最终得到可导的 Policy Loss,并继续反向传播更新 LoRA + Classification Head

冻结的 Reference Model 则保留监督微调后的参数,作为 RL 后训练的稳定行为锚点。

4.6 Tree-GRPO 在本任务中的定位#

原始 Tree-GRPO 在长 Agent 轨迹中还可以通过共享公共 Prefix 减少重复 Rollout,但本任务最终只有 3 个候选决策,因此计算与显存节省并不是主要收益。

在这个 Kaggle 任务中,它更主要用于:

  • 直接对齐 MAP@3 评价指标
  • 对高歧义候选进行 Stochastic Exploration
  • 将 Top-3 从一次性分类改造成条件排序
  • 利用树状分支改善局部 Credit Assignment

因此它更适合作为基础分类模型之后的 Ranking Post-training 扩展

4.7 Tree-GRPO 与 LoRA / Focal Loss / Ensemble 的关系#

官方训练数据
XML 结构化输入
LLM Backbone + LoRA
65-way Classification Head
Focal Loss 监督微调
获得稳定的任务基础模型
Tree-GRPO 排序后训练
直接优化 MAP@3
4 个自训练模型 + 6 个公开模型
10 模型 Ensemble
最终 Top-3

因此整体方案可以概括为:

  • LoRA:解决大模型高效任务适配
  • Classification Head:将 LLM 表示映射为 65 类概率
  • Focal Loss:解决类别长尾与 Hard Samples
  • XML:降低输入字段语义歧义
  • Tree-GRPO:缩小监督 Loss 与 MAP@3 之间的 Objective Gap
  • 10 模型集成:利用 Error Diversity 降低单模型方差与偏差

5) 集成层三重评分#

最终预测不是简单多数投票,而是融合三类信号:

基础概率分#

不同模型对候选 Misconception 给出的预测概率,是最直接的模型判断。

模型一致性分#

统计不同模型是否共同支持同一个候选。

如果多个不同架构模型都把某一标签放入 Top-3,即使单个模型概率并不极端,也说明该候选具有较高稳定性。

置信度分#

进一步区分:

A: 0.80, B: 0.10

和:

A: 0.36, B: 0.35

虽然两种情况 Top-1 都是 A,但前者明显更加确定。

最终再结合各模型自身的验证集表现进行性能加权,形成稳定的最终 Top-3。

方案流程图
方案流程图
Kaggle MAP 比赛银牌照片
Kaggle MAP 竞赛银牌

结果与产出#

  • 在 Kaggle MAP 竞赛中获得 银牌
  • 形成“监督分类微调 → Ranking Post-training → 多模型集成”的完整任务优化链路
  • 在类别长尾、高歧义解释和 Top-3 排序目标下,兼顾模型效果与工程迭代效率
  • 沉淀可复用的教育 NLP 误解识别与 LLM Ranking 技术框架

我的收获#

  • 对“任务定义—监督微调—强化后训练—集成决策”全链路优化建立了更系统的理解
  • 理解了训练 Loss 与最终 Ranking Metric 不一致时,如何通过 Reward-based Post-training 缩小 Objective Gap
  • 在真实竞赛约束下强化了模型训练、快速实验、多模型融合和工程化迭代能力
  • 更清晰地理解了教育 AI 场景中“可解释误差诊断”的落地价值

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Kaggle MAP:学生数学误区识别竞赛方案复盘
https://example.com/posts/interview/07-kaggle-map-silver/
作者
王睿之
发布于
2025-10-20
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-10-20,距今已过 321 天

部分内容可能已过时

Profile Image of the Author
王睿之
浙大 AI 方向硕士生|CV/多模态学习|AAAI & CVPR Findings 一作 | 校十佳大学生 | 国家奖学金
个人主页导航
欢迎访问我的个人作品站。可优先查看首页置顶的 6 篇项目/实习文章,快速了解科研与工程能力。
分类
标签
站点统计
文章
8
分类
4
标签
38
总字数
17,828
运行时长
0
最后活动
0 天前

目录