返回列表

2nd Place Solution

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

开始: 2023-07-11 结束: 2023-10-10 自然语言处理 数据算法赛
第二名解决方案

第二名解决方案

作者:Ivan Sorokin (Kaggle Grandmaster)
发布日期:2023年10月19日

感谢Kaggle组织这次比赛。我在工作中经常处理类似任务,很高兴看到开源社区在这里能取得如此出色的成果。我的最终解决方案主要基于Deberta系列模型,其中仅有一半的测试题目由Mistral大语言模型处理。

系统组件

  1. 知识数据库
    使用Hugging Face数据集 graelo/wikipedia/20230601.en 作为单一知识来源。每个文档被分割成句子,并组合成重叠的文本块,平均长度为1000字符。使用 pyserini.index luciferase 包建立索引。索引文件占用23 GB空间,检索200×5个查询约需5分钟。

  2. 重排序模型
    每个检索到的文本块都通过自定义重排序模型重新评分。该 deberta-v3-base 重排序模型的结构类似于标准的 DebertaV2ForMultipleChoice 模型,但其功能是预测给定问题/答案对的最佳上下文。为构建训练数据集,使用教师模型生成伪排名标签:针对每个正确的问题/答案对,检索若干上下文并通过教师模型评估,将得分最高的上下文视为重排序模型的正确选项。教师模型基于 deberta-v3-large 构建。

  3. 多项选择模型
    对Deberta和Mistral模型采用标准的 DebertaV2ForMultipleChoice 方法。唯一特殊处理是:为适应不同选项数量的训练集,按 loss * (self.num_labels / num_choices_in_sample) 缩放损失函数。

  4. 掩码语言模型
    错误分析显示,当选项间仅有个别词汇差异时,多项选择模型表现较差。针对这种选项高度相似的长文本场景,使用了专用掩码语言模型。该模型易于训练,但应用于5选项问题较困难。理想方案是进行多序列比对并一次性比较差异词,但未找到合适的Python库实现,最终采用 sed.standard_sed_backtrace 逐对比较选项。

  5. 交叉引用选项
    原预期测试结果会有更大波动,假设测试集中包含更多"以上都不是"类选项。例如,当将验证集的正确答案全部替换为"以上都不是"时,MAP@3分数从0.9骤降至0.3。基于此观察,构建了包含更多此类训练样本的第二阶段排序器。

  6. XGBRanker
    使用XGBRanker作为融合机制。该排序器在验证集上训练,特征包括:检索模型分数、Deberta/Mistral多项选择模型的logits值,以及"以上都不是"选项的标记特征。

失败的实验

  • DebertaV2ForMultipleChoice 使用Focal Loss
  • 移除Llama注意力的因果约束

数据集

作者 名称 大小 许可
@radek1all39249
@leonidkulykstem_1k_v1928
@nlztrkeduqg_llm_formatted3297
@mozattttest3084
@cdeotteMMLU17433非商业性
AI2openbookqa5957
AI2ai2_arc7787
AI2qasc9060
AI2sciq13679非商业性

消融分析

系统 私有分数 公开分数 内核
k=1, 2xDebertaMC0.9097630.907823
k=8, 2xDebertaMC, 重排序器0.9161190.907823
k=8, 2xDebertaMC, 重排序器, XGBRanker0.9159630.909904
k=8, 2xDebertaMC, 重排序器, XGBRanker, 掩码LM0.9155460.911568
k=8, 2xDebertaMC, 重排序器, XGBRanker, 掩码LM, MistralMC0.9314890.931543llm-xgboost-abc

*k - 从索引中检索的文档数量

结论

本方案的核心组件包括完整的维基百科索引和XGBRanker融合层,后者综合了不同模型的输出:BM-25/重排序分数、Deberta和Mistral多项选择模型的logits值。

同比赛其他方案