當前位置:
首頁 > 知識 > 還在費心學編程?微軟用深度學習 AI 幫你寫代碼

還在費心學編程?微軟用深度學習 AI 幫你寫代碼

還在費心學編程?微軟用深度學習 AI 幫你寫代碼



在過去的幾十年中,無論在硬體組織還是軟體架構上,計算機行業已經發生了翻天覆地的變化,各種軟硬體產品的性能和用戶體驗均得到了顯著提升。


但對程序員而言,軟體編碼的本質似乎並沒有什麼本質的改變:無論哪種編程語言,仍然需要程序員根據演算法邏輯和實現步驟一步一步地手動敲入代碼。雖然近幾年隨著編碼工具的改進和編程語言的版本更新,對於程序員而言,這一過程已經相當方便了,但學習如何編程仍然是諸多計算機用戶不得不面對的一道難題。

還在費心學編程?微軟用深度學習 AI 幫你寫代碼


近日,微軟在論文中公布了一項最新的代碼合成系統:RobustFill。它基於深度學習技術,可以根據用戶指定的輸入輸出樣例進行特徵提取,然後自動合成能夠實現相應功能的軟體代碼,大大縮減了程序員的編碼工作量。


舉例來說,假設用戶需要編碼實現如下功能:將輸入的人名信息進行規範化縮寫後輸出。具體如下圖所示,當輸入人名為 「jacob daniel devlin」 時,系統應該輸出 「Declin,J」 。基於 RobustFill,用戶只需要提供一些簡單的輸入輸出樣例(圖中前三行黑色字體),系統就能自動合成實現這一功能的軟體代碼,並輸出正確結果(圖中後三行灰色字體)。如果用戶需要處理的人名有成千上萬個,這就能節約大量的處理時間。

還在費心學編程?微軟用深度學習 AI 幫你寫代碼



RobustFill 系統生成的代碼基於 DSL(Domain Specific Language),即領域特定語言。用戶並不需要理解 DSL 的編程細節,實際上,用戶根本看不到 DSL 代碼,而只需要關注具體的功能實現就行了。對應上述人名縮寫樣例,RobustFill 生成的 DSL 代碼如下所示:


Concat(


ToCase(


GetToken(


input,

Type=Word,


Index=-1),


Type=Proper),


Const(", "),


ToCase(


SubString(


GetToken(


input,


Type=Word,


Index=1),

Start=0,


End=1),


Type=Proper),


Const("."))


自動代碼合成的難點主要有兩個:


一是系統可以自動合成萬億級的不同的 DSL 代碼組合,如何判斷哪一種是正確結果;


二是用戶提供的輸入輸出樣例一般都是人工輸入,難免會出現一些筆誤(例如上面人名縮寫的例子中,表格第二行,用戶把「Useato」寫成了「uesato」),系統如何避免這些筆誤的不良影響。


針對這兩個問題,此前的解決方案是微軟 Excel 軟體中的 FlashFill 系統。該系統憑藉開發人員手動設置規則和啟發式搜索(Heuristic Search)的方式,為用戶輸出特定功能的代碼。但 FlashFill 系統嚴重弱化了 DSL 語言的擴展能力,並且需要開發者大量的人工輸入,同時對人工輸入的筆誤也非常敏感,因此並不是最優的解決方案。


與 FlashFill 不同,在深度學習技術的支持下,RobustFill 可以利用數據驅動的方式進行代碼合成,而無需開發者手動設置規則。此外,RobustFill 還使用了此前用於自然語言翻譯的一種名為「attentional sequence-to-sequence neural network」(注意力序列到序列神經網路)的技術,因此才能基於用戶給定的輸入輸出樣例,自動合成代碼。RobustFill 的大體結構流程如下圖所示。

還在費心學編程?微軟用深度學習 AI 幫你寫代碼


微軟用數百萬隨機生成輸入/輸出和對應的編碼來訓練該系統。由於 RobustFill 能學會 DSL 的語法,微軟認為它在真實數據上會有良好表現。總的來說,微軟 RobustFill 在真實測試中達到了 92% 的精確度。最讓人感到鼓舞的是,即便輸入/輸出樣例包含大量噪音,RobustFill 仍能夠保持高水準的精確度。


意義


在 FlashFill DSL 這樣的強大函數語言上,成功地訓練神經架構學習編程,是神經代碼合成的一項了不起的成就。微軟表示,這同時也是邁向通用 AI 的一小步。RobustFill 解決了加入可編譯性( interpretability)的核心難題,並探索了用知識的符號表示連接分布式表達( connecting distributed representations with symbolic representations of knowledge)這一課題。


微軟最後在官方博客宣布:


「我們正在開發這些架構的擴展,用變數和控制流來學習 DSL 中的代碼,以生成更豐富的代碼類。我們相信,照這個方向走下去需要我們研究、解決代碼合成和歸納問題中的關鍵技術難關。」


via microsoft


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 唯物 的精彩文章:

用金庸、古龍群俠名稱訓練 LSTM,會生成多麼奇葩的名字?
TensorFlow在工程項目中的應用 視頻+文字轉錄(下)
TensorFlow在工程項目中的應用 公開課視頻+文字轉錄(上)
賈揚清 F8 現場演講:從手機到大型伺服器集群,Caffe2 如何適用於不同設備和場景?
人臉識別+手機推送,從此不再害怕老闆背後偷襲!

TAG:唯物 |

您可能感興趣

數學不好也能學會AI編程!微軟研究院AI實踐課程上新
AI時代,讓孩子學編程還是學藝術?
AI時代學什麼穩賺不賠?編程,編程,編程
採用全英文教學,FCA要打通代碼編程與英文的學習
你相信逛 B 站也能學編程嗎?
不學C+也能玩轉超算編程,斯坦福大學推出超算編程語言Regent
MIT 推出編程語言 Gen,從方程式和手寫代碼上解放工程師
印度大學的學生如何練習編程
WeCode在線少兒編程-我們為什麼要學習編程
為什麼學了編程語言還是不會做軟體?
如何學習編程和應對信息學奧賽
無需編程基礎,紐約大學春季課程:利用認知科學推動AI進步
數控UG編程該如何學習?精明者:一步到位,快速學習積極實踐
計算機科學、軟體編程晦澀難懂?Zenva帶來沉浸式教學方式
不學C++也能玩轉超算編程,斯坦福大學推出超算編程語言Regent
無需數學就能寫AI,MIT提出AI專用編程語言Gen
程序員,不要急於學習編程語言,先學會如何解決問題
學習編程太枯燥?12款助你學編程的免費遊戲送上!
編程進階之路:用簡單的面向對象編程提升深度學習原型
玩桌游也能學編程?有這套「編程三劍客」就夠了