573. Kaggle - LLM Science Exam | kaggle-llm-science-exam
首先,我们要向主办方和Kaggle团队表示诚挚的感谢,感谢他们组织了这场精彩的比赛。同时,也要向所有参赛者致意,感谢你们经历了这场激烈的竞争。这是一场极具教育意义和令人兴奋的比赛。
下面,我们介绍我们的解决方案。
我们的解决方案基于高质量的检索+Deberta v3模型的组合。高质量检索的实现以及如何将其作为上下文引入是至关重要的。
示例代码:https://www.kaggle.com/code/linshokaku/4th-elasticsearch-retrieval-example
我们实现了多种检索规则,并以零样本方式评估分数,不介入模型训练。最初使用llama2 7b和train.csv进行评估。当使用上下文的预训练模型性能显著提升后,我们使用该模型评估从60k数据集(https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/436383)抽取的2000个实例的验证集。由于没有插入模型训练,能够以相对较高的速度执行改进循环。
我们认为以下元素对于高质量检索至关重要:
通过cirrussearch转储可获得干净的维基百科数据,具体参考Wikiextractor文档(https://github.com/attardi/wikiextractor#wikipedia-cirrus-extractor)。我们使用cirrussearch转储中的文本(分割成句子)构建了Elasticsearch服务器,并在Kaggle内核上运行。
搜索始终逐句进行。对每个被分割成句子的提示或选项,我们提取所有单词,去除停用词和重复词,访问Elasticsearch服务器并提取相似句子。基于获取的维基百科句子,我们生成三种上下文:v3、v5和v7。每种上下文都涉及基础处理,如连接目标句子的上下文和连续句子。区别如下:
Elasticsearch启动时需要写入操作,因此需复制到/kaggle/temp运行。如讨论帖所述,/kaggle/temp的I/O速度不稳定,因此我们通过符号链接将Elasticsearch数据库文件链接到/kaggle/input的文件系统,直接执行数据I/O。
为训练能有效参考跨领域上下文的模型,我们从开放数据集随机抽取2000个实例作为验证数据。原始train.csv过于简单,后期很少使用。通过信任验证分数(2000样本)与LB的相关性,成功避免了过拟合。
验证分数与LB相关性图示:

模型:Deberta v3 Large
数据集:主要使用60k和40k数据集
将token数量从512扩展到768和1280后,准确率显著提升
我们发现包含更多上下文token能提升性能,因此采用先放置提示和选项,再用尽可能多的上下文填充剩余部分的方法。
某些问题与检索匹配良好,某些则不匹配。对单个模型的三种上下文推断结果进行集成提升了分数(训练时v7单独表现良好,但推理时集成多上下文进一步提升性能)。这表明检索器的多样性确保了搜索结果的覆盖度。