7月29日,英特爾官網訊息,英特爾和麻省理工學院(MIT)、喬治亞理工學院(Georgia Tech)共同推出了一種新的機器程式設計(MP)系統——機器推斷程式碼相似性系統(MISIM)。
透過識別相似程式碼段,分析程式碼目的、作用的相似性,MISIM 可以完成一些程式設計任務,提供程式設計方法建議或選項,即用 AI 代替程式設計師做部分工作,如自動化錯誤檢測等。
“英特爾機器程式設計的最終目的是使軟體建立民主化”, 英特爾首席科學家兼機器程式設計研究總監/創始人 Justin Gottschlich 說。英特爾目前計劃在內部使用 MISIM,以協助開發人員完成除錯等日常工作。
IT 領域中,AI 的許多應用場景都是機器程式設計。最近引起熱議的 人類算力天花板?1750 億引數的 AI 模型 GPT-3 引爆矽谷 ,也是可以直接寫程式碼。
如有人用 GPT-3 將日常語言轉換成 Python 程式碼來建立資產負債表;還有開發者呼叫 GPT-3 API 做了一個網頁 App 快速生成器,在輸入框裡用自然語言進行描述,它就可以快速輸出相應的使用者介面,比如輸入“生成一個像西瓜一樣的按鈕”:
也有人早就開源了同樣是機器程式設計的 AI 專案。如2018年,使用 keras 深度學習框架的專案 Sketchcode 開源,Sketchcode 可以直接將手繪的手稿圖生成 HTML 程式碼。
AI 在 IT領域的應用還有 AI 自動測試,無碼/低程式碼探討等話題,本篇先從 MISIM 說起,看看機器編碼的一些專案。
MISIM:AI 評估程式碼圍繞 MISIM 的技術論文已經公開。該論文首先闡述了機器程式設計和程式碼相似系統的關係:機器程式設計領域涉及軟體開發的自動化,近年來出現許多 MP 系統,部分原因是機器學習、形式方法、資料可用性和計算效率的進步。
而在 MP 系統中,一大挑戰就是精確構建程式碼相似性系統。程式碼相似性系統往往包含許多複雜的元件,其中即使是最基本的元件的選擇,如程式碼的結構表示都仍不明確。程式碼相似性的研究還處在早期階段,但相關探索已越來越多,MISIM 也是其中之一。
MISIM 中的元件可以單獨或一起使用,核心部件有兩個。
一是一種新的上下文感知語義結構 CASS,用來從程式碼語法中提升語義意義。目的是捕捉輸入程式碼的語義的顯著特性。CASS 的上下文感知功能,可以用來捕獲描述程式碼的上下文資訊,例如,“這段程式碼是函式呼叫”、“這段是操作”等等。
其二,MISIM 提供了一種基於神經的學習程式碼相似性評分演算法,可以用各種具有學習引數的神經網路體系結構來實現。該演算法分兩個階段,第一階段涉及一個神經網路模型,可將一個特徵化的 CASS 對映到一個實值程式碼向量。第二個階段使用相似性度量在一對程式碼向量之間生成相似性評分。
針對該系統的效能,其研究團隊篩選出三個程式碼相似性系統做比較:code2vec、神經程式碼理解 NCC、程式碼推薦系統 Aroma。比較實驗使用 POJ-104 資料集,由學生編寫的 C/C++程式組成。
評估的精度指標是 R(MAP@R)、平均精度(AP)和精度-Recall-Gain 曲線(AUPRG)下的面積(Aup@R),它們衡量模型在給定查詢的資料庫中檢索類似(或相關)項的準確性。最終的實驗結果表明,MISIM 比其他三個最先進的程式碼相似系統的效能高出40.6倍。
不過,論文還提到了可以預見的負面影響:
一級負面影響,給定的研究想法可以直接用於傷害性行為,如 DeepFake、DeepNude 等等。
二級負面影響,指研究想法可能會使它的使用方式產生直接的負面或積極影響,例如將面部識別用於壓迫少數群體、產生惡意假新聞等等。
三級負面影響,研究思想被用來構建第二個應用程式,並根據新程式的使用產生的負面影響。
- 如果程式碼使用相似性工具發展足夠成熟,可以自動生成正確的可編譯程式碼,那麼它可能被用來自動將程式碼從一種語言替換為另一種語言,或者用快速程式碼替代慢程式碼。
- 惡意使用者可以利用程式碼相似性工具爬取網路,在網路上竊取程式碼,並從可用程式碼中,找到常見的模式和安全缺陷,然後找到大規模駭客攻擊的方法。從同一程式碼生成器生成的程式碼可能更容易受到此類攻擊。
- 如果系統允許基於程式碼相似性的自動程式碼修補/修復,而不進行適當的測試,那麼如果被駭客攻擊,它可能會產生安全缺陷。
- 如果程式設計師習慣從程式設計工具獲得幫助,可能會降低程式設計師的學習能力,除非該工具提供可解釋性,解釋性將需要了解工具正在學習的程式碼相似性,並教育程式設計師。
“總之,程式碼相似性是一個抽象的概念,很可能有許多積極的應用。為了減輕負面影響,我們需要確保制定適當的政策和安全措施,防止負面使用。特別是,這種安全系統可能需要人工介入,以便被用來提高程式設計師的能力和生產力。”論文最後指出。
機器程式設計被各大科技公司看做是“解放程式設計師”的一種方式。
“MP 將使每個人都能以最適合自己的方式表達意圖,無論是程式碼,自然語言還是其他方式,來建立軟體。” Justin Gottschlich 給 MISIM 提出的這個目標,實際上也是許多 AI 專案在 IT 領域的共同目標。
被 MISIM 拿來作比較的機器學習程式碼推薦系統 Aroma,是 Facebook 2019年推出的一個專案,可以自動完成小程式,幫助程式設計師找到可以“參考使用”的程式碼等等。
如安卓程式設計師想要了解如何解碼手機中的 bitmap,可以使用程式碼直接搜尋:
Bitmap bitmap = BitmapFactory.decodeStream(input);
Aroma 會給出一些程式碼推薦:
final BitmapFactory.Options options = new BitmapFactory.Options();options.inSampleSize = 2;// ...Bitmap bmp = BitmapFactory.decodeStream(is, null, options);
前不久 DeepMind 也釋出了 AI 演算法開發框架——Acme,提供比人類設計更有效的簡單演算法版本。Acme 是一個分散式強化學習框架,透過促使 AI 驅動的智慧體在不同規模的環境中執行。該框架可以簡化、強化學習演算法開發程序。
此外微軟也正在其軟體開發工具中,加入基本的程式碼生成功能。OpenAI 的 GPT-3 語言模型也已經被多位開發者呼叫,從自然語言中生成簡單程式碼段。
這些機器程式設計專案或是功能,什麼時候能發揮出多大的作用,目前似乎還沒有一個準確的答案。除了 GPT-3 剛上線就直接開放給開發者呼叫,像 MISIM 還主要是在英特爾內部使用。不過 GPT-3 偏向強調是一個可以更廣泛使用的 AI 模型,可以處理所有的語言任務,還能寫詩。MISIM 則是專注於程式碼任務的一個系統。
更多關於一些開源的 MP 工具,請點選文末“瞭解更多”