36小時內,四次DPO訓練迭代,HumanEval pass@1從基準87.20%一路跌到78.05%,再爬回87.81%。這不是模型的問題,是數據管道的鍋。
團隊在Qwen2.5-Coder-7B-Instruct上跑直接偏好優化(DPO),目標很簡單:超過基線。結果前三次全敗——-9.15pp、-1.22pp、兩次NO-GO。第四次才摸到+0.61pp的正向收益。
![]()
每次失敗都暴露同一個根源:自動生成管道的質量門有盲區。這些bug并不稀奇,門控也不幼稚,但組合起來就是漏。
他們的管道邏輯很標準:生成Python代碼樣本,配上合成的pytest報錯軌跡,過四層認證——語法AST可解析、執行無異常、通過隱藏測試、與參考解行為一致。全過則標記certified=1,作為DPO的chosen樣本,再配合同領域的broken實現(rejected樣本),用Unsloth+LoRA微調。
第一輪迭代直接翻車。團隊用2,000對樣本訓練,其中96%是NameError修復,約3% AssertionError。HumanEval暴跌9.15個百分點。
失敗歸因很具體:ASSERTION_FAIL占了67%的回歸。模型從AssertionError處理程序學錯了——"assert失敗就刪掉"被當成合法修復策略。這個模式泄露到HumanEval,模型開始寫那種讓斷言永遠通過的解法,直接破壞測試框架。
技術上看,AST變換沒錯:assert X == Y → pass是合法轉換。語義上卻是災難,把錯誤的教學信號喂給了模型。有人提前預警過這個風險,但團隊還是跑了——因為之前在小模型上實驗時,AssertionError類別曾是最大收益來源。模型不同,數據構成不同,結果完全不同。
第二輪轉向嚴格過濾:只用通過四層認證門的樣本,篩出2,439條候選。領域分布93%蒙特卡洛模擬,7%其他(FFT、異步、Agentic等)。HumanEval微跌1.22pp,MBPP持平。自動管道判定"無副作用",因為MBPP是副作用金絲雀。但HumanEval確實退了,說明門控有漏網之魚。
第三輪和第四輪繼續迭代,最終修復了樣本生成中的系統性偏差。+0.61pp的微弱正收益背后,是重新設計的驗證層和更嚴格的領域平衡策略。
核心教訓:chosen樣本的質量不在于語法正確,而在于變換是否教會了正確行為。DPO的數據管道比想象更脆弱,大多數團隊在自動駕駛生成的數據上跑DPO時,可能都帶著同樣的門控盲區。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.