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

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

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

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

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

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

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

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

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

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