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