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

正是Kaggle社区的帮助让我能够独自走到今天。我要感谢所有将数据、代码和想法公开分享以及竞赛主办方。
最终提交代码
概述
- 从2+2种不同的维基百科数据进行多上下文检索
- 使用单个DeBERTa模型进行多项选择
- 最大概率集成
- tf-idf后处理
检索
主要有四种维基百科数据
关于转储数据
- 将文章分割并嵌入,每次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修改预测结果。