Kaggle大模型竞赛优胜方案总结与思考

发布于 2024-12-4 12:47
浏览
0收藏

大家好,我是HxShine。

LLM的Reward模型该如何训练呢?今天对Kaggle LLM比赛LLM Science Exam 的一些优胜方法做一个总结,这是Kaggle竞赛平台第一次举办LLM相关比赛,赛题就是探索如何训练一个science-based Reward Model。

优胜方案中,如何利用RAG(检索增强)方法提高模型的上限,如何通过传统方法以及向量检索方法提高检索知识的质量,如何使用LoRA,QLoRA等技术对LLaMa2等系列进行微调,甚至在16GB内存的GPU上对70B大小的LLM进行推理[7]等很多技术都值得我们学习,相信大家看完会有所收获。

Kaggle大模型竞赛优胜方案总结与思考-AI.x社区

一、概述

Title:Kaggle - LLM Science Exam Use LLMs to answer difficult science questions

比赛排行榜:​​https://www.kaggle.com/competitions/kaggle-llm-science-exam/leaderboard​

1.Motivation


Kaggle大模型竞赛优胜方案总结与思考-AI.x社区

  • Reward模型:简单来说就是用于判断LLM的输出哪个更好,辅助提升LLM的输出质量。它是一种用于强化学习的技术,用于改进生成式对话系统的性能,基本思想是通过奖励函数来引导模型生成更好的回复,
  • Reward模型是强化学习提高LLM表现的关键之一。Reward模型该如何建模?可以利用那些数据?如何训练?大模型好还是小模型好?都还有待进一步探索。
  • 如何尽可能低成本的训练好的Reward模型?OpenAI的Reward模型用的是6B左右的模型[1],成本更低的Reward模型方案也值得探索,该比赛通过限制GPU数量和推理时间来挖掘成本低,精度高的Reward模型训练方案。

2.Definition

赛题:从大模型生成的5个候选结果挑选3个最好的结果。即对于每一个问题prompt,LLM生成A、B、C、D、E五个答案,正确的答案answer只有一个,从LLM生成的5个结果中,选择前三的答案进行输出。其利用MAP@3计算分数。下面给出一个样例数据:

Prompt:

Which of the following statements accurately describes the impact of Modified Newtonian Dynamics (MOND) on the observed ""missing baryonic mass"" discrepancy in galaxy clusters?

A:

MOND is a theory that reduces the observed missing baryonic mass in galaxy clusters by postulating the existence of a new form of matter called "fuzzy dark matter."

B:

MOND is a theory that increases the discrepancy between the observed missing baryonic mass in galaxy clusters and the measured velocity dispersions from a factor of around 10 to a factor of about 20.

C:

MOND is a theory that explains the missing baryonic mass in galaxy clusters that was previously considered dark matter by demonstrating that the mass is in the form of neutrinos and axions.

D:

MOND is a theory that reduces the discrepancy between the observed missing baryonic mass in galaxy clusters and the measured velocity dispersions from a factor of around 10 to a factor of about 2.

E:

MOND is a theory that eliminates the observed missing baryonic mass in galaxy clusters by imposing a new mathematical formulation of gravity that does not require the existence of dark matter.

Answer: 

D

评价指标:MAP@3: Mean Average Precision @ 3,𝑀𝐴𝑃@3=1𝑈∑𝑢=1𝑈∑𝑘=1𝑚𝑖𝑛(𝑛,3)𝑃(𝑘)×𝑟𝑒𝑙(𝑘)

资源要求:CPU或者GPU推理时间都不能超过9小时,不能接入外部网络。

训练数据:200条评估数据。

测试集:大概4000条数据。

3.难点分析

  • 建模方法:题目要求我们对LLM生成的science-based的结果进行排序,其强烈依赖于science相关知识,如何对其建模非常关键,包括中后期大家发现引入外部知识(RAG)来进行增强可以极大的提升模型的上限。
  • 建模数据:比赛只提供了200条测试数据,没有训练数据,同时待预测的数据大概4000+左右,20%在A榜,80%在B榜。
  • 资源限制:比在只提供2*T4或者1*P100的GPU,时间限制为不超过9小时。

二、Methods

1.RAG vs Finetuning?[2]

Kaggle大模型竞赛优胜方案总结与思考-AI.x社区

RAG:这种方法将检索(或搜索)的能力集成到LLM中。它结合了一个检索系统和一个大模型,前者从大型语料库中获取相关文档片段,后者使用这些片段中的信息生成答案。本质上,RAG 帮助模型“查找”外部信息以改进其响应。

Kaggle大模型竞赛优胜方案总结与思考-AI.x社区

微调:这是采用预先训练的 LLM 并在较小的特定数据集上对其进行进一步训练的过程,以使其适应特定任务或提高其性能。通过微调,我们根据数据调整模型的权重,使其更适合我们应用程序的独特需求。

Kaggle大模型竞赛优胜方案总结与思考-AI.x社区

RAG+微调:在外部知识要求高的情况下,优先RAG,需要模型适配(风格行为词汇)等,就需要微调,两者要求都高的话,需要结合使用[5]。

三、关键优化思路总结


Kaggle大模型竞赛优胜方案总结与思考-AI.x社区

总体上,RAG + LLM结合的模型可以在知识来源、检索方法、基座模型及其尺寸、是否需要微调等多个方面进行优化,针对本次比赛,对我收集到的一些方法进行对比,方便大家参考。

1.检索增强与检索质量为王!

说明:主要探索不用RAG检索增强以及用了RAG检索增强的效果差异,如果不用RAG,模型很快就会到达瓶颈。

基座模型

方法

说明

LB分数

链接

deberta

without context

不利用检索的结果进行增强

0.732

​https://www.kaggle.com/code/radek1/new-dataset-deberta-v3-large-training​

deberta

wiki as context

利用wiki百科的数据进行增强

0.819

​https://www.kaggle.com/code/cdeotte/how-to-train-open-book-model-part-1​

​https://www.kaggle.com/code/cdeotte/how-to-train-open-book-model-part-2​

deberta

stem(270k)as context

利用stem相关的高质量结果进行检索增强

0.862

​https://www.kaggle.com/code/mbanaei/86-2-with-only-270k-articles​

LLM(7b/17b)

without context

直接用LLM,不用检索增强,很快就遇到瓶颈了

0.84

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446422​

LLM(7b/17b)

wiki as context

利用wiki百科的检索数据来增强,同时基座模型用7B/13B左右的模型

0.90+

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446422​​v

总结1:没有检索增强RAG的引入,很快达到性能瓶颈。没有引入RAG,分数大概是0.73~0.84,第一名的解决方案[4]也提到如果没有检索增强,很快就遇到性能瓶颈,所以他们在RAG检索以及质量优化上都做了不少工作。

总结2:知识以及知识的质量非常关键,几乎是本场比赛的决定因素之一。例如同样的模型(deberta系列),270k的高质量数据LB分数可以到0.862左右,wiki的上下文LB分数只能到0.819左右,同时without context情况下LB只有0.732。另外第一名的解决方案[4]也探索了多种embedding的方案来检索高质量的上下文。15rd place solution[6]几乎把全部精力都放在检索端。

2.有哪些好的检索方法?

方法

说明

LB

链接

tfidf

利用tfidf传统方法来做检索增强

0.862

​https://www.kaggle.com/code/mbanaei/86-2-with-only-270k-articles​

tfidf+embedding

结合多类检索方法来做增强,甚至可以在检索测做TTS

0.905

tfidf方案:​​https://www.kaggle.com/code/mbanaei/86-2-with-only-270k-articles​

embedding方案:​​https://www.kaggle.com/code/dangnguyen97/wikipedia-rag​


bm25(elastic sedarch)

利用bm25传统方法来做检索增强

0.9+?(第4名用了多种检索增强的方法来做,最终PB分数0.927)

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446307​

​https://www.kaggle.com/code/linshokaku/4th-elasticsearch-retrieval-example​

embedding model

主要的考察点在用哪种embedding模型效果好?第一名尝试了MTEB Leaderboard上top-20模型,最终挑选了5个最好的模型模型

0.90+

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446422​

ranker model

在检索的基础上,利用ranker模型进一步筛选更高质量的结果

0.90+

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446816​

检索位置的影响(选项ABCDE不同位置有影响)

TTS增强:根据context或者答案的顺序来做TTS,增加多样性。有效果但是不太稳定。

在final classification head添加每个选项的average logits,效果不错并且稳定。

0.90+,上限比较高!

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446422​

总结1:传统检索方法效果也不错。在LLM领域,向量检索不一定比传统检索方法tfidf以及bm25效果好,特别是没有经过垂直领域的训练的embedding模型。例如86-2-with-only-270k-articles[2]中利用tfidf检索,效果比向量检索还稍微好一点。同时4th[2]方法,用elastic_search来检索文档(原理是bm25算法),也取得一个不错的效果。

总结2:检索的质量非常重要。为了提高检索质量,86-2-with-only-270k-articles[2]方法过滤筛选了270k相关的数据,效果相对于原始的wiki数据有了明显的提升。第一名的解决方案[4]提到筛选更相关的一些数据用处不大,可能是其挑选的embedding模型效果不错了,不会检索出质量不太好的结果出来。第15名的方法[6]利用ranker模型进一步筛选高质量的检索结果来提高最终表现。

总结3:检索侧可以用到的优化的方法:传统检索方法(es,tfidf,bm25,Lucene等)+ 向量检索(开源embedding模型, SimCSE[6])+ 训练Ranker模型[6]。

3.基座模型该如何选择?

方法

模型

说明

最高排名

链接

传统模型

deberta + finetuning + RAG

deberta系列模型做微调后,结合RAG效果也不错,重点是需要优化检索效果

4rd private:0.927

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446307​

中等模型(7B/13B)

Llama-2-7b

Mistral-7B-v0.1

xgen-7b-8k-base

Llama-2-13b + finetuning + RAG

7B/13B左右的模型,经过微调,同时结合RAG,在做融合,效果比较好

1rd

private:0.933

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446358​

大模型(70B)

debertas + Platypus(70B for hard question) + Xwin(70B) + reranker,其中Platypus(70B for hard question)以及reranker带来的提升比较大

大模型主要是解决hard question,带来一定提升

3rd

private:0.928

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446358​

总结1:小模型微调+高质量的检索结果上限也不错。第四名最终只用了deberta模型,另外在检索测利用es等方法做了很多优化,在检索侧做了TTS,最终拿到了第四名。

总结2:大模型微调(7B或者13B左右的模型)可能比小模型微调的上限更高。第一名利用7B左右的模型微调+RAG,一直摇摇领先。

总结3:70B模型zero-shot通用效果就不错,但是在有些方面还打不过微调后的小模型。70B+zero-shot模型大概能达到0.872,总体上表现还不错,但是离要拿到奖牌还有一定距离,微调70B左右的模型效果可能更好,但资源需求也更大,并且不方便做模型融合。

总结4:基座模型可能没那么重要,具体效果的话大概如下:7b/13b + fine-tuning > deberta + fine-tuning > 70b + zero-shot。

4.是否需要对模型在该领域数据上进行微调?


方法

是否微调

分数

链接

longformer/deberta + RAG

不微调

0.862(with RAG, longformer 未微调)

0.89(with RAG,  deberta微调)

​https://www.kaggle.com/code/mbanaei/86-2-with-only-270k-articles​

deberta + 微调 + RAG

微调

0.762(without RAG)

0.90+(with RAG)

​https://www.kaggle.com/code/mewmlelswm/lb-0-762-train-4-fold-and-ensemble​

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446307​

LLama7B

Mistral 7B

不微调

0.656(without RAG)

0.853(with RAG)

​https://www.kaggle.com/code/zzy990106/llama-7b-infer​

​https://www.kaggle.com/code/goelyash/llm-science-mistral-7b​

7B LLama2 + 微调 + RAG

微调

0.84+(without RAG)

0.90+(with RAG)

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446358​

70B LLM + zero-shot + RAG

不微调

0.872(with RAG)

​https://www.kaggle.com/code/zulqarnainali/explained-platypus2-70b-wikipedia-rag​

70B LLM + 微调 + RAG

微调

0.914(with RAG)

​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446414​

总结1:微调特别是小模型微调,能带来不错的提升。deberta模型微调+模型融合也能到0.927左右的分数,和其他模型的最终结果差异没那么大。

总结2:7B/13B左右的模型微调上限可能高于deberta系列模型的微调。第一名提到其7B左右的模型微调效果就已经很不错了(LB 0.92+),融合deberta模型已经不能带来提升了。

总结3:70B大小的模型其zero-shot能力已经相当不错了【需要结合RAG】。开源70B模型+zero-shot+RAG能达到PB 0.872的分数,效果还不错。

四、优胜方案要点分析


leaderboard

方法概述

关键因素

分数

1rd place solution

基座模型:Llama-2-7b,Mistral-7B-v0.1,xgen-7b-8k-base,Llama-2-13b + 是否微调:finetuning

检索增强:1. 探索MTEB top20 embedding模型,挖掘最好的5个。2. 探索更高的数据质量。3. 检索侧做TTS融合。

验证策略:6k STEM数据。

工程:推理加速,包括对context+prompt结果做缓存,优化推理速度,从而可以进行多模型融合。


检索质量,基座模型,工程能力

private:0.933

3rd place solution

基座模型:debertas + Platypus(70B for hard question) + Xwin(70B)

排序模型:reranker +0.912->0.927提升挺大的。

更高的数据质量:利用​​https://github.com/attardi/wikiextractor​​收集更高质量的wiki数据


数据质量,模型融合

  1. Platypus(70B for hard question)
  2. reranker筛选更高质量的context

总结:相当于利用70B模型有更好的通用能力来解决小模型表现不太好的case从而进行融合。

private:0.928

4rd place solution

基座模型:Deberta v3 Large

检索方法:Elasticsearch

检索排序:edit distance + sentence-transformers

检索质量:高质量的检索结果,以及在检索侧做很多TTS优化融合工作带来的提升。

private:0.927

5rd place solution

基座模型:Mistral 7B + Llama-70B

微调方法:QLoRA

检索方法:BM-25(Lucene),参考​​https://www.kaggle.com/code/strifonov/pyserini-scibert​​ + 向量检索

高质量数据:自己处理了wikipedia的数据

增强方法:TTA

融合方法:7B模型简单问题(40%),70B模型苦难问题(60%),更长的context+70B模型预测前两个困难样本(5%)

融合方法:困难问题用70B模型来解决

检索质量:BM25 + 向量检索结合

TTA增强等


private:0.926, public:0.928

7rd palce solution

基座模型:Deberta + LLM

检索方法:tfidf + sentence-transformer

验证集:130k STEM数据

训练:QLoRA SFT训练(7B/13B)

多级模型融合方法:简单模型解决阈值高的问题,模型融合解决稍微复杂一点的问题,LLM模型融合解决hard example

融合方法+检索方法

private:0.925, public:0.931

10rd palce solution

数据:dumps数据,cirrus数据,270k两种数据。

检索方法:tfidf+向量(bge,gte,e5)

切片方法:sliding window,top 10 chunks

模型:deberta

检索质量

private:0.922

14rd palce solution

数据:cirrussearch wiki dump(质量更好点)

检索:向量检索(gte,bge,e5)

模型:deberta 256

融合:TTA(检索结果)

检索结果融合:不同排序的context融合

  • [ 0, 1, 2, 3, 4, 5]
  • [ 0, 6, 7, 8, 9, 10]
  • [ 0, 11, 12, 13, 14, 15]
  • [ 0, 16, 17, 18, 19, 20]

private:0.920

15rd palce solution

数据:6800k wikipedia + 270k

检索方法:tfidf + sentence model(simcse训练)

检索排序:

  1. 6800k wiki -> sentence top1000 -> LBGRanker -> top30 -> sentence model -> top20 -> LB 0.885
  2. 270k tfidf/sentence -> top5/top8 paragraphs

模型:deberta

检索优化+排序模型+检索侧TTS

private:0.920,public:0.934

总结1:RAG检索对于最终效果非常重要。包括不断优化检索数据质量,利用多种检索策略(基于传统方法or基于向量),还可以通过ranker等方法筛选更好的结果。另外检索侧基于不同不用顺序的context做TTS也能带来不错的提升。

总结2:小模型微调效果也不错,大模型(70B)zero-shot能力非常强,大模型胜在通用能力。例如3rd方法采用小模型解决简单问题,大模型解决hard问题的融合策略。

总结3:7B/13B大小的模型可能会成为NLP竞赛的主力军。其模型上限效果不错,可能比deberta类似大小的模型效果更好,同时训练所需资源也较小。

详细解决思路可以参考:https://www.kaggle.com/competitions/kaggle-llm-science-exam/leaderboard

五、总结

  1. RAG检索对于最终效果非常重要。包括不断优化检索数据质量,利用多种检索策略,基于传统方法(es,bm25,tfidf等),基于向量(开源方法,SimCSE训练),还可以通过ranker等方法筛选更好的结果都能带来不错的提升。
  2. 如何有效的检索上下文知识,如何有效的处理长文本知识是难点,还有待进一步探索。本次比赛发现,在检索侧基于不同组合,不同顺序的检索结果做TTS(一种数据侧做融合的方法)能带来非常不错的提升[4][8]。这意味着如果我们在检索侧,长文本理解侧可以做得更好,可能我们不会太依赖检索侧的TTS融合方法,从而降低推理成本。
  3. 大模型的zero-shot能力比较强,胜在通用能力不错。其意味着不微调就可以在很多任务上取得不错的效果。在本次竞赛中开源的70B模型+zero-shot+RAG效果0.875。
  4. 大模型for hard sample + 小模型for simple sample可能是一种不错的融合方式。利用了大模型的通用能力不错,在hard样本上也有着比较强的泛化能力,同时小模型易于训练,微调后在简单样本上表现好的特点。3rd place solution[9]就主要用的这种方法。
  5. 小模型(deberta等)特定领域做微调效果也有一定的发挥之力,同时其有成本优势。deberta微调+RAG可以到0.89左右,利用模型融合甚至可以到前几名0.92+。
  6. 7B/13B大小的模型可能会成为NLP竞赛的主力军。其模型上限效果不错,可能比deberta类似大小的模型效果更好,同时训练所需资源也较小。
  7. 强大的工程能力对LLM的继续发展也非常有用。例如让模型一层一层推理在16GB内存的GPU运行70B大模型[7],以及第一名方案中,对context+prompt结果做缓存,可以减少大量重复上下文或者系统消息(system message)的tokens数量,从而优化LLM推理时间[4]。
  8. 总结提分点:RAG【检索方法,排序方法,TTS策略】 >> 13b+微调 > deberta/longformer + 微调 > 70b zero-shot。

六、References

[1] Ouyang L, Wu J, Jiang X, et al. Training language models to follow instructions with human feedback[J]. Advances in Neural Information Processing Systems, 2022, 35: 27730-27744.

[2] RAG vs Finetuning — Which Is the Best Tool to Boost Your LLM Application?​​https://towardsdatascience.com/rag-vs-finetuning-which-is-the-best-tool-to-boost-your-llm-application-94654b1eaba7​

[3] 利用tfidf传统方法检索相关文档:​​https://www.kaggle.com/code/hxshine/86-2-with-only-270k-articles?scriptVersinotallow=144092114​

[4] 1rd Place Solution:​​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446422​

[5] 大模型Kaggle比赛首秀冠军方案总结:​​https://mp.weixin.qq.com/s/mhLOYWA9KEDANVdkoUpP-Q​

[6] 15rd place solution: ​​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446816​

[7] 利用16GB内存运行70B大模型:​​https://www.kaggle.com/code/zulqarnainali/explained-platypus2-70b-wikipedia-rag​

[8] 4rd Place Solution:​​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446307​

[9] 3rd Place Solution:​​​https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446358​

本文转载自​NLP PaperWeekly​,作者: NLP PaperWeekly 

已于2024-12-4 13:58:31修改
收藏
回复
举报
回复
相关推荐