Kaggle大模型競賽優勝方案總結與思考
大家好,我是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??
1.Motivation
- 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]
RAG:這種方法將檢索(或搜索)的能力集成到LLM中。它結合了一個檢索系統和一個大模型,前者從大型語料庫中獲取相關文檔片段,后者使用這些片段中的信息生成答案。本質上,RAG 幫助模型“查找”外部信息以改進其響應。
微調:這是采用預先訓練的 LLM 并在較小的特定數據集上對其進行進一步訓練的過程,以使其適應特定任務或提高其性能。通過微調,我們根據數據調整模型的權重,使其更適合我們應用程序的獨特需求。
RAG+微調:在外部知識要求高的情況下,優先RAG,需要模型適配(風格行為詞匯)等,就需要微調,兩者要求都高的話,需要結合使用[5]。
三、關鍵優化思路總結
總體上,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.有哪些好的檢索方法?
總結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數據 | 數據質量,模型融合
總結:相當于利用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融合
| private:0.920 |
15rd palce solution | 數據:6800k wikipedia + 270k 檢索方法:tfidf + sentence model(simcse訓練) 檢索排序:
模型: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
五、總結
- RAG檢索對于最終效果非常重要。包括不斷優化檢索數據質量,利用多種檢索策略,基于傳統方法(es,bm25,tfidf等),基于向量(開源方法,SimCSE訓練),還可以通過ranker等方法篩選更好的結果都能帶來不錯的提升。
- 如何有效的檢索上下文知識,如何有效的處理長文本知識是難點,還有待進一步探索。本次比賽發現,在檢索側基于不同組合,不同順序的檢索結果做TTS(一種數據側做融合的方法)能帶來非常不錯的提升[4][8]。這意味著如果我們在檢索側,長文本理解側可以做得更好,可能我們不會太依賴檢索側的TTS融合方法,從而降低推理成本。
- 大模型的zero-shot能力比較強,勝在通用能力不錯。其意味著不微調就可以在很多任務上取得不錯的效果。在本次競賽中開源的70B模型+zero-shot+RAG效果0.875。
- 大模型for hard sample + 小模型for simple sample可能是一種不錯的融合方式。利用了大模型的通用能力不錯,在hard樣本上也有著比較強的泛化能力,同時小模型易于訓練,微調后在簡單樣本上表現好的特點。3rd place solution[9]就主要用的這種方法。
- 小模型(deberta等)特定領域做微調效果也有一定的發揮之力,同時其有成本優勢。deberta微調+RAG可以到0.89左右,利用模型融合甚至可以到前幾名0.92+。
- 7B/13B大小的模型可能會成為NLP競賽的主力軍。其模型上限效果不錯,可能比deberta類似大小的模型效果更好,同時訓練所需資源也較小。
- 強大的工程能力對LLM的繼續發展也非常有用。例如讓模型一層一層推理在16GB內存的GPU運行70B大模型[7],以及第一名方案中,對context+prompt結果做緩存,可以減少大量重復上下文或者系統消息(system message)的tokens數量,從而優化LLM推理時間[4]。
- 總結提分點: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
