設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

程序員的未來屬于「偽代碼」,Nature 專欄:用 ChatGPT 加速科研編程的三種姿勢

新智元 2023/5/13 18:48:11 責(zé)編:夢澤

ChatGPT 讓科研編程不再難!

基于生成式人工智能工具,比如 ChatGPT、Bard 等聊天機器人的出現(xiàn),以及如何將 AI 工具用于學(xué)術(shù)研究引發(fā)了巨大的爭議,但與此同時,AI 生成的代碼用于科學(xué)研究的價值被忽視了。

與 ChatGPT 生成文本導(dǎo)致的剽竊問題相比,用 AI 抄代碼顯然爭議更小,開放科學(xué)甚至鼓勵「代碼共享」和「代碼重用」,溯源起來也很方便,比如 python 里用到「import」導(dǎo)入依賴包就算引用。

最近 Nature 上發(fā)表了一篇評論文章,作者團隊討論了 ChatGPT 在科學(xué)編程領(lǐng)域的三個潛在能力,包括頭腦風(fēng)暴、分解復(fù)雜任務(wù)、以及處理簡單但耗時的任務(wù)。

文章鏈接:https://www.nature.com/ articles / s41559-023-02063-3

研究人員通過使用 ChatGPT 將自然語言翻譯成計算機可讀代碼,探索了使用生成式 AI 來增強科學(xué)編碼的能力和局限性。

實驗中的例子主要探索了可能與生態(tài)學(xué)、進化及其他領(lǐng)域相關(guān)的通用任務(wù),研究人員發(fā)現(xiàn),使用 ChatGPT 可以完成 80%-90% 的代碼編寫任務(wù)。

如果任務(wù)被分解成小的、可管理的代碼塊,并帶有精確的提示作為查詢,ChatGPT 可以生成非常有用的代碼。

值得注意的是,用 Google 的 Bard 進行同樣的實驗通常會得到類似的結(jié)果,但代碼中的錯誤更多,所以這篇文章主要使用 ChatGPT 進行實驗。

第一作者 Cory Merow 是一位定量生態(tài)學(xué)家,主要研究方向是建立機制模型來預(yù)測人口和社區(qū)對環(huán)境變化的反應(yīng)。即使是最好的數(shù)據(jù)集在預(yù)測全球變化反應(yīng)方面也是不完善的,所以需要開發(fā)一些工具來結(jié)合數(shù)據(jù)源和探索數(shù)據(jù)集,以深入了解生物系統(tǒng)可能發(fā)生的變化。

ChatGPT 助力科學(xué)編碼

ChatGPT 以回歸模型 GPT-3 為基礎(chǔ),在海量的網(wǎng)頁、書籍等文本上進行擬合訓(xùn)練,不需要搜索即可生成文本。

所以 ChatGPT 更擅長內(nèi)插(interpolating,即預(yù)測與訓(xùn)練數(shù)據(jù)相似的文本),而不擅長外推(extrapolating,即預(yù)測與訓(xùn)練樣本不同的新文本)。

訓(xùn)練集的龐大規(guī)模是一個優(yōu)勢,意味著 GPT-3 已經(jīng)看到了大量的語言模式,使其能夠內(nèi)插并增加生成對人類有用回復(fù)的可能性。

不過對代碼生成任務(wù)來說,GPT-3 并不知道如何編程,只是知道代碼看起來像什么樣,以及哪些詞最可能出現(xiàn)在下一個位置,其工作原理類似于自動補全,基于概率模型預(yù)測下一個代碼塊(chunk),塊通常比詞(word)要小,也可以叫做 token

生成正確 token 的概率基于所有 token 的概率乘積,即增加預(yù)測 token 的數(shù)量或降低選中 token 的確定性會增加任務(wù)的難度,從而降低獲得正確 token 的概率。

因此,想要增加正確 token 的概率,需要縮短生成任務(wù)的長度,或是提供更具體的指令。

最后,研究人員提醒,ChatGPT 生成的文本有些看起來像代碼,但可能無法執(zhí)行,所以在編碼過程中需要仔細(xì)觀察調(diào)試。

頭腦風(fēng)暴工具

ChatGPT 可以很好地檢索多個數(shù)據(jù)源,例如在生態(tài)領(lǐng)域可以同時獲取植物性狀、物種分布區(qū)域和氣象數(shù)據(jù)。

雖然 ChatGPT 提供的數(shù)據(jù)有些是不正確的,但通過其提供的鏈接可以很快地校正這些錯誤。

不過 ChatGPT 并不能寫爬蟲從網(wǎng)站上下載數(shù)據(jù),可能是因為 R 語言的包和底層應(yīng)用程序接口(如 R 訪問數(shù)據(jù)庫的協(xié)議)更新過快,畢竟 ChatGPT 的訓(xùn)練數(shù)據(jù)是在 2021 年構(gòu)建的。

ChatGPT 可以在遇到特定問題時提出各種統(tǒng)計技術(shù),在后續(xù)的提問中可以生成更多基于用戶假設(shè)的指導(dǎo)意見,并提供一份初始代碼。

不過綜合(synthesis)過程只適用于提出并交流想法,仍然需要通過傳統(tǒng)的數(shù)據(jù)源(如論文等)進行事實核查。

需要注意的是,一些網(wǎng)站聲稱 ChatGPT 有能力對書籍寫摘要,不過從研究人員的測試結(jié)果來看,這種摘要綜合的結(jié)果完全不對,可能是因為測試用的書籍沒有在 GPT-3 訓(xùn)練集中出現(xiàn)。

更難的任務(wù)需要更多的 debug

ChatGPT 非常擅長生成模板代碼,在特定指令下提供一份包含少量函數(shù)的短腳本代碼。

比如下面的例子中,研究人員要求 ChatGPT 將四個常用函數(shù)的輸入和輸出串一起。并提供一個將此函數(shù)用于模擬數(shù)據(jù)的示例代碼。

可以看到 ChatGPT 生成的結(jié)果幾乎是完美的,調(diào)試代碼只花了幾分鐘,不過需要在提示中非常具體地說明 query,包括提供命名和用到的函數(shù)。

研究人員發(fā)現(xiàn),成功的關(guān)鍵在于:

1、將復(fù)雜任務(wù)分解成多個子任務(wù),每個子任務(wù)最好只需要少數(shù)幾個步驟即可完成,畢竟 ChatGPT 生成的代碼是基于概率文本預(yù)測模型的結(jié)果。

2、ChatGPT 在使用已經(jīng)存在的函數(shù)時表現(xiàn)最佳,因為這時只涉及內(nèi)插而非外推。

例如,使用正則表達(dá)式(regex)從文本中提取信息的代碼對于許多開發(fā)人員來說是非常困難的,不過因為已經(jīng)有正則網(wǎng)站提供了大量在線示例,并可能出現(xiàn)在 ChatGPT 示例中,所以 ChatGPT 寫正則的性能還是不錯的。

3、學(xué)術(shù)界對 ChatGPT 最大的批評之一是其信息來源缺乏透明度。

對于代碼生成任務(wù),通過指定「命名空間」(namespace),即在使用函數(shù)時顯式調(diào)用包名可以實現(xiàn)一定程度的透明性。

不過 ChatGPT 可能會直接復(fù)制個人的公開代碼而沒有引用出來,并且研究人員仍然有責(zé)任驗證正確的代碼歸屬人。

同時,如果要求生成更長的腳本會暴露出一些 ChatGPT 的缺陷,例如偽造函數(shù)名或參數(shù)等,這也是 StackOverflow 禁用 ChatGPT 生成代碼的原因。

但如果用戶提供了一組明確的執(zhí)行步驟,ChatGPT 仍然可以生成一個有用的工作流模板,定義步驟之間的輸入和輸出之間的連接,這可能是用 GPT-3 外推生成新代碼的最有用的途徑。

目前 ChatGPT 還不能將偽代碼(用簡單語言描述的算法步驟) 轉(zhuǎn)換為完美的計算機可執(zhí)行代碼,但這可能離現(xiàn)實并不遙遠(yuǎn)。

ChatGPT 對于初學(xué)者、不熟悉的編程語言來說特別有幫助,因為初學(xué)者只會寫一些較短的腳本,調(diào)試更方便。

ChatGPT 更擅長非創(chuàng)造性任務(wù)

ChatGPT 最擅長解決的是耗時的公式化任務(wù),可用于調(diào)試、檢測和解釋代碼中的錯誤。

ChatGPT 在編寫函數(shù)文檔時也非常有效,例如使用 roxygen 2 的內(nèi)聯(lián)文檔語法,在標(biāo)識出所有參數(shù)及類上非常高效,不過卻很少解釋如何使用函數(shù)。

一個關(guān)鍵的限制是 ChatGPT 的生成被限制在大約 500 個單詞,只能專注于較小代碼塊的生成,同時還可以生成單元測試以自動化確認(rèn)代碼功能。

ChatGPT 給出的大多數(shù)建議在定義測試的結(jié)構(gòu)和檢查預(yù)期的對象類方面是很有幫助的。

最后,ChatGPT 在對代碼進行重新格式化以遵循標(biāo)準(zhǔn)化(例如 Google)代碼樣式方面非常有效。

未來屬于偽代碼

ChatGPT 和其他人工智能驅(qū)動的自然語言處理工具已經(jīng)準(zhǔn)備好將開發(fā)人員的簡單任務(wù)進行自動化,例如編寫短函數(shù),語法調(diào)試,注釋和格式化,而擴展復(fù)雜性取決于用戶的調(diào)試意愿(以及他們的熟練程度)。

研究人員總結(jié)了 ChatGPT 在代碼生成上的功能,可以簡化科學(xué)領(lǐng)域的代碼編寫過程,不過人工檢查仍然是必要的,可運行的代碼并不一定意味著代碼能夠執(zhí)行預(yù)期的任務(wù),因此單元測試或非正式的交互式測試仍然至關(guān)重要。

在解決方案可能由人類開發(fā),并由 ChhatGPT 簡單復(fù)制生成的情況下,確保正確的代碼歸屬人至關(guān)重要。

目前已經(jīng)有聊天機器人開始自動提供指向其來源的鏈接(例如,微軟的必應(yīng)),盡管這一步還處于起步階段。

與傳統(tǒng)方法相比,ChatGPT 提供了一種學(xué)習(xí)編碼技能的替代方法,通過將偽代碼直接轉(zhuǎn)換為代碼,可以緩解編寫初始任務(wù)的障礙。

研究人員懷疑未來的進展將使用 ChatGPT 這樣的工具來自動調(diào)試編寫的代碼,根據(jù)遇到的錯誤迭代地生成、運行和提出新代碼,在實驗過程中,研究人員發(fā)現(xiàn)糾正代碼的能力有限,只有在非常具體的指令針對小代碼塊時才會偶爾成功,調(diào)試過程的效率遠(yuǎn)低于人工調(diào)試。

研究人員猜想,隨著技術(shù)的進步(比如最近發(fā)布的 GPT-4 模型 ,據(jù)稱比 GPT-3 模型大 10 倍),自動化調(diào)試將會得到改進。

未來即將到來,現(xiàn)在是開發(fā)人員學(xué)習(xí)提示工程技能以利用新興 AI 工具的時候了,研究人員預(yù)計,使用人工智能生成的代碼將成為軟件開發(fā)各個方面越來越有價值的技能,這些技能是科學(xué)發(fā)現(xiàn)和理解的基礎(chǔ)。

參考資料:

  • https://www.nature.com/articles/s41559-023-02063-3

本文來自微信公眾號:新智元 (ID:AI_era)

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:ChatGPT,編程

軟媒旗下網(wǎng)站: IT之家 最會買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機APP應(yīng)用 魔方 最會買 要知