用 ChatGPT 寫代碼,已經是不少程序員的常規操作了。
△" 至少提速 3~5 倍 "
但你有沒有想過,ChatGPT 生成的代碼,有不少隻是 " 看起來準确 " 而已?
來自伊利諾伊大學香槟分校和南京大學的一項最新研究表明:
ChatGPT 和 GPT-4 生成代碼的準确率,比之前評估的至少要降低 13%!
有網友感歎,太多 ML 論文都在用一些有問題或有局限性的基準來評估模型,來短暫地達到 "SOTA",結果換個測評方法就現出原形了。
還有網友表示,這也說明大模型生成的代碼仍然需要人工監督,"AI 寫代碼的黃金時間還沒到呢 "。
所以,論文提出了一種怎樣的新測評方法?
給 AI 代碼考題加大難度
這個新方法名叫EvalPlus,是一個自動化代碼評估框架。
具體來說,它會通過改進現有評估數據集的輸入多樣性和問題描述準确性,來将這些評估基準變得更嚴格。
一方面是輸入多樣性。EvalPlus 會先根據标準答案,用 ChatGPT 生成一些種子輸入樣例(雖然要測 ChatGPT 的編程能力,但用它生成種子輸入似乎也不矛盾 doge)
随後,用 EvalPlus 改進這些種子輸入,将它們改得更難、更複雜、更刁鑽。
另一方面是問題描述準确性。EvalPlus 會将代碼需求描述改得更精确,在約束輸入條件的同時,補充自然語言問題描述,以提高對模型輸出的精确度要求。
這裏,論文選擇了 HUMANEVAL 數據集作爲示範。
HUMANEVAL 是 OpenAI 和 Anthropic AI 一起制作的代碼數據集,包含 164 個原創編程題,涉及語言理解、算法、數學和軟件面試幾種類型的題目。
EvalPlus 會通過改進這類數據集的輸入類型和功能描述,讓編程問題看起來更清晰,同時用于測試的輸入更 " 刁鑽 " 或是更困難。
以其中的一道求并集編程題爲例,要求 AI 寫一段代碼,找出兩個數據列表中的共同元素,并給這些元素排序。
EvalPlus 用它來測測 ChatGPT 寫的代碼準确度。
首先用幾個簡單輸入進行測試,發現 ChatGPT 能輸出正确答案。但如果換個輸入,就找出了 ChatGPT 版代碼的 bug:
屬實是給 AI 們加大了考題難度。
基于這套方法,EvalPlus 還做了一個改進版 HUMANEVAL+ 數據集,增加輸入的同時,修正了一些 HUMANEVAL 裏面答案就有問題的編程題。
那麽,在這套 " 新考題 " 下,大語言模型們的準确率實際上要打幾折?
LLM 代碼準确率平均降低 15%
作者們測試了當前比較受歡迎的 10 種代碼生成 AI。
GPT-4、ChatGPT、CODEGEN、VICUNA、SANTACODER、INCODER、GPT-J、GPT-NEO、PolyCoder、StableLM- α。
從表格中來看,經過嚴格測試後,這群 AI 的生成準确率都有所下降:
這裏會通過一種名叫 pass@k 的方法評估準确率,其中 k 是允許大模型給問題生成的程序數量,n 是用于測試的輸入數量,c 是正确的輸入數量:
根據新的這套評估标準,大模型們的準确率平均下降了 15%,其中比較廣泛研究的 CODEGEN-16B 更是下降了超過 18%。
至于 ChatGPT 和 GPT-4 生成代碼的性能,也下降了至少 13%。
不過,也有網友表示,大模型生成的代碼效果沒那麽好,已經是 " 衆所周知的事實 " 了,需要研究的是 " 爲什麽大模型寫的代碼不能用 "。
作者介紹
共同一作 Jiawei Liu,伊利諾伊大學香槟分校二年級博士生,研究興趣是編程系統和深度學習。
共同一作 Chunqiu Steven Xia,伊利諾伊大學香槟分校二年級博士生,本科畢業于多倫多大學,研究興趣是機器學習和軟件工程的交叉領域。
王宇峣(Yuyao Wang),南京大學計算機科學大三學生,研究興趣是計算機系統的準确性、可編程性和性能。
Lingming Zhang,伊利諾伊大學香槟分校副教授,研究方向是軟件工程及其與機器學習、編程語言和形式化方法(Formal Methods)的協同作用。
論文地址:
https://arxiv.org/abs/2305.01210
代碼地址:
https://github.com/evalplus/evalplus