返回列表

17th Place Solution

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

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

第17名解决方案

作者: Anil Ozturk

竞赛排名: 第17名

发布时间: 2023-10-11

得票数: 53票

大家好,这次比赛我以较大分差与个人金牌失之交臂,确实令人遗憾!这是一场激烈的竞赛!我不知道以后是否还有勇气再次为个人金牌如此拼搏。😅 昨天我分享了一个解决方案的概要。现在,我尽力以最详细和清晰的方式解释它。


在处理维基百科转储数据时,你会发现会面对大量的文章。将所有文章处理并转换为适合竞赛的格式是一个相当复杂的过程。我也通过处理我们所熟知的常见转储文件生成了所有文章。然而,我注意到在公开可用的开源转储提取器输出中,数学公式和某些维基百科LUA模板存在问题。

STEM过滤

因此,我决定设计一个独立的流程来提取最原始的STEM相关文章。首先,我需要定位与STEM相关的文章。

  • 我从维基百科下载了分类转储,并从SQL转储中重建了分类链接图
  • 在STEM主要分类上进行了4层广度优先搜索,从整个分类树中总共获得了约110万篇STEM文章。

数据

在我的最终解决方案中,我使用了三种不同的原始数据源。

  • 维基百科JSON转储 (F1):它包含所有文章,但正如我上面所说,开源提取器在提取时存在LUA模板编译错误,导致解析出的文本没有数字或包含一些乱码。
  • 本地MediaWiki服务器TextExtract API (F2):使用我上面描述过的过滤技术,我收集了110万篇STEM文章标题。我向自己在电脑上搭建的MediaWiki服务器发送API请求,确保这些文章以最接近原始格式的方式解析。这样,LaTeX公式和所有LUA模板都能无问题地解析。
  • Cohere维基百科语料库 (F3)

我将上述所有数据都通过了Unicode字符解码过程。然后,我使用3句子窗口、以1句子的步长创建了语料块。


检索

我注意到不同的检索方法能提升预测性能。因此,我倾向于使用三种主要方法:

  • FAISS (BAAI/bge-small-en):我使用句子嵌入模型处理了F1数据,生成了约150GB的嵌入数据。在搜索阶段,我没有进行压缩。我注意到压缩后会降低检索性能。
  • TFIDF:由于竞赛的问答文本是原始维基百科文本的转述版本,TFIDF在捕获精确词簇方面非常有效。我在F2F3上对1,2元语法使用TFIDF,并且不使用停用词。
  • FAISS + TFIDF:我还使用TFIDF对F1的嵌入检索结果重新排序(称为F4

集成

如上所述,我创建了四种不同的上下文来源。我只需在所有上下文上运行一个debertav3-large模型,并对概率进行最大集成。由于我使用的是单一模型,我发现最大集成非常有效。如果在任何一个上下文中找到与问题相关的文本,它都会显著提升相应答案的概率。如果找不到相关上下文,所有选项的概率都相似且相对较低。


概要

我还在下面附上了我的解决方案的概要图。它可能能提供更清晰的理解:

解决方案概要图

同比赛其他方案