如何獲取高質(zhì)量數(shù)據(jù)進(jìn)行代碼指令調(diào)優(yōu)?
之前很多研究都是生成、發(fā)現(xiàn)、過濾高質(zhì)量的通用指令微調(diào)數(shù)據(jù),而大家對代碼任務(wù)的越發(fā)關(guān)注,如何構(gòu)建更好的代碼指令調(diào)整數(shù)據(jù)也越發(fā)重要。
下面給大家?guī)硪黄Y選高質(zhì)量代碼指令微調(diào)數(shù)據(jù)的文章,主要基于指令的復(fù)雜性、回復(fù)質(zhì)量和指令的多樣性三個維度來進(jìn)行樣本的篩選,同時也指出了當(dāng)前部分代碼指令數(shù)據(jù)在HumanEval上存在嚴(yán)重的數(shù)據(jù)泄露。
Paper: https://arxiv.org/abs/2409.03810
Github: https://github.com/banksy23/XCoder
Data-HF: https://huggingface.co/datasets/banksy235/XCoder-80K
數(shù)據(jù)篩選
數(shù)據(jù)篩選過程主要從三個維度(指令復(fù)雜性、響應(yīng)質(zhì)量和指令多樣性)從數(shù)據(jù)池中選擇樣本。
對于一個數(shù)據(jù)池 ,首先使用復(fù)雜性評分器 和單元測試模型 來計算每個數(shù)據(jù)的復(fù)雜性評分 和質(zhì)量評分 。然后,對復(fù)雜性評分和質(zhì)量評分進(jìn)行歸一化得到 和 ,經(jīng)過線性組合后,得到整體評分 ,最后將數(shù)據(jù)池 進(jìn)行排序,并根據(jù)多樣性進(jìn)行迭代采樣,直到篩選數(shù)據(jù)集 達(dá)到預(yù)計大小為止,算法流程如下圖所示。
- 復(fù)雜性評分器:利用self-instruct方法獲取一個小規(guī)模的種子數(shù)據(jù) ,然后根據(jù)WizardCoder方法進(jìn)行提示詞 次深度進(jìn)化,產(chǎn)生 輪次數(shù)據(jù),將輪次是為復(fù)雜性的度量值,訓(xùn)練復(fù)雜性評分器。
- 單元測試模型:代碼通過測試用例數(shù)量可以作為響應(yīng)質(zhì)量的度量,利用6k數(shù)據(jù)訓(xùn)練LLaMA3-70B-Base模型來作為單元測試模型。在測試過程中,單元測試模型為每個訓(xùn)練樣本生成12個測試用例,并執(zhí)行單元測試程序,將通過的測試用例數(shù)量作為質(zhì)量評分。
- 多樣性采樣:迭代式從數(shù)據(jù)池中選擇樣本 ,當(dāng)該樣本對數(shù)據(jù)集 多樣性做成貢獻(xiàn)時,填入數(shù)據(jù)集 。樣本 的多樣性的貢獻(xiàn)采用 表示,當(dāng) 為真時,值等于1,被填入數(shù)據(jù)集 。 為樣本 與 中最近樣本之間的嵌入距離,τ
效果分析
為了構(gòu)建最佳的代碼指令微調(diào)數(shù)據(jù)集,收集了各種可用的開源數(shù)據(jù)集,共2.5M樣本。優(yōu)于數(shù)據(jù)池過大,經(jīng)過以下步驟過濾、去重,最終獲得336K樣本。
- 選取學(xué)術(shù)工作數(shù)據(jù)集:Magicoder-OSS-Instruct、Magicoder-Evol-Instruct和Code-Feedback
- 選擇了長度最長的200K個樣本
- 選擇復(fù)雜性評分最高的200K個樣本
- 去重
LLaMA3-8B-Base上采用Xcoder數(shù)據(jù)進(jìn)行了實驗,如下表所示,在僅使用40K數(shù)據(jù)在LiveCodeBench和BigCodeBench上就取得了優(yōu)于基線的性能;增加到80K數(shù)據(jù)時,指標(biāo)持續(xù)提高。
基于LLaMA3-70B-Base在Xcoder數(shù)據(jù)上訓(xùn)練了XCoder-70B模型,成為效果最佳的開源的代碼大模型。
HumanEval上不是最優(yōu),是因為Magicoder-Evol-Instruct和Codefuse-Evol-Instruct數(shù)據(jù)在HumanEval存在數(shù)據(jù)泄露情況。
并提出了TLI(測試泄露指標(biāo))來量化訓(xùn)練集對測試集泄露數(shù)據(jù)程度。主要對兩個數(shù)據(jù)集生成n-gram片段,并測量每個測試樣本的n-gram片段與所有訓(xùn)練樣本的n-gram片段之間的重疊情況,其中,測試樣本中的公共n-gram片段個數(shù)與測試樣本中的總n-gram片段個數(shù)的比率作為測試樣本 與訓(xùn)練樣本 之間的相似度分?jǐn)?shù)。所有測試集中的相似度分?jǐn)?shù)的平均值作為TLI值,其中,TLI值越高,泄露風(fēng)險越大。
消融實驗,三個維度的指標(biāo)對于最終數(shù)據(jù)的選擇均有益。
針對復(fù)雜性評估,可以發(fā)現(xiàn)雜性評分器 > 指令長度 > 困惑度 > 隨機(jī)。
針對單元測試模型,可以發(fā)現(xiàn)訓(xùn)練的Llama3-70模型由于GPT4模型。
并且Xcoder選擇10K數(shù)據(jù)的訓(xùn)練效果,就堪比隨機(jī)選擇160K數(shù)據(jù)效果。
同時,分析了XCoder的數(shù)據(jù)組成,重新評估了不同數(shù)據(jù)源的優(yōu)勢和劣勢。
寫在最后
大模型發(fā)展到現(xiàn)在,合成數(shù)據(jù)的重要性不言而喻,但需要我們注意的一點是,如果一味的增加低質(zhì)量數(shù)據(jù)或模式固定的單一數(shù)據(jù),除了增加模型訓(xùn)練時間外,毫無用處,甚至?xí)砟P瓦^擬合等負(fù)面影響。
因此,大模型在微調(diào)過程中,無論是通用任務(wù)、還是代碼任務(wù),對數(shù)據(jù)進(jìn)行多樣性、質(zhì)量的選擇是有必要的,也許提分就在這毫厘之間。
本文轉(zhuǎn)載自 ??NLP工作站??,作者: 劉聰NLP
