最近拿到一個(gè)課題,是對(duì)人工智能在代碼自動(dòng)生成方面的應(yīng)用做調(diào)研。作為一個(gè)以嵌入式開(kāi)發(fā)為主的工程師,我了解的人工智能就是圖像識(shí)別和神經(jīng)網(wǎng)絡(luò)算法,能想到最深入的智能編碼方式也就是基于龐大程序塊的邏輯組織與架構(gòu)選型,事實(shí)證明這種太關(guān)注實(shí)際技術(shù),關(guān)注應(yīng)用的想法在人工智能的大浪潮下完全落伍了。通過(guò)閱讀一些資料和看一些機(jī)器學(xué)習(xí)基礎(chǔ)的書(shū)籍,發(fā)現(xiàn)人工智能對(duì)代碼生成技術(shù)是完全有理論支撐跟研究驅(qū)動(dòng)力的。
從信息論的角度上來(lái)說(shuō),只要明確信息有相關(guān)性,選用合適的概率分布假設(shè),大量的數(shù)據(jù)訓(xùn)練,機(jī)器完全可以模擬人的思考和推論過(guò)程。從研究成果方面看,目前已有大量的人工智能輔助編碼工具,人工智能前端自動(dòng)編碼項(xiàng)目等等。但是考察現(xiàn)在的代碼自動(dòng)生成項(xiàng)目,很多是基于GUI設(shè)計(jì),依賴框架和模板,類的應(yīng)用,本身的配置過(guò)程就已經(jīng)充滿了復(fù)雜度,智能的部分比較少,還是通過(guò)模塊化的組織來(lái)生成代碼,似乎離真正的機(jī)器寫(xiě)代碼還很遠(yuǎn)。而且大量的程序員對(duì)機(jī)器寫(xiě)代碼這件事還是持極大的懷疑態(tài)度的。但是幾個(gè)項(xiàng)目改變了我的想法,而且給了一些啟發(fā)。
一個(gè)是自動(dòng)生成前端頁(yè)面的代碼項(xiàng)目
典型的有18年初丹麥一家公司發(fā)布的一個(gè)面向前端的智能代碼項(xiàng)目,該項(xiàng)目通過(guò)訓(xùn)練后的網(wǎng)絡(luò)能夠?qū)⒃O(shè)計(jì)圖直接生成前端靜態(tài)頁(yè),而且生成代碼準(zhǔn)確率達(dá)到了77%。
附上的地址:
還有一個(gè)前端典型的項(xiàng)目是19年初阿里的。
從上面兩個(gè)而項(xiàng)目看到人工智能寫(xiě)代碼很多嗎,對(duì)于前端,有固定架構(gòu)和固化模塊的代碼編寫(xiě),機(jī)器已經(jīng)能夠完全識(shí)別設(shè)計(jì)圖的信息并轉(zhuǎn)化成代碼,按照這個(gè)發(fā)展趨勢(shì),前端程序員被取代是一個(gè)可見(jiàn)的未來(lái)。
前端代碼由于其模塊化格式和相對(duì)簡(jiǎn)單的邏輯,智能編碼已經(jīng)很好地展示了其能力,但是由于功能編碼暫時(shí)無(wú)法達(dá)到智能,仍然需要程序員看懂機(jī)器代碼并完成交互功能,所以這項(xiàng)技術(shù)離實(shí)際應(yīng)用還有一定的距離。大批對(duì)AI自動(dòng)編碼持懷疑態(tài)度的認(rèn)為人要機(jī)器做事,人必須至少告訴機(jī)器自己“想要什么”,然而表達(dá)這個(gè)“想要什么”的難度,其實(shí)跟編程幾乎是一樣的。包括田淵棟的一些研究都表明了讓機(jī)器自主編碼的技術(shù)難度。
如何用卷積神經(jīng)網(wǎng)絡(luò)讓計(jì)算機(jī)讀入一個(gè)算法的輸入輸出,自己寫(xiě)代碼: with
但是我看到另外一個(gè)人工智能項(xiàng)目讓我對(duì)機(jī)器自主編碼產(chǎn)生了一些其他的思考。這是今年8月底剛剛發(fā)布的一個(gè)項(xiàng)目,一位名叫”Zeyao Du“(位于南京)的開(kāi)發(fā)者,在上開(kāi)源了的GPT-2 。
GPT-2中文開(kāi)源
在這個(gè)項(xiàng)目中作者通過(guò)中文預(yù)料的訓(xùn)練,讓網(wǎng)絡(luò)能夠自主寫(xiě)詩(shī)、新聞、小說(shuō)和劇本,或是訓(xùn)練通用語(yǔ)言模型。而且訓(xùn)練的結(jié)果非常好,語(yǔ)義通順。下圖是一些作者展示出來(lái)的成果
小說(shuō)
新聞
詩(shī)
這個(gè)項(xiàng)目讓我相信了機(jī)器能夠模擬人的思考過(guò)程和語(yǔ)言邏輯,然后又聯(lián)想到寫(xiě)代碼的過(guò)程,真正寫(xiě)代碼的難點(diǎn)完全不是邏輯過(guò)程,而是需求分解和轉(zhuǎn)化的過(guò)程,為什么一定要糾結(jié)于自動(dòng)生成代碼技術(shù)呢?能不能換一個(gè)角度考慮,用AI來(lái)理解需求,分化需求人工智能寫(xiě)代碼很多嗎,從而對(duì)編碼起到?jīng)Q定性的輔助作用呢?從上面幾個(gè)項(xiàng)目能夠說(shuō)明兩點(diǎn)
1、機(jī)器對(duì)于結(jié)構(gòu)化的信息是可以很好地理解
2、機(jī)器完全能夠理解并模擬中文邏輯
那么如果我們用標(biāo)準(zhǔn)化、結(jié)構(gòu)化的需求分解文檔來(lái)訓(xùn)練網(wǎng)絡(luò),是不是能夠讓機(jī)器理解并識(shí)別需求,當(dāng)需求真正被分解成模塊化功能后,代碼的編寫(xiě)無(wú)非就是模塊化代碼的組織而已。此處如果能夠借助AI做一些代碼組織工作,那是不是從另外一個(gè)程度上完成了代碼的自動(dòng)生成呢?所以將AI自動(dòng)編碼技術(shù)分解成AI需求分解+代碼塊AI組織是不是實(shí)現(xiàn)難度會(huì)小一點(diǎn),技術(shù)可落地的可能性會(huì)高一點(diǎn)?希望大家能夠跟我一起探討。