MIT微軟為AI量身打造了一套leetcode編程題
本文經(jīng)AI新媒體量子位(公眾號ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
你見過這種編程題目描述方式嗎?

不用自然語言描述,也沒有輸入輸出示例,你所看到的就只有一個Python函數(shù)。
這是來自MIT、Allen AI和微軟的研究人員提出的一種全新的編程題目描述方法:
每個題目都由一個簡短的Python函數(shù)f定義,目標(biāo)是找到一個輸入x,使f輸出true。
這樣的題目形式可以讓AI審題更容易,人類程序員的理解也不會受到影響。
AI編程,道路真是越來越平了啊。
接下來就來詳細看看這個研究吧。

沒有自然語言描述的編程題目
再來解釋一下這種描述方法:
題目采用Python函數(shù)的形式,參數(shù)為答案。
解題的目標(biāo)是找到使函數(shù)輸出為真的輸入x,即滿足f(x)= true的正確答案。
現(xiàn)在請你舉一反三:求解一個有1000個不連續(xù)“o”的字符串,用這種新形式如何描述呢?
正確答案:

下面是另外兩道題目的描述示例。
動態(tài)規(guī)劃—最長單調(diào)遞增子序列問題:

經(jīng)典的漢諾塔 (Towers of Hanoi ):

研究人員按此種出題形式囊括了各種編程題,提出來一個開源數(shù)據(jù)集:叫做P3。
該數(shù)據(jù)集題型非常全面:涉及不同難度、不同領(lǐng)域和不同算法工具等方面的題目。
有簡單的字符串操作問題;
有經(jīng)典如漢諾塔和國際象棋(例如,騎士游歷算法和N皇后問題變體)等難題;
也有兩人挑戰(zhàn)尋找最佳策略的題型,如井字棋(Tic-Tac-Toe)、石頭剪刀布、珠璣妙算Mastermind等;
還包括來自國際數(shù)學(xué)奧林匹克競賽(IMO)和國際大學(xué)生程序設(shè)計競賽(ICPC)的題目,如各種圖論和數(shù)論難題。

一共包含208種題型、14萬+的題目,并且還在不斷更新中。
每個題目都提供了至少一種答案。

這套新穎的編程挑戰(zhàn)題庫數(shù)據(jù)集,抓住了編程題目的本質(zhì),可用于教AI編程并評估AI的編程能力。
研究人員表示,這套題可以對AI的編程能力進行客觀評估。因為不用查看答案,就能直接驗證解答的正確性。因此,這種題目不會增加AI學(xué)習(xí)任何答案偏差的負擔(dān)。
希望這個數(shù)據(jù)集可以開發(fā)出新的AI編程解決方案
不同AI求解器根據(jù)這些題目編程的效果如何呢?
研究人員做了一些深入的實驗,開發(fā)了基于隨機森林、Transformer和不同類型GPT-3 prompts的AI求解器,它們采用不同參數(shù)枚舉、自頂向下的方法,使用這個P3數(shù)據(jù)集來評估性能。
首先,測試這些求解器在這個數(shù)據(jù)集上利用此前解決題目的方法來解決新題目的自舉效率(bootstrapping efficacy)。
結(jié)果發(fā)現(xiàn),增加嘗試次數(shù)可以解決新題目。但它們也能通過學(xué)習(xí)過去的經(jīng)驗,更快地解決新的難題。
下圖為這些AI求解器在不同嘗試次數(shù)下的已解決題目數(shù)量:

而在一項小的用戶研究中,21名在Python編程方面有不同經(jīng)驗?zāi)晗薜某绦騿T完成了不同難度的30個題目。每個題目最多分配6分鐘的時間來解決。
用這個數(shù)據(jù)集評估AI與人類程序員對編程題難度的感知發(fā)現(xiàn):
人類覺得難的題對AI來說也更難,現(xiàn)階段情況下,AI求解器能解決的大多數(shù)題都是對人類來說比較簡單的。

上圖表示人類和AI對各種題目的難度打分,按人類分?jǐn)?shù)排序。人類的難度分?jǐn)?shù)通過超出允許的最大解題時間的平均分?jǐn)?shù)來衡量,AI的則是根據(jù)解題所需的嘗試次數(shù)。
另外,AI用這種形式的題目可以解決了60% 的難題,初學(xué)者和有經(jīng)驗的程序員平均分別解決了 76% 和 87% 的難題。
總的來說,利用這個新穎的數(shù)據(jù)集,通過精心設(shè)計的AI求解器,可以大大減少AI編程求解所需的嘗試次數(shù)、并解出更多的題目。
因此,研究人員希望,這個新的編程題庫數(shù)據(jù)集能支持大家研究和開發(fā)新的AI編程解決方案,提高AI編程的效率和性能。
此前,UC伯克利曾訓(xùn)練AI刷LeetCode,總共5000道題的測試中,AI能做出15%。
不知道使用這個數(shù)據(jù)集訓(xùn)練,AI編程的能力又會達到什么水平呢?
論文地址:https://arxiv.org/abs/2106.05784
開源數(shù)據(jù)集鏈接:https://github.com/microsoft/PythonProgrammingPuzzles