2021-05-13 分類: 軟件開發(fā)
雷鋒網(wǎng) AI 科技評論按:伴隨著 AI 技術(shù)的發(fā)展和應(yīng)用,人們對「人工智能」的認知也不斷被刷新和拓展,在大眾眼中,AI 正變得越來越強大,不僅可以下棋博弈戰(zhàn)勝人類的頂尖選手,還可以進行語音識別、自動翻譯、人臉識別,甚至可以自動駕駛汽車。最近,北京大學(xué)與硅心科技團隊聯(lián)合推出了一項新的 AI 成果——aiXcoder,它利用 AI 技術(shù)輔助開發(fā)者自動進行程序編寫,引燃了人們關(guān)于「AI+軟件」的巨大發(fā)展?jié)摿σ约啊杠浖_發(fā)自動化」發(fā)展前景的討論與思考。
讓計算機自動編寫代碼,不僅是軟件開發(fā)領(lǐng)域關(guān)心的問題,也是人工智能領(lǐng)域長期關(guān)心的問題。早在 1964 年,機器學(xué)習(xí)領(lǐng)域的先驅(qū)者 Solomonoff 就曾提出,「對人類而言,編寫計算機程序是一項既困難又耗時的活動,通過自動代碼生成或程序歸納來實現(xiàn)這個過程的自動化是人工智能領(lǐng)域的一個長期研究主題?!菇陙恚珼eepMind 和 Facebook 在其論文中也提出了類似的論述。
那么,在沒有人類程序員干預(yù)的情況下,完全依賴 AI 技術(shù)進行程序代碼生成,當前的研究進展情況如何呢?下面是近年來的幾項典型研究工作:
● 2016 年,Google Deep Mind 發(fā)表了論文「Neural Programmer-Interpreters」,提出了一種利用程序的輸入輸出結(jié)果生成簡單程序的深度神經(jīng)網(wǎng)絡(luò)模型,但它生成程序的規(guī)模具有較大限制,通常是由簡單指令組合而成的短小程序;
● 2017 年,F(xiàn)acebook 在論文「Unsupervised Program Induction with Hierarchical Generative Convolutional Neural Networks」中也提出了一種在包含 8 種基本指令的數(shù)據(jù)集上選擇指令,組合出程序的方法;
● 同年,微軟針對類似的問題發(fā)表論文「DeepCoder: Learning to Write Programs」提升了程序生成的速度,但在程序規(guī)模與生成效果上仍未能取得質(zhì)的提升。
這些成果對程序自動生成的研究起到了重要的推動作用,但同時也可以看出,在完全不依賴程序員的場景下,進行工業(yè)級程序的編寫,仍需要進一步研究。
與上述研究思路不同,來自北京大學(xué)的研究團隊,正致力于「輔助人類程序員自動編寫程序代碼」?!鸽m然在完全不依賴人類程序員的場景中自動生成程序仍需進一步研究,但我們可以利用人工智能技術(shù)來輔助人類編寫程序。」北京大學(xué)高可信軟件技術(shù)教育部重點實驗室副教授李戈對雷鋒網(wǎng)表示,「我們已經(jīng)在『利用 AI 輔助程序員編程,以提高程序編寫的效率和質(zhì)量』方面取得了重要的研究進展?!?/p>
李戈所在的研究團隊是國際上最早從事基于深度神經(jīng)網(wǎng)絡(luò)的計算機程序分析與生成研究的團隊之一,在代碼功能語義分析、代碼自動生成與補全等方面的研究成果受到國內(nèi)外同行的高度關(guān)注。近年來,該團隊取得了一系列重要研究成果,形成了一批重要的行業(yè)專利及學(xué)術(shù)論文。基于所取得的科研成果,李戈所在實驗室正轉(zhuǎn)向產(chǎn)業(yè)化應(yīng)用,致力于將「智能化軟件開發(fā)技術(shù)」轉(zhuǎn)化為能夠支持工業(yè)界生產(chǎn)的商業(yè)產(chǎn)品——aiXcoder。
aiXcoder 智能編程機器人
aiXcoder 是一款全新的智能編程機器人產(chǎn)品,它采用與程序員一起「結(jié)對編程」的方式為程序員提供服務(wù),從而提高程序員的編程效率。在 aiXcoder 的輔助下,程序?qū)氐讛[脫傳統(tǒng)的編程模式,不再需要「逐字逐句」編寫程序。
aiXcoder 能夠自動預(yù)測程序員的編程意圖,連續(xù)向程序員推薦「即將書寫的下一段代碼」,程序員可以通過「一鍵補全」的方式,直接確認接下來輸入的代碼,從而大大提升代碼的編寫效率。同時,aiXcoder 還能夠在程序編程的過程中,不斷智能地搜索并推薦與當前程序功能相似的規(guī)范程序代碼,為程序員提供有力的編程參考。目前,aiXcoder 編程機器人已經(jīng)推出了 Android、JFinal、Tensorflow 等多個版本,為不同領(lǐng)域的編程者提供輔助。
據(jù) aiXcoder 研發(fā)團隊的核心技術(shù)人員郝逸洋對雷鋒網(wǎng)介紹:aiXcoder 采用了先進的專門應(yīng)用于程序分析與生成的特定深度神經(jīng)網(wǎng)絡(luò)模型,并利用嚴格篩選的海量領(lǐng)域源代碼數(shù)據(jù)進行訓(xùn)練,從而使 aiXcoder 能夠充分學(xué)習(xí)和掌握隱含于海量代碼中的編碼模式與規(guī)律,并將該信息用于后續(xù)代碼的生成與補全。
不僅如此,經(jīng)過訓(xùn)練的 aiXcoder 還能快速了解一個程序員的個人編程習(xí)慣,自動記錄程序員常用的程序模式、常用的 API 調(diào)用序列等等,從而在程序員編程過程中進行有效地自動輔助,在大程度上協(xié)助程序員自動完成非創(chuàng)造性的編程工作。
當前,aiXcoder 采用「云服務(wù)」的運行模式,其深度學(xué)習(xí)模型如同部署在云端的「編程大腦」,其客戶端以插件的形式集成在 IDE 中,實現(xiàn)了與 IntelliJ、Eclipse、VS-Code 等主流集成開發(fā)平臺的無縫對接,程序員可以通過 aiXcoder 插件實現(xiàn)與「云端 AI 服務(wù)」的對接,隨時隨地使用自己的「編程大腦」。
同時,aiXcoder 還可以為軟件企業(yè)提供專業(yè)領(lǐng)域的定制化專屬服務(wù),以企業(yè)內(nèi)部云的方式為軟件企業(yè)提供專屬服務(wù)。使用過該服務(wù)的某軟件外包公司反饋:aiXcoder 不僅能夠有效節(jié)省程序員的開發(fā)時間,還能夠有效降低程序員對 API 文檔或相關(guān)信息的依賴,「原本需要上網(wǎng)搜索相似代碼和搜索 API 使用模式的時間,被節(jié)省了下來,可以更加集中精力編寫特定系統(tǒng)所需要的代碼?!拐驹诔绦騿T的角度,在 aiXcoder 的幫助下,開發(fā)者可以把更多時間用于「全新」代碼的編寫,提高個人價值。
aiXcoder 的研究歷程
談到研究這一智能編程機器人的初衷,李戈副教授說起當前的軟件開發(fā)流程存在「開發(fā)階段的缺陷被滯后解決」的問題,即程序員在編程的過程中未能解決的程序缺陷、錯誤等問題,常常需要依賴后續(xù)的代碼掃描、代碼審查、程序測試等環(huán)節(jié)才能被發(fā)現(xiàn),然后再重新送回到程序員的開發(fā)現(xiàn)場去解決,然而,當上述問題重新返回到開發(fā)現(xiàn)場時,程序員往往早已變更了開發(fā)場景,他們只能重建起以前的開發(fā)現(xiàn)場才能對返回的代碼進行修改。這一不合理流程大大延遲了編程問題的解決時間,造成了開發(fā)效率的降低。、
以百度為例,百度高級副總裁王海峰在今年出席軟博會時曾提到,百度每天新增需求卡片達到 6700 張,系統(tǒng)每天構(gòu)建次數(shù)超過 70000 次,每天系統(tǒng)上線發(fā)布次數(shù)超過 700 次。在這樣的研發(fā)需求壓力下,要求軟件開發(fā)必須實現(xiàn)快速迭代,研發(fā)周期必須被縮短,大量的研發(fā)需求必須在編程階段完成,而不是「把編程階段應(yīng)解決的問題向后續(xù)環(huán)節(jié)延遲」。因此,如何利用智能化手段提高軟件編碼的效率和質(zhì)量,成為當前軟件開發(fā)的重要問題。
如何將 AI 技術(shù)應(yīng)用于軟件開發(fā)中,協(xié)助開發(fā)者在開發(fā)階段解決更多的問題,提高軟件開發(fā)的效率和質(zhì)量?這正是李戈副教授的研究團隊一直深入思考的問題。要使 AI 能夠協(xié)助程序員編寫程序,必須首先要讓 AI 模型能夠理解程序員已經(jīng)寫下的程序,并能夠領(lǐng)會程序員的編程意圖。帶著這一思考,他們開始了利用深度學(xué)習(xí)技術(shù)的程序代碼分析與生成的研究。
2013 年底,李戈在斯坦福大學(xué)人工智能實驗室擔任訪問學(xué)者,當時與他同一實驗室的研究者正從事基于深度學(xué)習(xí)的自然語言處理的相關(guān)研究。這些相關(guān)領(lǐng)域的研究方法給了他啟發(fā),他認為可以利用特定的深度學(xué)習(xí)模型來進行程序代碼語義的分析。然而,程序語言與自然語言存在諸多不同:
● 首先,程序語言通?;陧樞?、分支、循環(huán)三種類型的語法結(jié)構(gòu)來進行語義描述,具有更強的結(jié)構(gòu)性,而且程序的結(jié)構(gòu)信息具有多種表達方式,例如數(shù)據(jù)流圖、控制流圖、調(diào)用圖、程序切面圖等等;
● 其次,程序的整體語義對單個詞義的依賴較弱,其字面語義與程序語義可能存在較大區(qū)別,具有更強的抽象性;
● 再次,程序分析的粒度比自然語言更大,通常以模塊為分析單位,一個程序模塊通常會包含很多條密切關(guān)聯(lián)的語句;
除此之外,程序語義還依賴于大量的背景知識,如 API 知識、領(lǐng)域需求知識等等。
這些問題的存在使李戈意識到,想要獲知程序所表達的語義,必須設(shè)計適用于程序語言的全新模型。
基于多年的研究基礎(chǔ)和對程序特性的深入思考,李戈研究團隊設(shè)計并構(gòu)造了一系列專門用于程序分析與生成的深度神經(jīng)網(wǎng)絡(luò)模型。同時,他們利用從 Github、Stackoverflow 等獲取的開放源代碼資源,經(jīng)過一系列清洗、分析、標注,積累了大量規(guī)范化程序代碼數(shù)據(jù)用于支持深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,并最終獲得了優(yōu)異的訓(xùn)練結(jié)果,形成了多項業(yè)界的科研成果,這些成果構(gòu)成了 aiXcoder 的基礎(chǔ)。
以 aiXcoder 的 Tensorflow 版本為例,他們使用了超過 30 萬份經(jīng)過處理的 Tensorflow 源代碼作為訓(xùn)練數(shù)據(jù),使神經(jīng)網(wǎng)絡(luò)模型學(xué)會了編寫 Tensorflow 代碼所需的各種規(guī)范模式、潛在規(guī)則、常用 API 序列、慣用編碼模式等知識和經(jīng)驗。在程序員編寫代碼的過程中,aiXcoder 能夠自動推測程序員的編程語義,并按照這些知識和經(jīng)驗及時向程序員推薦可能要使用的編程語句,以達到輔助程序員自動完成程序的目的,大大提升程序開發(fā)的速度。
當前的 aiXcoder 正以「結(jié)對編程」的形式輔助程序員工作,它就像一個時刻陪伴程序員工作的「伙伴」,與程序員一起編寫代碼,幫助程序員差缺補漏。
「傳統(tǒng)的結(jié)對編程是人與人結(jié)對,我們希望能夠?qū)崿F(xiàn)人與機器的結(jié)對工作」,李戈介紹說,「我們希望 aiXcoder 能夠承擔更多的『勞動』,能夠讓程序員有更多的時間和精力投入到有創(chuàng)造性的工作中,讓程序員的創(chuàng)造性價值得到更加充分的體現(xiàn)?!?/p>
「Leave Artificial Intelligence to aiXcoder, Leave Real Intelligence to Human.」(把人工智能留給 aiXcoder,把真正的智能留給人類。),這正是 aiXcoder 研發(fā)團隊的信條和口號。
網(wǎng)站欄目:智能化軟件開發(fā):程序員與 AI 機器人一起結(jié)對編程
文章URL:http://m.rwnh.cn/news17/113467.html
網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項目有軟件開發(fā)等
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容