私有第 7 名(公开第 2 名)解决方案总结
私有第 7 名(公开第 2 名)解决方案总结
首先,我想感谢 Kaggle 团队、主办方举办这次比赛,以及我的队友 (@tereka, @irrohas, @aerdem4)。
我终于获得了第 5 枚金牌。我很高兴能成为竞赛大大师 (Competitions Grand Master)。
概述
3 个管道(检索器 + 重排序器)的投票集成
所有重排序器推理均使用 vllm
管道 1 (由 Masaya 负责)
这是一个简要总结。
Masaya 将在此链接撰写详细信息。
检索器 (Retriever)
- 使用预训练的 qwen35B 生成测试答案
- 模型:SFR-Embedding-2_R,硬负样本采样 (N=100),如果在训练数据中未见则移除。
- 数据集:用 GPT4o-mini 填充未知的误解 (Misconception)
- 候选数量:60
重排序器 (Reranker)
- Qwen2.5 32B AWQ+LoRA (带 40 个选项)
- 选项 → 0~9 + A~Z + a~z (40 个字符)
- 数据集:仅原始数据
- 候选数量:40
- 运行两次并合并 ([:40] 和 [20:])
- 保留 25 个带 logprobs 的结果
管道 2 (由 Tereka+Kaeru 负责)
检索器 (Retriever)
- 模型 1:SFR-Embedding-2_R、硬负样本采样 (100)
- 数据集:原始数据 + 使用 gemma 27B/Qwen2.5 32B 合成的数据
- 本地分数 (LB) 0.378
- 模型 2:sayoulala 的公开模型
- 模型 1 和模型 2 的加权平均
- 候选数量 70 并用 Masaya 的预测过滤
- 仅单折 (single fold)
重排序器 (Reranker)
- Qwen2.5 32B AWQ+LoRA (带二元选项)
- 数据集:原始数据 + 使用 gemma2 27B/Qwen2.5 32B 合成的未知误解数据
- 仅单折 (single fold)
管道 3 (由 Ahmet 负责)
检索器 (Retriever)
重排序器 (Reranker)
- 候选者是前一个管道各自的 top9
- Qwen2.5 32B (带 9 个选项)
集成 (Ensembling)
- 每个管道的投票集成
- 按以下方式应用排名,连接,求和排名,按 sum_rank 排序
sub0
.with_columns(pl.col("MisconceptionId").str.split(" "))
.with_columns(pl.lit([1/i for i in list(range(1, 26, 1))]).alias("rank"))
.explode(pl.col(["MisconceptionId", "rank"]))
submission
.sort(by=["QuestionId_Answer", "sum_rank", "rank1", "rank2"], descending=[False, True, True, True])
.group_by(["QuestionId_Answer"], maintain_order=True)
.agg(pl.col("MisconceptionId"))
后处理 (Postprocessing)
加速技巧
检索器
- 使用 cuda:0 和 cuda:1 并行运行
- 预计算误解向量 (Misconception Vector)
- 使用 collate_fn 动态填充 (Dynamic padding)
重排序器
- 使用 vllm 推理 (AWQ 4bit 量化)
- 设置 vllm 参数 enabling_prefix_cache 为 True
- 用管道之前的预测过滤候选者
未生效的方法 (What not worked)
检索 (Retrieval)
- 连接向量 (Concat vectors)
- 平均多个向量 (Averaging many vectors)
重排序器 (Reranker)
- 全数据训练模型 (Full-data trained model)
- QwQ 模型
谢谢大家!!