打造能自己寫程式碼的機器,這是電腦科學和人工智慧先鋒一直在追尋的目標。而隨著 GPT 類大模型的快速發展,這樣的目標正從遙不可及開始變得近在咫尺。
大語言模型 (Large Language Models) 的出現,讓模型的程式設計能力越來越受到研究者的關注。在此態勢下,上海交通大學 APEX 實驗室推出了 CodeApex-- 一個專注於評估 LLMs 的程式理解和程式碼產生能力的雙語基準資料集。
在評估大語言模型的程式理解能力上,CodeApex 設計了三種類型的選擇題:概念理解、常識推理和多跳推理。此外,CodeApex 還利用演算法問題和相應的測試案例來評估 LLMs 的程式碼產生能力。 CodeApex 總共評估了 14 個大語言模型在程式碼任務上的能力。其中 GPT3.5-turbo 表現出最佳的程式設計能力,在這兩個任務上分別實現了約 50% 和 56% 的精確度。可以看到,大語言模型在程式設計任務上仍有很大的改進空間,打造能自己寫程式碼的機器,這樣的未來十分可期。
##程式設計理解和程式碼產生是軟體工程中的關鍵任務,在提高開發人員生產力、增強程式碼品質和自動化軟體開發過程中起著關鍵作用。然而,由於程式碼的複雜性和語義多樣性,這些任務對於大模型來說仍然具有挑戰性。與普通的自然語言處理相比,使用 LLMs 產生程式碼需要更加強調語法、結構、細節處理和上下文理解,對生成內容的準確度有極高要求。傳統的方法包括基於語法規則的模型、基於模板的模型和基於規則的模型,它們通常依賴人工設計的規則和啟發式演算法,這些規則和演算法在覆蓋範圍和準確性方面受到限制。
近年來,隨著 CodeBERT 和 GPT3.5 等大規模預訓練模型的出現,研究人員開始探索這些模型在程式理解和程式碼產生任務中的應用。這些模型在訓練期間整合了程式碼生成任務,使它們能夠理解並產生程式碼。然而,由於缺乏標準的、公開可用的、高品質的、多樣化的基準資料集,對 LLMs 在程式碼理解和生成方面的進步進行公平的評估是很困難的。因此,建立一個廣泛涵蓋程式碼語義和結構的基準資料集對於促進程式設計理解和程式碼生成的研究至關重要。
現有的程式碼基準資料集在應用於 LLMs 時,存在著適用性和多樣性的問題。例如,部分資料集更適用於評估 Bert 類型的、雙向語言建模的 LLMs。而現存的多語言程式碼基準資料集(例如 Human-Eval)包含的問題比較簡單、缺乏多樣性、只能實現一些基本的功能程式碼。
為了彌補以上空白,上海交通大學 APEX 資料與知識管理實驗室建構了一個新的大模型程式碼理解與產生的評測基準 --CodeApex。作為一個開創性的雙語(英語,漢語)基準資料集,CodeApex 專注於評估 LLMs 的程式設計理解和程式碼產生能力。
CodeApex 的整體實驗場景如上圖所示。
第一個任務程式理解包含 250 道單項選擇題,分為概念理解、常識推理和多跳推理。用於測試的題目選自高校的不同課程 (程式設計、資料結構、演算法) 的期末考題目,大大降低了資料已經在 LLMs 訓練語料庫中的風險。 CodeApex 在 0-shot、2-shot、5-shot 三個場景下測試了 LLMs 的程式碼理解能力,並同時測試了 Answer-Only 和 Chain-of-Thought 兩種模式對於 LLMs 能力的影響。
第二個任務代碼產生包括 476 個基於 C 的演算法問題,涵蓋了常見的演算法知識點,如二分搜尋、深度優先搜尋等。 CodeApex 給出了問題的描述和實現問題的函數原型,並要求 LLMs 完成函數的主要部分。 CodeApex 也提供了function-only 和function-with-context 兩個場景,它們的差異是:前者只有目標函數的描述,而後者除了目標函數的描述之外,還被提供了目標函數的呼叫程式碼、時間空間限制、輸入輸出描述。
實驗結果表明,不同模型在程式碼相關任務中的表現不同,GPT3.5-turbo 表現出卓越的競爭力和明顯的優勢。此外,CodeApex 比較了 LLMs 在雙語場景下的表現,揭示了不同的結果。總體而言,在 CodeApex 排行榜中,LLMs 的準確性仍有很大的提高空間,這表明 LLMs 在程式碼相關任務中的潛力尚未完全開發。
要將大語言模型完全整合到實際程式碼生產場景中,程式設計理解是不可或缺的。程式設計理解需要從各個方面理解程式碼的能力,例如對語法的掌握、對程式碼執行流程的理解以及對執行演算法的理解。
CodeApex 從大學期末考題目中抽取了 250 道選擇題作為測驗數據,這些測驗數據被分成了三類:概念理解、常識推理、多跳推理。
測試模式包含兩個類別:Answer-Only 和 Chain-of-Thought。
CodeApex 在程式碼理解任務上的中英評測結果如以下兩表所示。 (表現最好的模型加粗顯示;表現次好的模型以底線標註。)
################################################################從中可以得到以下結論:######
训练大语言模型生成准确且可执行的代码是一项具有挑战性的任务。CodeApex 主要评估 LLMs 基于给定描述生成算法的能力,并通过单元测试自动评估生成代码的正确性。
CodeApex 的代码生成任务包括 476 个基于 C 的算法问题,涵盖了常见的算法知识点,如二分搜索和图算法等。CodeApex 给出了问题的描述和实现问题的函数原型,并要求 LLMs 完成函数的主要部分。
CodeApex 提供了 Function-only 和 Function-with-context 两种场景。Function-only 场景只提供了目标函数的描述,而 Function-with-context 场景不仅提供了目标函数描述,还提供了目标函数的调用代码、 时间空间限制、输入输出描述。
每种语言版本都采用了两种 Prompt 策略 (Function-Only 和 Function-with-Context)。为了和人类代码测试场景对齐,评估指标包括了 AC@1, AC@all 和 AC 率。
各模型的代码生成任务结果如以下两张表格所示。(表现最好:加粗;表现次好:下划线。)
可以得到以下结论:
此外,CodeApex 还提供了每种场景中可编译代码的比例。在将生成函数和主函数连接起来之后,可编译的代码再去通过测试用例进行检查。
可以看到:
CodeApex 作为一个关注 LLMs 编程能力的双语基准,评估了大语言模型的编程理解和代码生成能力。在编程理解上,CodeApex 在三类选择题中评估了不同模型的能力。在代码生成上,CodeApex 利用测试代码用例的通过率来评估模型的能力。对于这两个任务,CodeApex 精心设计了 Prompt 策略,并在不同的场景下进行了比较。CodeApex 在 14 个 LLMs 上进行了实验评估,包括通用 LLMs 和基于代码微调的专用 LLMs 模型。
目前,GPT3.5 在编程能力方面达到了比较良好的水平,在编程理解和代码生成任务上分别实现了大约 50% 和 56% 的精度。CodeApex 显示,大语言模型在编程任务上的潜力尚未被完全开发。我们期待在不久的将来,利用大型语言模型生成代码将彻底改变软件开发领域。随着自然语言处理和机器学习的进步,这些模型在理解和生成代码片段方面将变得更加强大和熟练。开发人员将发现他们在编码工作中拥有了一个前所未有的盟友,因为他们可以依靠这些模型来自动化繁琐的任务,提高他们的生产力,并提高软件质量。
在未来,CodeApex 将发布更多用于测试大语言模型代码能力的测试(例如代码校正),CodeApex 的测试数据也会持续更新,加入更多元的代码问题。同时,CodeApex 榜单也会加入人类实验,将大语言模型的代码能力和人类水平做对比。CodeApex 为大语言模型编程能力的研究提供了基准与参考,将促进大语言模型在代码领域的发展与繁荣。
上海交大 APEX 数据与知识管理实验室成立于 1996 年,其创办人为 ACM 班总教头俞勇教授。实验室致力于探索将数据有效挖掘和管理并总结出知识的人工智能技术,发表 500 篇以上国际学术论文,并追求在实际场景中的落地应用。27 年来,APEX 实验室在多次世界技术浪潮中成为全球范围内的先锋者,实验室于 2000 年开始研究语义网(现称知识图谱)核心技术,于 2003 年开始研究个性化搜索引擎和推荐系统技术,于 2006 年开始研究迁移学习理论与算法,于 2009 年开始探索深度学习技术并基于 GPU 开发神经网络训练库。产出丰硕的科研和落地成果的同时,APEX 实验室也锻炼出了一支功底扎实的数据科学与机器学习研究团队,走出了包括薛贵荣、张雷、林晨曦、刘光灿、王昊奋、李磊、戴文渊、黎珍辉、陈天奇、张伟楠、杨笛一等人工智能领域杰出校友。
以上是上海交大發布大模型雙語程式評估基準CodeApex,機器真的開始挑戰人類寫程式了嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!