返回列表

✨ MAP 6th Place Solution - Qwen-semble FTW! 🚀

673. MAP - Charting Student Math Misunderstandings | map-charting-student-math-misunderstandings

开始: 2025-07-10 结束: 2025-10-15 个性化学习 数据算法赛
✨ MAP 第 6 名解决方案 - Qwen-semble 万岁!🚀

✨ MAP 第 6 名解决方案 - Qwen-semble 万岁!🚀

几个 Qwen 模型和以数据为中心的处理

作者: Manan Jhaveri
发布时间: 2025 年 10 月 16 日
竞赛排名: 第 6 名

感谢组织者和 Kaggle 举办这场有趣且充满挑战的比赛。也感谢所有参与者提供的宝贵 Notebook 和讨论帖。

解决方案亮点 (简要版)

  • 我混合使用了 Qwen3-Embedding-8BQwen3 14BQwen2.5 14B
  • 针对稀有标签的合成数据、文本增强和重复项伪标签帮助提高了分数。

详细解决方案

问题陈述

  • 我们获得了数学问题、学生给出的答案以及学生的解释。
  • 我们需要预测 3 件事:
    • 答案是否正确
    • 解释是否正确,是否有误解,或者都不是
    • 如果存在误解,误解的类型是什么

数据和预处理

  • 从一开始,我就将这个问题视为单纯的误解分类问题。所以我移除了类别中的 True_False_ 前缀,在微调期间使用最终的 37 个标签。
  • 使用了以下输入格式:
    correctness = "是" if row["is_correct"] else "否"
    input_text = (
        f"问题:{row['QuestionText']}\n"
        f"答案:{row['MC_Answer']}\n"
        f"正确:{correctness}\n"
        f"解释:{row['StudentExplanation']}\n"
        f"任务:分类解释中的误解。"
    )
  • 在初步实验中,我注意到为 LLM 添加 prompt 的最后一行可以提高 CV 和 LB 分数。因此决定在后续实验中保留它。
  • 我完全删除了重复样本。重复项 = 相同的答案和解释但标签不同的误解。
  • 在最后几次实验中,我对这些重复项进行了伪标签处理,并将它们加回训练数据。
  • 在某些实验中,我为每个类别添加了约 50 个增强样本。增强涉及基本标点替换、单词与数字互换、将 "plus" 替换为 "+"、将 "equals to" 替换为 "equals" 或 "="、添加小拼写错误等。
    • 我分析了通过模糊搜索在训练数据中发现的近似重复项,并据此尝试创建增强样本。
  • 在最后几次实验中,我为支持度最低的 10/37 个类别添加了合成数据。我使用 ChatGPT 4o 为每个类别生成 100-120 个样本。
  • 我使用了 160 的最大序列长度和动态填充。这使我的训练和推理更快。
  • 对于本地测试,我使用了 20% 的测试分割,并使用完整数据重新训练模型以进行提交。

模型

  • 我开始尝试各种模型,如 GTE、Ettin,后来转向高达 8B 参数的 LLM。我观察到带有 Qwen3-Embedding-8Bsequence classification 方法表现最好。
  • 在冻结 prompt 模板和预处理后,我也转向了 14B 参数模型。
  • 我使用 4-bit Q-LoRA 训练这些 LLM。Rank = 128, alpha = 32-128 (根据不同实验)。
  • 我在 Jarvis Labs 上使用 A5000/A100 进行计算。

以下是我最终在 Qwen-semble 中使用的模型 summary:

模型 使用的数据 公开榜 (Public LB)
Qwen3 Embedding 8B 去重数据 0.946
Qwen3 14B 去重数据 0.947
Qwen2.5 14B IT 去重数据 0.947
Qwen3 Embedding 8B 去重数据 + 增强数据 0.945
Qwen3 Embedding 8B 去重数据 + 伪标签重复项 + 合成数据 0.949 (最佳单模型)
Qwen3 14B 去重数据 + 伪标签重复项 + 合成数据 0.948
Qwen3 14B 去重数据 + 伪标签重复项 + 合成数据 (+ 与上面不同的种子) 0.943

集成学习 (Ensembling)

  • 我使用了 @kishanvavdara 的 Notebook 中的集成方法:https://www.kaggle.com/code/kishanvavdara/ensemble-gemma-qwen-deepseek
  • 上表中前 4 个模型的集成帮助我在公开榜上突破了 0.95。
    • 我用这个集成来对重复项进行伪标签。
    • 带有增强数据的模型单独分数较差,但对集成贡献显著。我多次尝试移除它,因为得到了更好的模型,但分数总是下降。
  • 使用前 6 个模型的集成,我在公开榜上获得了 0.951 (私有榜 0.947)。
  • 在最后 2 天,我没有想法了,也不想对集成方法中的模型权重进行小调整,因为感觉不可靠。所以我决定微调 Qwen3 14B,配置与之前 0.948 模型相同,但使用不同的种子和随机状态。它的单独分数相当差,但与其他 6 个模型集成后,给了我最好的公开和私有 LB 分数。

失败的实验

  • 多个预训练模型。
  • 几个 prompt 模板。
  • 添加太多增强样本。我总结了多个模式并创建了约 10k 增强样本。但公开榜分数保持在 ~0.945,这些模型对集成没有太多贡献。
  • 不同的建模方法:
    • 使用所有原始 65 个标签。
    • 尝试了两阶段方法,第一阶段模型仅预测学生解释是否正确、有误解或都不是。第二阶段预测误解类型。
    • 文本生成方法,在 prompt 中提供每个类别的简化描述,要求模型预测哪一个最能描述学生解释背后的推理。
    • 文本蕴含方法,尝试预测给定样本是否蕴含任何误解类别的简化描述。
    • 分类头使用 MoE 风格 NN 而不是 LoRA 适配器。(真的很想让它工作,但没时间修复超参数)
  • 不同的损失函数,如 focal-loss。
同比赛其他方案