第三名解决方案(带有魔法加成)
第三名解决方案(带有魔法加成)
首先,我想感谢组织者举办这次比赛,感谢 Kaggle 社区所有的讨论和分享的 Notebook,帮助我学到了这么多。
我的解决方案
采用两阶段方法:
阶段 1:检索 (Retrieval)
- 使用了 Qwen-14B Embedder(来自 @anhvth226)与使用 FlagEmbedding 训练的 Qwen-14B embedder 进行集成。
- 为每个问题检索了 35 个最相关的误解 (misconceptions)。
- 使用了公开分享的 Retriever,并尝试了自己训练的 FlagEmbedding Retriever。
- 老实说,我自己训练的 Retriever 相当糟糕,移除它实际上提高了分数(哈哈)。
阶段 2:重排序 (Reranking)
- 使用了 Qwen-32B-instruct-AWQ reranker。
- 集成了 6 个具有不同训练参数和交叉验证的 LoRA 模型。
- 其中一个模型包含了约 2000 个 GPT4-mini 生成的样本,但改进……不是很显著。
此时的分数:
- 公共排行榜 (Public LB): 0.590
- 私有排行榜 (Private LB): 0.564
是时候来点魔法了!
接下来是最有趣的部分!
这一切始于我发现误解表中有超过 900 个未见过的误解 (unseen misconceptions),它们从未出现在训练数据中。此外,根据 @zhudong1949 和 @eugenkrylov 的发现(查看此处:讨论链接),测试集有许多未见过的主题,只有约 685 个问题。
所以我想:这些未见过的误解一定构成了测试集的很大一部分!
让我们实验一下
在比赛的倒数第二天(是的,我真的敢在这个时候用两次提交来做实验 XD),我做了这个排行榜探测 (LB probing):
- 每个问题只预测 1 个误解。
- 测试了两次:
- 仅使用训练数据中见过的误解:得分为 0.154
- 仅使用未见过的误解:得分为 0.444
看到这些结果,我大胆猜测测试数据中见过与未见过的比例大致为 1:3。
最后的魔法 touch
所以我实施了一个简单的后处理:
- 将所有预测的未见过的误解的概率乘以常数 C。
- 调整直到未见过的误解占首预测的 75%。
这个小魔法技巧让分数飙升 😮:
- 公共排行榜 (Public LB): 0.590 → 0.658
- 私有排行榜 (Private LB): 0.564 → 0.600
在最终版本中,我还随机打乱了输入到 reranker 的误解顺序,这带来了额外的微小提升:
- 公共排行榜 (Public LB): 0.670
- 私有排行榜 (Private LB): 0.602
代码
推理代码可以在这里找到: