返回列表

21st place private LB solution

573. Kaggle - LLM Science Exam | kaggle-llm-science-exam

开始: 2023-07-11 结束: 2023-10-10 自然语言处理 数据算法赛
第21名私有排行榜解决方案

第21名私有排行榜解决方案

团队:Contextual Kagglers
作者:Alexander Ryzhkov、Olga Tsymboi、VasilevDima、Giba
发布时间:2023年10月16日

嗨,各位Kagglers,

我们是"Contextual Kagglers"团队: AlexGibaOlyaDima。 我们在私有排行榜上获得0.916分(第21名),在公共排行榜上获得0.928分(第11名)。 是的,我们在公共排行榜上曾获得金牌,但在私有排行榜上却失去了奖牌位置 - 令人遗憾的消息 🙁

我们在此披露解决方案,并分享关于数据和比赛本身的有趣见解。特别要提到的是, 大部分创意和工作由OlyaDima完成, 他们对最终成绩做出了巨大贡献。同时祝贺Olya 获得Kaggle竞赛专家等级

最终结构

我们的解决方案结构如下所示:

(示意图:包含检索策略、单模型、组合策略的完整流程图)

检索策略

它包含两种不同的上下文检索策略

  • 第一种基于完整的维基百科文章句子库(约1.17亿个元素)all-MiniLM-L6-V2 以及 GTE-base 构建的FAISS量化索引(使用IVF, PQ64索引)。 我们使用了两种变体(仅提示词和提示词+所有答案)来寻找最佳上下文,因此这部分共有4种上下文:
    • all-MiniLM-L6-V2 仅使用提示词
    • all-MiniLM-L6-V2 使用提示词和所有答案
    • GTE-base 仅使用提示词
    • GTE-base 使用提示词和所有答案
  • 第二种是参考@mbanaei的优秀内核实现的TF-IDF检索, 唯一修改是为20万解析段落数据集添加了 sublinear_tf=True 参数,根据我们的验证这是最佳选择。 这部分提供另外2种上下文变体:分别针对20万和27万数据集。

单模型

关于单模型,我们使用了两种常见架构作为微调基础:

  • DeBERTaV3 Large
  • LongFormer Large

我们使用6万个@cdeotte数据集和我们生成的3.9万个STEM数据集进行微调。 为丰富3.9万自定义数据集的多样性,我们使用GTE-base索引生成优化上下文(分别使用仅提示词和提示词+所有答案两种方式)。 对于DeBERTa架构,我们训练了 ckpt-3850ckpt-7200ckpt-8750 三个检查点, 每个阶段都对置信度最低的样本重新标注(即微调模型将正确答案排在最后的位置)。 由于推理时间限制,LongFormer仅使用最后一个检查点。推理时DeBERTa使用2300字符限制的上下文, LongFormer无限制(我们在500样本数据集上对2000-2500字符限制进行网格搜索,2300在推理时间和MAP@3指标上达到最佳平衡)。

尝试但未成功的方法

  • CutOut、CutMix数据增强
  • 为每个上下文训练独立模型
  • 带/不带困难负样本的奖励训练
  • 多负样本损失函数
  • RoBERTa、ELECTRA、BERT微调
  • 答案顺序平均化:mean(prompt + A + B + C + D + E, prompt + E + A + B + C + D...) 在500个样本上表现完全相同,mean(prompt + A, prompt + B...) 的MAP@3更低
  • t5、e5、GTE和BGE模型,但对于@mbanaei数据集,TF-IDF仍是最佳选择
  • 不同索引版本,只有nprobs参数有意义
  • TF-IDF排序器+BM25重排序器
  • 训练单问题+单答案对分类器
我们很遗憾没有尝试其他嵌入模型来创建维基百科索引,也没有使用文本块而只是使用句子。

组合策略

为了创建最佳组合,我们测试了大量疯狂变体,包括混合、堆叠和备份策略 - 所有方案都在公开可用的500行数据(200+300行)上进行了比较测试。 最终最佳方案是:混合基于第一种检索策略的同一DeBERTaV3检查点的4个预测结果, 得到 blend_7200blend_8500, 同时对 DeBERTa_3850 预测使用LongFormer预测进行平均备份。 最终公式为:0.58 * blend_7200 + 0.42 * blend_8500 + TF-IDF_backups

关于混合的重要发现:

  • 在500行验证集上,同时混合超过4个模型的预测会降低公共和私有排行榜的MAP@3分数
  • 混合不同检索策略的预测组合比简单平均效果更差
  • 如果使用 0.5 * DeBERTa_3850 + 0.5 * LongFormer 混合替代LongFormer本身, 在 max_probability < 0.514 时进行TF-IDF检索备份效果更佳

提交时间监控

由于我们的笔记本最多只能运行9小时,需要监控每次提交耗时。 这帮助我们确定还能添加多少模型,以及OOM/异常发生在哪个环节。 我们创建了特殊脚本在tmux会话中以 while True 循环每分钟检查提交状态。 最佳提交耗时8小时52分43秒 - 相当充分的利用,对吧?🙂

由于这不会是最后的内核竞赛,我们在此分享监控脚本, 大家可以在未来比赛中使用: https://www.kaggle.com/code/alexryzhkov/submissions-timer-script/notebook (可调整 GMT_OFFSET 变量适配时区)

其他技巧

我们还尝试使用伪标签技术使预测更接近测试数据分布。 基本方法是在500个OOF数据集基础上添加4000个测试样本并运行ML模型, 但效果不如简单的加权平均方法。

总结

感谢Kaggle和其他参赛者带来的精彩比赛。即使12年后的今天, 对我而言这仍然充满学习和乐趣。

同比赛其他方案