天天看點

一個技巧,讓ChatGPT學會複雜程式設計,程式設計水準逼近人類程式員!

作者:夕小瑤科技說

夕小瑤科技說 原創

作者 | 智商掉了一地、Python

随着 AIGC 技術邁出了一大步,ChatGPT 等聊天機器人被頻繁地使用在生活和工作中的各個場景。想象一下,當你寫代碼陷入沒有頭緒的境地或者無法解決 Bug 時,這種基于大型語言模型(LLM)的系統由于有豐富的訓練資料與強大的推理能力,可能會在一些簡單的代碼生成任務上有着出色表現,為你提供靈感。然而,在面對更複雜的代碼生成任務(如競賽級問題)時,仍然存在一定的挑戰。

一個技巧,讓ChatGPT學會複雜程式設計,程式設計水準逼近人類程式員!

有一個名為 BRAINSTORM(頭腦風暴)的新架構或許能更好地應對這個問題,它利用高層次算法藍圖、神經排序模型以及 LLM 的推理能力,來幫助我們生成多樣化的思路并找到最佳的解決方案,它的性能甚至可以達到與人類程式員相當的水準。讓我們一起來看看吧~

論文題目:

Think Outside the Code: Brainstorming Boosts Large Language Models in Code Generation

背景介紹

程式綜合

程式綜合(Program Synthesis)在自動化軟體發現、程式分析和驗證、以及人機互動等領域中有廣泛的應用,它是一種旨在通過自動合成完整的功能程式來解決開發者所提出問題的技術。

傳統方法通常在由底層程式設計語言定義的搜尋空間中搜尋滿足特定任務限制條件的程式。然而,這種方法面臨着搜尋空間複雜和形式規約不足等問題。基于深度學習的程式綜合可以從非正式規範(如自然語言、部分代碼、輸入-輸出示例或僞代碼)中生成程式。目前,深度學習方法主要用于生成特定領域内的短程式或通用程式設計語言中的單行代碼。

競賽級的代碼生成

競賽級代碼生成(Competition-level code generation)是指生成競賽級水準的複雜程式設計解決方案的過程。這需要模型具有更高的推理和抽象能力,能了解和消化更為複雜的任務描述、更長的代碼,以及更多的上下文資訊。研究表明,LLM 在零樣本設定中生成代碼,比針對特定資料集進行微調具有更好的泛化能力。此外,對 GPT-4 的調查表明它能以個位數的通過率解決競賽級程式設計問題。

論文速覽

BRAINSTORM 架構是一種用于競賽級代碼生成的方法,其核心是生成多樣化的思路并從中選擇高品質的思路,進而有效利用 LLM 的算法推理能力。該架構通過設計多種類型的指令,将這些指令與問題描述一起輸入到 LLM 中,以生成多樣化的思路。

一個技巧,讓ChatGPT學會複雜程式設計,程式設計水準逼近人類程式員!

▲圖1 BRAINSTORM 架構的示例

如圖 1 所示,BRAINSTORM 架構包括以下步驟:

  1. 頭腦風暴(Brainstorming):該步驟是 BRAINSTORM 架構的核心,旨在生成各種可能有助于解決給定問題的思路。如圖 2 所示,為了實作這個目标,作者設計了多種類型的指令,并将這些指令與問題描述一起輸入到 LLM 中。
  2. 思路選擇(Idea Selection):在上一步中生成了大量的思路後,需要對它們進行篩選和排序。如圖 3 所示,具體地,使用了一個評估函數來評估每個思路的品質,并選擇最高品質的思路作為最終輸出。
  3. 代碼生成(Code Generation):在上一步中選擇了最佳思路後,需要将其轉換為代碼。具體而言,作者使用了一個代碼生成器來将思路轉換為可執行代碼。而且如圖 4 所示,BRAINSTORM 架構可以在零樣本情況下工作,與少樣本方法不同,這裡不需要任何示例即可實作高效的代碼生成。

實驗

文中進行了多項實驗,對其結果總結如下:

  • 如表 1 和 2 所示,在 APPS 和 CodeContests 基準測試中,作者使用 BRAINSTORM 架構生成代碼,并與其他方法進行比較。結果表明,BRAINSTORM 架構在這兩個基準測試中都顯著提高了 LLM 的性能。 如圖 5 所示,在涉及機率、最短路徑和圖的問題上有顯著的相對改善,并且随着評級的提高,該方法始終優于 ChatGPT 和 COT。
  • 作者還在真實程式設計競賽中進行了實驗,将 BRAINSTORM 架構應用于代碼生成。表 3 的結果表明,該架構可以将 ChatGPT 算法推理能力提高到與人類程式員相當的水準。

這些結果表明,在使用 BRAINSTORM 架構時,LLM 生成的代碼品質更高、更接近人類程式員所寫的代碼。

小結

本文介紹了一種名為BRAINSTORM的新的競賽級别代碼生成架構,其亮點在于:

  1. 提出競賽級别代碼生成架構 BRAINSTORM:通過生成多樣化的思路并從中選擇高品質思路來實作高效代碼生成任務。
  2. 利用 LLM 的算法推理能力:通過設計多種類型的指令來實作生成多樣化的思路,并使用評估函數和代碼生成器将思路轉換為可執行代碼。
  3. 零樣本學習:可以在零樣本情況下工作,不需要任何示例即可實作高效的代碼生成。

随着該領域的進一步探索和發展,我們相信生成更精準、高品質的代碼将成為一種必然趨勢。當更多研究者将目光投入這個領域,那麼我們離解放雙手生成代碼的美好世界也會更近一步~

繼續閱讀