私有榜第 7 名(公开榜第 10 名)解决方案
私有榜第 7 名(公开榜第 10 名)解决方案
首先,我们要向组织者和 Kaggle 表示最深深的感谢。这次比赛对我们团队来说是一次不可思议的学习经历。
概述
- 直接 Logit 训练: 将 token 分配给误解标签,并使用 CrossEntropy 损失直接在提取的 logits 上进行训练
- vLLM 集成: 虽然测试了具有相似分数的分类头,但我们选择了基于 logit 的方法以获得最佳的 vLLM 推理性能
- 集成策略: 结合了具有不同模型和提示策略的多个管道
加速技巧
1. 合成数据生成 (主要由 ISAKA 完成)
为了提高模型准确性,我们使用 GPT-4.1 和 GPT-5-mini 生成了合成数据。
合成数据生成方法:
- 从原始训练数据集中提取满足特定条件的数据:具有相同“正确标签 (True/False)"、“问题 ID"和“误解”的 5 个以上数据点组
- 从每组中随机采样 3 个条目作为参考,以生成新的“学生解释”
- 使用 3 个不同的条目创建了更多样化且更高质量的合成数据(避免过拟合单个示例)
生成版本:
ver2-46: 由 GPT-4.1 生成
ver47-56: 由 GPT-5-mini 生成
- 数据集 available 在此处
评估结果:
使用 Chris Deotte 的 notebook "Gemma2-9B-it - CV 0.945" 作为基准。

使用合成数据的改进:
- CV 分数: +0.003 到 +0.004
- LB 分数: +0.002 到 +0.005
重要说明:
这些改进 specifically 是在 Gemma2-9B-it + OOF 预测中观察到的。其他模型显示出混合结果,表明模型特定的适应对于有效利用合成数据至关重要。
2. 误解候选过滤
- 利用每个问题预定的 incorrect answer 候选项
- 仅将相关的误解候选项添加到提示中 → 显著减少了提示长度
3. 噪声缓解和标签质量增强
- 标签平滑: 为 select 模型的损失函数添加 α=0.1 以处理噪声标签
- 知识蒸馏: 在竞争数据上训练 Qwen2.5-32B 并使用输出作为软标签(而不是直接使用合成数据的生成标签)
4. 预识别正确答案
- 正如 此讨论 中所分享的,训练和测试数据共享相同的 15 个问题
- 仅专注于预测误解,在后处理中添加 True/False 标签
5. 提示中的替代答案选项
- 添加同一问题中的其他 MC 答案选项(排除学生选择的答案)以提供额外上下文
未生效的方法
动态集成权重调整 (主要由 takaito 完成)
- 尝试动态调整每个问题的集成模型权重
- 由于计算限制,仅限于 fold0 CV
- 数据不足可能导致性能不佳
- 多折 CV 可能会改善结果
小模型添加 (主要由 takaito 完成)
- 准备了轻量级模型(预测仅需几分钟)
- 添加到集成时没有改进
管道细节
管道 1 (yukichi)
数据策略:
- 竞争数据 + ISAKA 的合成数据 (使用 v2-13)
- 两种提示类型:
- 类型 1: 相关误解候选项 + 使用 Claude Sonnet 逆向工程的解释(基于实际学生响应模式为每个误解生成详细解释)
- 类型 2: 完整误解目录
模型架构:
| 模型 |
提示 |
公开榜最佳 |
私有榜 |
| Gemma-2-9B-IT |
2 |
0.950 |
0.946 |
| Qwen2.5-32B (AWQ) |
2 |
0.950 |
0.947 |
集成结果: 公开榜 LB 0.952, 私有榜 0.948🎯
蒸馏策略:
| 数据类型 |
策略 |
| 竞争 |
原始标签 (50%) + Qwen2.5-32B OOF (50%) |
| 外部 |
仅 Qwen2.5-32B logits |
正则化:
- Gemma2-9B: 标签平滑 (α=0.1) + Temperature 1.5
- Qwen-32B: 无平滑 + Temperature 1.0
管道 2 (takai)
数据策略:
- 竞争数据 + ISAKA-san 的合成数据
- 通过 Claude Sonnet 预生成的误解候选项
模型:
- deepseek-ai/DeepSeek-R1-Distill-Qwen-32B (公开榜最佳 :0.950, 私有榜:0.945)
- 通常在数据集上运行按折训练的模型推理,并使用输出作为软标签。
- 在外部数据(仅使用 OOF top-1 预测与标签匹配的项目)加上竞争数据上使用 CE_loss + KL_div_loss 训练 (公开榜:0.95, 私有榜:0.945)。
- 在竞争数据上使用 CE_loss + KL_div_loss 训练 (公开榜最佳:0.948, 私有榜:0.943)。
管道 3 (sinchir0)
基本上,我使用 我的公开 notebook 中的代码进行训练。
导致改进的关键因素
- 不使用添加的特殊 token,而是使用现有 token 作为正确答案。(CV+0.005, LB+0.005)
- 不使用 eval_loss 最低的 checkpoint,而是使用稍后的 checkpoint。(CV+0.008, LB+0.007)
数据策略:
- 仅竞争数据
- 仅潜在误解选项
- GPT-5 生成的候选误解解释
模型:
- Qwen/Qwen3-8B (公开榜最佳:0.948, 私有榜:0.945)
- 全量训练 + 全量微调
- lr: 2e-5 (1e-4 导致收敛问题)
- 3 epoch
关键收获
- 合成数据的有效性高度依赖于模型
- 提示工程和候选过滤对效率至关重要
- 结合蒸馏与标签平滑可有效处理噪声数据
- 预识别正确答案消除了一种错误来源
感谢阅读我们的解决方案!