返回列表

10th(11th) Place Solution: This is my first solo gold medal !!!

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

开始: 2023-07-11 结束: 2023-10-10 自然语言处理 数据算法赛

第10(11)名解决方案:这是我第一块个人金牌!!!

作者:kami (Grandmaster)
排名:第10名
得票:92票
发布时间:2023年10月11日

正是Kaggle社区的帮助让我能够独自走到今天。我要感谢所有将数据、代码和想法公开分享以及竞赛主办方。

最终提交代码

概述

  • 从2+2种不同的维基百科数据进行多上下文检索
  • 使用单个DeBERTa模型进行多项选择
  • 最大概率集成
  • tf-idf后处理

检索

主要有四种维基百科数据

  • 维基百科数据库备份转储(使用wikiextractor提取)
    • 缺点
      • 所有文章都在,但项目符号列表和部分章节缺失。
      • 部分公式未被提取,例如"formula_1"、"formula_13"。
  • 维基百科Cirrus转储(使用wikiextractor提取)
    • 缺点
      • 无法分割成章节
  • 27万条Cohere数据
  • 27万条解析数据

关于转储数据

  • 将文章分割并嵌入,每次200-250个字符,使用faiss中的ivfpq对索引进行量化以装入内存并搜索文章
  • 检索到10篇文章后,使用滑动窗口分割文本,向量化并使用faiss的indexflat搜索以创建上下文
    • 答案应该包含在几句话内
    • 单句太短。
    • 然而,如果将文本分割成多个句子,可能会在答案所在的句子中间分割 → 使用滑动窗口分割

关于27万条数据

使用以下两种检索方式

  • tf-idf
  • 使用faiss indexflat作为嵌入进行搜索

由于推理时只能计算问题的嵌入,即使使用相对较大的模型(例如BAAI/bge-large-en-v1.5)也没有太大差异。

模型

  • 除后处理外,所有推理使用相同的DeBERTa large单模型
  • 推理使用的上下文长度是训练时的两倍

训练数据(特别是考试数据)

  • 6万条数据(基于GPT-3.5生成的维基百科数据 + α)

验证策略

  • 留出法
  • 200条train.csv数据 + 1000条额外数据(由GPT-3.5生成的维基百科科学考试数据)

相关性不高,但具有信息性。然而,最后一种帮助不大,因为混合了答案错误或存在多个正确答案的问题。

集成

  • 取每个预测概率的最大值,并从大到小进行预测
    • 如果上下文中存在答案,置信度应该很高
    • 如果上下文中没有答案,置信度应该很低
  • 鲁棒性强,不易过拟合,但比简单混合效果更好。

后处理

  • 在特定条件下使用(4,7)-gram的tf-idf修改预测结果。
    • 后处理以修正明显错误的内容
同比赛其他方案