大家好,我是HxShine。
LLM的Reward模型该如何训练呢?今天对Kaggle LLM比赛LLM Science Exam 的一些优胜方法做一个总结,这是Kaggle竞赛平台第一次举办LLM相关比赛,赛题就是探索如何训练一个science-based Reward Model。
优胜方案中,如何利用RAG(检索增强)方法提高模型的上限,如何通过传统方法以及向量检索方法提高检索知识的质量,如何使用LoRA,QLoRA等技术对LLaMa2等系列进行微调,甚至在16GB内存的GPU上对70B大小的LLM进行推理[7]等很多技术都值得我们学习,相信大家看完会有所收获。
Title:Kaggle - LLM Science Exam Use LLMs to answer difficult science questions
比赛排行榜:https://www.kaggle.com/competitions/kaggle-llm-science-exam/leaderboard
赛题:从大模型生成的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条数据。
RAG:这种方法将检索(或搜索)的能力集成到LLM中。它结合了一个检索系统和一个大模型,前者从大型语料库中获取相关文档片段,后者使用这些片段中的信息生成答案。本质上,RAG 帮助模型“查找”外部信息以改进其响应。
微调:这是采用预先训练的 LLM 并在较小的特定数据集上对其进行进一步训练的过程,以使其适应特定任务或提高其性能。通过微调,我们根据数据调整模型的权重,使其更适合我们应用程序的独特需求。
RAG+微调:在外部知识要求高的情况下,优先RAG,需要模型适配(风格行为词汇)等,就需要微调,两者要求都高的话,需要结合使用[5]。
总体上,RAG + LLM结合的模型可以在知识来源、检索方法、基座模型及其尺寸、是否需要微调等多个方面进行优化,针对本次比赛,对我收集到的一些方法进行对比,方便大家参考。
说明:主要探索不用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-1https://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/446422v |
总结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]几乎把全部精力都放在检索端。
方法 | 说明 | 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-articlesembedding方案: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/446307https://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]。
方法 | 模型 | 说明 | 最高排名 | 链接 |
传统模型 | deberta + finetuning + RAG | deberta系列模型做微调后,结合RAG效果也不错,重点是需要优化检索效果 | 4rd private:0.927 | https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446307 |
中等模型(7B/13B) | Llama-2-7bMistral-7B-v0.1xgen-7b-8k-baseLlama-2-13b + finetuning + RAG | 7B/13B左右的模型,经过微调,同时结合RAG,在做融合,效果比较好 | 1rdprivate: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,带来一定提升 | 3rdprivate: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。
方法 | 是否微调 | 分数 | 链接 |
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-ensemblehttps://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446307 |
LLama7BMistral 7B | 不微调 | 0.656(without RAG)0.853(with RAG) | https://www.kaggle.com/code/zzy990106/llama-7b-inferhttps://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数据 | 数据质量,模型融合Platypus(70B for hard question)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训练)检索排序:6800k wiki -> sentence top1000 -> LBGRanker -> top30 -> sentence model -> top20 -> LB 0.885270k 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] 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?scriptVersionId=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
ICLR 2023 | Self-Consistency: Google超简单方法改善大模型推理能力
LLama2详细解读 | Meta开源之光LLama2是如何追上ChatGPT的?
大模型开源之光LLaMA2今天发布了,再来读下LLaMA1原文吧
Meta AI | 指令回译:如何从大量无标签文档挖掘高质量大模型训练数据?
TOT(Tree of Thought) | 让GPT-4像人类一样思考
OpenAI | Let’s Verify Step by Step详细解读
进技术交流群请添加我微信:FlyShines
请备注昵称+公司/学校+研究方向,否则不予通过
如果觉得文章能够帮助到你,点赞是对我最好的支持!