GitHub的AI寫代碼翻車了,會在注釋里給你寫上what the f***
來源 |新智元
憑借著自動生成代碼這個強有力的噱頭,推出之后就成為了討論的焦點。
建立在全新的算法之上,其中接受了從中提取的TB級公開代碼以及英語語言示例的訓(xùn)練。
因此,聲稱可以做到分析文檔中的字符串、注釋、函數(shù)名稱以及代碼本身,從而生成新的匹配代碼,包括之前調(diào)用的特定函數(shù)。
同時,支持多種編程語言:、、、Ruby和Go。
發(fā)布之后就有人把拉去刷的題庫,并對這位「AI程序員」的表現(xiàn)十分滿意。
經(jīng)過數(shù)個題目的驗證,每次都能通過的測試。鑒于幾乎是實時的生成速度,博主表示,AI可能比我們更會編寫代碼。
不過網(wǎng)友懷疑已經(jīng)在數(shù)據(jù)庫上進(jìn)行過了訓(xùn)練,因為生成的注釋和給的模板幾乎一模一樣。
針對這點,表示,雖然可能有0.1%的直接引用,但是生成的代碼大部分都會是原創(chuàng)的。
「復(fù)制-粘貼」成實錘
在發(fā)布的第二天,就有網(wǎng)友質(zhì)疑 是把免費開源的代碼清洗之后,搖身一變成了賺錢的工具。
而這些代碼本應(yīng)該受到GPL(通用公共許可證)的保護,從而防止它們被用在商業(yè)項目中。
不出所料,這個懷疑沒過兩天就變成了實錘,有網(wǎng)友發(fā)現(xiàn),直接「復(fù)制-粘貼」了最有名的「平方根倒數(shù)速算法」。
「生成」的這段代碼不僅用到了至今都沒有人能理解的 :,同時還包含了對這段代碼的吐槽:what the f***?。
源代碼
這么看來,做的只是把訓(xùn)練集中別人寫好的代碼重新組裝了一下而已。
我們的AI不「背誦」代碼
不過方面似乎早就已經(jīng)做了應(yīng)對的準(zhǔn)備,一位名叫 的團隊成員表示,截止2021年5月7日,他把對于的條建議都進(jìn)行了收集,其中這些數(shù)據(jù)來自于300名員工在日常工作中的使用。
針對這個數(shù)據(jù)集進(jìn)行了分析整理,并寫了一篇看似十分完備的博客進(jìn)行討論。
在文章的一開始,便讓 背誦了一篇眾所周知的文章,顯然,已經(jīng)牢牢記住了文章的內(nèi)容。
不過認(rèn)為,記住訓(xùn)練集的內(nèi)容不是什么問題,畢竟他自己也背誦過詩歌,而這并不會使他在日常的交流中被這些背誦的內(nèi)容帶跑偏。
案例分類
類別1:有時會在某個被采納的建議之后,由于程序員新編寫的注釋,又提出了一個非常相似的建議。
認(rèn)為第二次只不過是重復(fù)了之前「成功」的案例,因此把它們從問題分析中刪除了出去。
類別2:可能會提出長的、重復(fù)的序列。比如下面這個例子,其中重復(fù)的'
'最后在訓(xùn)練集中被發(fā)現(xiàn)了。
類別3:給出比如自然數(shù)、素數(shù)、希臘字母表這種類似于標(biāo)準(zhǔn)清單的建議。有些建議可能是有幫助的,也可能是沒有幫助的。
不過表示,這些并不符合他對「背誦」代碼的假設(shè)。
類別4:在做一些自由度很低的任務(wù)時,會給出的一些常見、或者普遍的解決方案。
例如,下面的中間部分可以算做是使用包來解析維基百科列表的標(biāo)準(zhǔn)方法。
表示,在訓(xùn)練數(shù)據(jù)中發(fā)現(xiàn)的最佳匹配片段就是使用這樣的代碼來解析不同文章的。同樣,這不符合他對「背誦」代碼的定義。
類別5:最后這些案例符合對「背誦代碼」的設(shè)想,其中,這些代碼或注釋中至少有一些具體的重疊。
測試結(jié)果
對于 的大部分建議,表示并沒有發(fā)現(xiàn)與訓(xùn)練用的代碼有任何明顯的重疊。在去掉第一個類別后,可以得到了185條建議。
在這些案例中,有144個被分到了第2-4個類別中。這就在最后一個類別5里留下了41個案例,作者表示,這就是他心目中的代碼 「背誦」。
在缺乏具體語境時的引語
在人工標(biāo)注時挑出的41個主要案例中,沒有一個出現(xiàn)在少于10個不同的文件中。大多數(shù)(35個案例)出現(xiàn)超過一百次。
有一次, 建議從一個空文件開始,它在訓(xùn)練期間甚至看到了超過700,000次的東西--那就是GNU通用公共許可證。
下面的圖表顯示了第5個類別的結(jié)果(每個結(jié)果底部有一個紅色標(biāo)記)與第2-4個類別中的匹配文件數(shù)量。
推斷出的分布圖顯示為一條紅線;它在100和1000個匹配之間達(dá)到峰值。
主要在一般情況下引證
隨著時間的推移,每個文件都變得獨一無二。但 會將在你的文件非常通用時提供解決方案。
而此時,在沒有任何具體內(nèi)容的情況下,它更有可能從其他地方引用。
當(dāng)然,軟件開發(fā)者大部分時間都在復(fù)雜的代碼中間,那里的上下文足夠獨特, 會提供獨特的建議。
相比之下,一開始的建議就比較中規(guī)中矩,因為 無法知道程序會是什么。
不過,在獨立的腳本中,適度的上下文就足以讓人合理地猜測出用戶想要做什么。
而有時,上下文仍然過于普遍,以至于認(rèn)為它熟知的某個解決方案看起來很有希望。
上面這個例子就是直接取自被上傳的機器人課的課件。
結(jié)論
認(rèn)為,雖然 可以逐字逐句地引用一組代碼,但它很少這樣做,而且當(dāng)它這樣做時,多數(shù)也都是所有人都會引用的代碼,而且大部分是在文件的開頭。
表示,理想狀態(tài)下,當(dāng)一個建議包含從訓(xùn)練集復(fù)制的片段時,用戶界面應(yīng)該簡單地告訴你它是從哪里引用的。然后,你可以包括適當(dāng)?shù)氖鹈驔Q定不使用該代碼。而他的團隊也將努力去做到這一點。
聲明:本站所有文章資源內(nèi)容,如無特殊說明或標(biāo)注,均為采集網(wǎng)絡(luò)資源。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系本站刪除。