譯者 | 李睿
本文作者Martin Heller是一名Web和Windows編程顧問,也是行業(yè)媒體InfoWorld的特約編輯和評論員。Heller表示,他在2021年11月撰寫關于GitHub Copilot的文章時,Copilot是當時發(fā)布的為數(shù)不多的人工智能代碼生成技術之一。他將GitHub Copilot作為Visual Studio代碼擴展進行了測試。當時,Copilot并不總是能生成良好的、正確的、甚至是可運行的代碼,但它仍然有一些用處。Copilot(以及其他使用機器學習的代碼生成器)背后的巨大承諾是,它的設計是通過將用戶反饋和將新代碼樣本攝取到其訓練語料庫中,并且隨著時間的推移而改進。
截至2023年5月,僅Visual Studio code就有數(shù)百個“人工智能”或“代碼生成”擴展可用。其中一些可能會在編碼時為用戶節(jié)省一些時間,但是用戶不能在沒有檢查、測試和調試的情況下就相信它們生成的代碼。
圖1
市場上有數(shù)以百計的Visual Studio Code承諾“代碼生成”或“人工智能”擴展可用,但實際上只有一小部分基于機器學習生成代碼
在這一領域一個很有前途的發(fā)展是一些工具可以自動生成單元測試。生成單元測試是一個比生成通用代碼更容易處理的問題——事實上,它可以使用簡單的模式來完成,但是用戶仍然需要檢查和運行生成的測試,以確定它們是否有意義。
本文將簡要介紹語言模型的歷史,然后考察最先進的大型語言模型(LLM),例如OpenAI公司的GPT家族和谷歌公司的LaMDA和PaLM,它們目前用于文本生成和代碼生成。最后,將簡單介紹10個代碼生成工具,其中包括Amazon CodeWhisperer、Google Bard和GitHub Copilot X等。
人工智能文本生成模型發(fā)展簡史
語言模型可以追溯到安德烈·馬爾科夫在1913年提出的馬爾可夫鏈,這是馬爾可夫模型的一個特例。馬爾科夫指出,在俄語中,特別是在普希金的韻文小說《尤金·奧涅金》中,一個字母出現(xiàn)的概率取決于前一個字母,而且一般來說,輔音和元音往往交替出現(xiàn)。此后,馬爾可夫方法被推廣到詞匯、其他語言和其他語言應用中。
1948年,克勞德·香農(Claude Shannon)在通信理論方面擴展了馬爾可夫的理論,1985年,IBM公司的Fred Jelinek和Robert Mercer再次擴展了馬爾科夫的理論,產(chǎn)生了一個基于交叉驗證(他們稱之為刪除估計)的語言模型,并將其應用于實時、大詞匯量的語音識別。從本質上講,統(tǒng)計語言模型為單詞序列分配概率。
要想快速查看語言模型的運行情況,可以在谷歌搜索或智能手機上的短信應用程序中輸入幾個單詞,并允許它提供自動完成選項。
2000年,Yoshua Bengio等人發(fā)表了一篇關于神經(jīng)概率語言模型的論文,其中神經(jīng)網(wǎng)絡取代了統(tǒng)計語言模型中的概率,繞過了維度的詛咒,并將單詞預測(基于以前的單詞)提高了20%~35%,而不是平滑的三元模型(當時是最新技術)。語言的前饋、自回歸、神經(jīng)網(wǎng)絡模型的思想至今仍在使用,盡管這些模型現(xiàn)在有數(shù)十億個參數(shù),并且是在廣泛的語料庫上訓練的,因此有了“大型語言模型”這個術語。
正如人們將看到的,隨著時間的推移,語言模型的規(guī)模不斷變得更大,以使它們表現(xiàn)得更好。然而,這樣做是有代價的。2021年發(fā)表的論文《隨機鸚鵡的危險:語言模型是否太大?》的作者Emily Bender、Timnit Gebru質疑人們是否在這一趨勢上走得太遠。他們建議,除了其他事項之外,人們應該首先權衡環(huán)境和財務成本,并將資源投入到整理和仔細記錄數(shù)據(jù)集上,而不是從網(wǎng)絡上攝取一切。
Gebru和Bender后來都因為指責谷歌公司在人工智能的道德應用問題而辭職。Bender現(xiàn)在入職華盛頓大學,而Gebru創(chuàng)立了分布式人工智能研究所。
用于文本生成的大型語言模型
最近大型語言模型的爆發(fā)是由Google Brain項目和Google Research項目的Ashish Vaswani等人在2017年發(fā)表的論文《注意力就是你所需要的一切》引發(fā)的。該論文介紹了“Transformer這種新的簡單網(wǎng)絡架構,它完全基于注意力機制,完全省去了遞歸和卷積。”Transformer模型比遞歸和卷積模型更簡單,也更優(yōu)越。它們訓練所需的時間也顯著減少。
ELMo
ELMo是AllenNLP在2018年推出的深度語境化單詞表示(參見ELMo論文),它既模擬了單詞使用的復雜特征(例如語法和語義),也模擬了這些用法在不同的語言語境中是如何變化的(例如建模多義性)。其最初的模型有9360萬個參數(shù),并在十億個單詞基準上進行訓練。
BERT
BERT是來自Google AI Language的2018年語言模型,基于該公司的Transformer(2017)神經(jīng)網(wǎng)絡架構(參見BERT論文)。BERT的目的是通過在所有層中對左右場景進行聯(lián)合條件反射,從未標記的文本中預訓練深度雙向表示。原文中使用的兩種模型規(guī)模分別是1億個參數(shù)和3.4億個參數(shù)。BERT使用掩碼語言建模(MLM),其中約15%的令牌被“破壞”用于訓練。它是在英文維基百科和多倫多圖書語料庫上訓練的。
T5
來自谷歌的2020文本到文本傳輸轉換器(T5)模型(見T5論文)使用一個新的開源預訓練數(shù)據(jù)集,稱為Colossal Clean Crawled Corpus (C4),基于來自GPT、ULMFiT、ELMo和BERT及其后繼者的最佳遷移學習技術,綜合了一個新的模型。C4是一個基于CommonCrawl數(shù)據(jù)集的800GB數(shù)據(jù)集。T5將所有自然語言處理任務重新構建為統(tǒng)一的文本到文本格式,其中輸入和輸出始終是文本字符串,而BERT風格的模型只輸出一個類標簽或輸入的一個范圍。基本的T5模型總共有大約2.2億個參數(shù)。
GPT家族
OpenAI公司是一家人工智能研究和部署公司,其使命是“確保通用人工智能(AGI)造福人類”。當然,OpenAI公司還沒有實現(xiàn)通用人工智能(AGI)。一些人工智能研究人員(例如Meta-FAIR的機器學習先驅Yann LeCun)認為OpenAI公司目前研究的通用人工智能(AGI)方法是一條死胡同。
OpenAI公司開發(fā)了GPT語言模型家族,這些模型可以通過OpenAI API和微軟的Azure OpenAI服務獲得。需要注意的是,整個GPT系列都是基于谷歌公司的2017 Transformer神經(jīng)網(wǎng)絡架構,這是合法的,因為谷歌公司開放了Transformer的源代碼。
GPT(生成預訓練Transformer)是OpenAI公司在2018年開發(fā)的一個模型,使用了大約1.17億個參數(shù)(參見GPT論文)。GPT是一個單向轉換器,它在多倫多圖書語料庫上進行了預訓練,并使用因果語言建模(CLM)目標進行了訓練,這意味著它被訓練為預測序列中的下一個標記。
GPT-2是GPT的2019年直接擴展版,具有15億個參數(shù),在800萬個網(wǎng)頁或約40GB的文本數(shù)據(jù)集上進行了訓練。OpenAI公司最初限制使用GPT-2,因為它“太好了”,會產(chǎn)生“假新聞”。盡管隨著GPT-3的發(fā)布,潛在的社會問題變得更加嚴重,但該公司最終還是讓步了。
GPT-3是一個2020年開發(fā)的自回歸語言模型,具有1750億個參數(shù),在Common Crawl、WebText2、Books1、Books2和英語維基百科的過濾版本的組合上進行訓練(見GPT-3論文)。GPT-3中使用的神經(jīng)網(wǎng)絡與GPT-2中使用的類似,有幾個額外的塊。
GPT-3最大的缺點是它容易產(chǎn)生“幻覺”,換句話說,它在沒有辨別依據(jù)的情況下編造事實。GPT-3.5和GPT-4也有同樣的問題,盡管程度較輕。
CODEX是GPT-3在2021年推出的新一代模型,針對5400萬個開源GitHub存儲庫的代碼生成進行了微調。這是GitHub Copilot中使用的模型,將在下一節(jié)中討論。
GPT-3.5是GPT-3和CODEX在2022年的一組更新版本。GPT-3.5-turbo模型針對聊天進行了優(yōu)化,但也適用于傳統(tǒng)的完成任務。
GPT-4是一個2023年的大型多模態(tài)模型(接受圖像和文本輸入,發(fā)出文本輸出),OpenAI公司聲稱它在各種專業(yè)和學術基準上表現(xiàn)出人類水平的性能。GPT-4在許多模擬考試中表現(xiàn)優(yōu)于GPT-3.5,包括統(tǒng)一律師考試、LSAT、GRE和幾個AP科目考試。
值得關注的是,OpenAI公司沒有解釋GPT-4是如何訓練的。該公司表示,這是出于競爭原因,考慮到微軟公司(一直在為OpenAI公司提供資金)和谷歌公司之間的競爭,這在一定程度上是有道理的。然而,不知道訓練語料庫中的偏差意味著人們不知道模型中的偏差。
Emily Bender對GPT-4的看法(于2023年3月16日發(fā)表在Mastodon上)是“GPT-4應該被認為是有毒的垃圾,除非OpenAI公司對其訓練數(shù)據(jù)、模型架構等進行開放。”
ChatGPT和BingGPT是最初基于GPT-3.5-turbo的聊天機器人,并于2023年3月升級為使用GPT-4。目前使用基于GPT-4的ChatGPT版本,需要訂閱ChatGPTPlus;贕PT-3.5的標準ChatGPT是根據(jù)2021年9月截止的數(shù)據(jù)進行訓練的。用戶可以在微軟Edge瀏覽器中訪問BingGPT,它也接受了2021年中斷的數(shù)據(jù)的訓練,但它說(當你問它時) “我正在不斷學習,并用網(wǎng)絡上的新信息更新我的知識。”
圖2 BingGPT在圖片右側解釋其語言模型和訓練數(shù)據(jù)
2023年3月初,香港科技大學人工智能研究中心的Pascale Fung就ChatGPT評估進行了演講。
LaMDA(對話應用程序語言模型)是谷歌2021年的“突破性”對話技術,是2017年針對對話訓練的Transformer模型,經(jīng)過微調,可以顯著提高其反應的敏感性和特異性。LaMDA的優(yōu)勢之一是它可以處理人類對話中常見的話題漂移。
LaMDA的一個版本為谷歌公司的對話式人工智能服務Bard提供了動力。Bard于2023年3月21日發(fā)布,并于2023年5月10日全面發(fā)布。以下將討論它的代碼生成功能。
PaLM
PaLM (路徑語言模型)是來自Google Research的2022年密集的純解碼器Transformer模型,具有5400億個參數(shù),使用Pathways系統(tǒng)進行訓練(參見PaLM論文)。PaLM是使用英語和多語言數(shù)據(jù)集的組合進行培訓的,這些數(shù)據(jù)集包括高質量的網(wǎng)絡文檔、書籍、維基百科、對話和GitHub代碼。
谷歌公司還為PaLM創(chuàng)建了一個“無損”詞匯表,它保留了所有空白(對代碼尤其重要),將詞匯表外的Unicode字符拆分成字節(jié),并將數(shù)字分割成單獨的令牌,每個數(shù)字一個令牌。PaLM Coder是PaLM 540B的一個版本,僅對Python代碼數(shù)據(jù)集進行了微調。
PaLM-E
PaLM-E是谷歌公司在2023年推出的“具體化”(用于機器人)多模態(tài)語言模型。研究人員從一個強大的大型語言模型PaLM開始,并通過補充機器人代理的傳感器數(shù)據(jù)來具體化它(PaLM-E中的“E”)。PaLM-E也是一個功能強大的視覺和語言模型。除了PaLM之外,它還集成了ViT-22B視覺模型。
LLaMA
LLaMA(大型語言模型元人工智能)是由Meta AI(又名Meta- FAIR))于2023年2月發(fā)布的650億個參數(shù)的“原始”大型語言模型。Meta表示,“在大型語言模型空間中訓練像LLaMA這樣的小型基礎模型是可取的,因為它需要更少的計算能力和資源來測試新方法,驗證其他人的工作,并探索新的用例。基礎模型在大量未標記的數(shù)據(jù)上進行訓練,這使得它們非常適合針對各種任務進行微調。”
LLaMA以多種尺寸發(fā)布,同時還發(fā)布了一張模型卡,詳細說明了模型是如何構建的。Meta-FAIR的Yann LeCun表示,最初,用戶必須請求檢查點和標記器,但現(xiàn)在它們已經(jīng)被釋放了,因為有人通過提交請求正確獲得了模型,并在4chan上發(fā)布了一個可下載的種子。
專門的代碼生成產(chǎn)品
雖然包括ChatGPT和Bard在內的一些大型語言模型可以生成用于發(fā)布的代碼,但如果它們對某些代碼進行微調,通常是來自免費開源軟件的代碼,以避免公然侵犯版權。這仍然引發(fā)了“開源軟件盜版”的擔憂,比如2022年針對GitHub、微軟(GitHub的所有者)和OpenAI公司的GitHub Copilot產(chǎn)品和OpenAI GPT Codex模型提起集體訴訟的主張。
需要注意的是,除了使用在公共可用代碼上訓練的人工智能模型之外,一些代碼生成工具依賴于搜索代碼共享網(wǎng)站,例如Stack Overflow。
Amazon CodeWhisperer
Amazon CodeWhisperer集成了Visual Studio Code和JetBrains IDE,根據(jù)現(xiàn)有代碼生成代碼建議以響應注釋和代碼完成,并可以掃描代碼以查找安全問題。用戶還可以激活CodeWhisperer,以便在AWS Cloud9和AWS Lambda中使用。
CodeWhisperer很好地支持Python、Java、JavaScript、TypeScript和C#編程語言,以及其他10種編程語言。它對個人開發(fā)人員是免費的,對專業(yè)團隊來說,每個用戶每月需要支付19美元。
Heller采用CodeWhisperer編寫了如下所示的Python代碼,并對它進行了審查、測試和調試,其結果很好。
圖3
Heller使用Amazon CodeWhisperer生成代碼。在文件的頂部輸入了注釋,剩下的大部分都是CodeWhisperer。Heller必須從幾個選項中選擇代碼,并從前一個選項中刪除未使用的導入語句
Bard
Bard于2023年4月21日宣布支持編程。該公告指出,支持20多種編程語言,包括C++、Go、Java、JavaScript、TypeScript和Python。作為一個快速測試,Heller讓Bard“編寫一個Go函數(shù)來返回當前的日期和時間。”它做得很快:
圖4
Bard生成了一個正確的Go語言函數(shù),一個使用該函數(shù)的示例,以及對該函數(shù)的解釋,所有這些都來自“編寫一個Go函數(shù)以返回當前日期和時間”的提示。注意復制函數(shù)和測試代碼的圖標
Bard不僅編寫了這個函數(shù),還解釋了這個函數(shù),并生成了一個調用函數(shù)的例子。
CodeT5
CodeT5是Salesforce AI Research的2021代碼特定的統(tǒng)一預訓練編碼器-解碼器轉換器模型。它基于2020年谷歌T5模型架構,并對CodeSearchNet數(shù)據(jù)集和BigQuery的一些C/C#代碼進行了微調。CodeT5的官方PyTorch實現(xiàn)位于GitHub上,在Hugging Face上有兩個檢查點,在GitHubREADME中有鏈接。
GitHub Copilot
當Heller在2021年11月審查GitHub Copilot的預發(fā)布版本時,他發(fā)現(xiàn),雖然它并不總是生成良好的、正確的、甚至運行的代碼,但它仍然有些有用。Copilot基于OpenAI Codex,而OpenAI Codex又基于GPT-3,GPT-3經(jīng)過微調,可以在5400萬個開源GitHub存儲庫上生成代碼。GitHub Copilot目前的費用是每月10美元或每年100美元,除非用戶有資格獲得免費版本。
Heller喜歡Copilot在Visual Studio Code中的工作方式。基本上,必須編寫函數(shù)的第一行,或者描述函數(shù)的注釋,然后Copilot將生成多達10個版本的函數(shù),可以按原樣使用,編輯或不使用。正如Heller在上面所指出的,應該對Copilot生成的任何代碼持保留態(tài)度,因為它確實容易產(chǎn)生幻覺,例如在下面的示例中第8行和第9行的代碼注釋中。
圖5
代碼由GitHub Copilot制作。通過輸入行首和一堆制表符,生成了第8行和第9行。Heller輸入了第10行和第11行的開頭,Copilot完成了第11行。注意,第8行和第9行中生成的關于預期結果值的不正確注釋
GitHub Copilot X
目前處于技術預覽階段的GitHub Copilot X基于GPT-4。它通過聊天和終端界面、生成單元測試的能力、生成拉取請求描述的能力以及從文檔中提取解釋的能力“升級”了原始的Copilot。
GitHub Copilot X比原來的GitHub Copilot有了很大的改進,有時可以在沒有太多人工幫助的情況下生成正確的函數(shù)和一組測試。它仍然會犯錯誤和產(chǎn)生幻覺,但遠不如它的前身那么多。作為參考,以下是Heller寫的原始Copilot。
圖6
Heller能夠讓GitHub Copilot X生成大部分正確的函數(shù)和良好的參數(shù)化測試集,只需在頂部輸入注釋并按Enter和Tab四到五次
IntelliSense和IntelliCode
Microsoft IntelliSense是Visual Studio和Visual Studio代碼的內置功能,它使用語言語義為短代碼完成提供一個選項菜單。它通常能很好地幫助用戶找到所需的API或方法調用,但往往會提供許多選擇。
IntelliCode是IntelliSense的一個增強插件,它使用在本地機器上運行的人工智能來檢測代碼場景——包括變量名、函數(shù)和正在編寫的代碼類型,并提供最好的建議,在某些情況下可提供整行補全。IntelliCode還可以幫助用戶清理重復的代碼,并為常見的編程任務推薦快速操作。
IntelliCode在Visual Studio 2022中與C#、C++、Java、SQL和XAML配合使用,在Visual Studio代碼中與TypeScript、JavaScript和Python配合使用。
Kite
Kite是2014年至2021年使用人工智能幫助開發(fā)者編寫代碼的早期嘗試。盡管它吸引了50多萬名開發(fā)者,但卻從未創(chuàng)造任何收益。Kiteco存儲庫包含其大部分源代碼,但有一些私有位已被XXXXX取代,因此一些代碼無法運行。
PolyCoder
PolyCoder是卡內基梅隆大學用于代碼生成的2022,27億個參數(shù)的開源大型語言模型(見論文)。它基于GPT-2模型架構,并在12種編程語言的249GB代碼上進行了訓練。在C編程語言中,PolyCoder優(yōu)于包括Codex在內的所有模型。
Replit Ghostwriter
Replit Ghostwriter于2022年萬圣節(jié)發(fā)布,提供五種功能:代碼完成、代碼解釋、代碼轉換、代碼生成以膠帶調試的錯誤檢測,每月10美元(或多或少,取決于用戶使用的“周期”數(shù)量)。它與Replit在線編輯器集成,支持Python、Ruby、JavaScript、TypeScript、HTML、CSS、Go、Lisp、Haskell、Bash、C、C++、Rust、Java和JSON。
根據(jù)Replit公司的說法,Ghostwriter“返回由公開可用代碼訓練并由Replit調優(yōu)的大型語言模型生成的結果。”Replit沒有指定用于Ghostwriter的大型語言模型或訓練語料庫,這使它與Emily Bender對GPT-4的指控相同:除非Replit公開其訓練數(shù)據(jù),模型架構等,否則應該假設Ghostwriter是有毒垃圾。這也讓Replit面臨著與GitHub Copilot同樣的“開源軟件盜版”指控。
Tabnine
Tabnine來自總部位于以色列特拉維夫的Tabnine公司,看起來就像服用了類固醇的IntelliSense,可以選擇在用戶自己的代碼語料庫上進行訓練,也可以在開源代碼上進行訓練。它可以在編輯器或IDE中完成整行和全功能的代碼補全,支持20種這樣的工具,從Visual Studiocode和IntelliJ到Emacs和Vim。
根據(jù)用戶選擇的計劃,Tabnine可以使用一種通用的人工智能模型,這種模型是在許可的開源代碼上訓練的,或者一組針對所有編程語言優(yōu)化的生成人工智能模型“專門用于匹配的技術堆棧”,或者在用戶自己的存儲庫上訓練的私有代碼模型。
Tabnine的免費Starter計劃只提供基本的代碼補全功能。Pro計劃以每個用戶每月12美元的價格完成全線和全功能代碼。Tabnine尚未披露其模型架構或訓練語料庫。因此,根據(jù)Emily Bender原則,用戶應該對它生成的任何代碼進行最壞的假設。
大型語言模型有時可以用于生成或完成代碼,無論它們是否在代碼語料庫上進行過訓練。經(jīng)過代碼訓練的語言模型往往更了解空白的重要性。而像OpenAI Codex和Tabnine這樣的代碼生成產(chǎn)品通常比更通用的語言模型與編程編輯器有更好的集成。
人們應該期待AI代碼生成器隨著時間和使用而改進。GitHub Copilot X比原來的Copilot更好,并相信下一個Copilot會更好。然而,永遠不能假設任何類型的人工智能生成的代碼都是正確或有效的,甚至不能假設它可以編譯并運行。應該將人工智能生成的代碼視為來自未知程序員的拉取請求,這意味著在將其作為應用程序的一部分之前,要對其進行審查、測試和調試。
原文標題:LLMs and the rise of the AI code generators,作者:Martin Heller
文章內容僅供閱讀,不構成投資建議,請謹慎對待。投資者據(jù)此操作,風險自擔。
2024年的Adobe MAX 2024發(fā)布會上,Adobe推出了最新版本的Adobe Creative Cloud。
奧維云網(wǎng)(AVC)推總數(shù)據(jù)顯示,2024年1-9月明火炊具線上零售額94.2億元,同比增加3.1%,其中抖音渠道表現(xiàn)優(yōu)異,同比有14%的漲幅,傳統(tǒng)電商略有下滑,同比降低2.3%。
“以前都要去窗口辦,一套流程下來都要半個月了,現(xiàn)在方便多了!”打開“重慶公積金”微信小程序,按照提示流程提交相關材料,僅幾秒鐘,重慶市民曾某的賬戶就打進了21600元。
華碩ProArt創(chuàng)藝27 Pro PA279CRV顯示器,憑借其優(yōu)秀的性能配置和精準的色彩呈現(xiàn)能力,為您的創(chuàng)作工作帶來實質性的幫助,雙十一期間低至2799元,性價比很高,簡直是創(chuàng)作者們的首選。
9月14日,2024全球工業(yè)互聯(lián)網(wǎng)大會——工業(yè)互聯(lián)網(wǎng)標識解析專題論壇在沈陽成功舉辦。