說出你的需求,我們AI給你寫代碼

說你想幹什麼,AI就能自動寫代碼。

現在,我們離這個目標又近了一步。

近日,MIT的一個研究團隊放出了新的研究成果。

他們提出了一種靈活組合模式識別和推理的方法,在無監督學習的情況下, 來解決AI自動編程遇到的問題。

先給你看幾個例子:

任務要求:

給定一個數組,計算數字翻轉過來之後的中位數。

AI會給出代碼:

(reduce(reverse(digits(deref (sort a)(/ (len a) 2)))) 0 (lambda2 (+(* arg1 10) arg2)))

任務要求:

輸入: 1, [-101, 63, 64, 79, 119, 91, -56, 47, -74, -33] 4, [-6, -96, -45, 17, 26, -38, 17, -18, -112, -48] 輸出: 39 8

AI會給出的代碼:

(MAXIMUM (MAP DIV3 (DROP input0 input1)))

這是怎麼做到的?

給人類程序員一個任務,在開始寫代碼之前,會根據自己的經驗來判斷代碼架構是什麼樣的。如果沒有經驗,就要採取推理的方式,來完善代碼架構。

這個AI系統,就是模仿了人類結合模式識別和推理寫代碼的方式。

模型分爲兩個模塊,分別是概要生成器(sketch generator)和代碼合成器( program synthesizer)。

輸入任務要求之後,先經過概要生成器,生成滿足任務要求概率比較高的代碼概要,即可能滿足任務要求的初始代碼,細節並不豐富。然後,代碼概要進入代碼合成器模塊,找到滿足任務要求的模塊。

概要生成器,是一個帶有注意力機制的seq2seq循環神經網絡(RNN),在給定任務之後,通過LSTM編碼器對其進行編碼,然後再逐token解碼。

代碼合成器,有兩個組成部分:廣度優先概率枚舉器和神經網絡識別器。前者根據可能性從大到小枚舉代碼sketch, 後者根據任務要求來指導這一過程。

具體效果怎麼樣?

爲了驗證模型的性能,研究團隊選擇了兩個模型與其進行對比。

分別是隻有合成器的模型(Synthesizer only)和只有生成器的模型(Generator only)。

只有合成器的模型,相當於研究中代碼合成器模塊,進行模式識別之後,從頭開始枚舉所有可能的編碼。與微軟研究院研究團隊2016年提出的“Deepcoder”模型媲美。

只有生成器的模型,相當於研究中概要生成器模塊,用來預測完整的代碼。與微軟研究院和MIT團隊在2017年提出的“RobustFill”模型媲美。

進行對比的任務是數組列表、字符串轉換和自然語言要求。

在數組列表任務中,與其他兩項研究相比,研究中的模型可以在簡單的程序中呈現很好的性能。

在字符串轉換任務中,表現要比只有合成器的模型要好,並且在一定情況下,會好於只有生成器的模型。

真正展現模型能力的,是在AlgoLisp數據集中進行的測試,這一數據集中,不僅有數組列表和字符串相關的輸入輸出示例,還有相應的自然語言描述。

在這個數據集上,研究者檢驗了模型在非結構化數據情況下的性能。

測試結果表明,模型的表現完全超過了先前學者的研究。

而且,在包含“Even”和“Odd”要求的情況下,性能更加突出了,表明了模型的通用性更強。

如果你對這個研究感興趣,可以閱讀論文,來獲取更多的研究細節。

傳送門:

Learning to Infer Program Sketches

https://arxiv.org/abs/1902.06349

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章