MIT微软为AI量身打造了一套leetcode编程题

丰色发自凹非寺量子位报道公众号 QbitAI

你见过这种编程题目描述方式吗?

不用自然语言描述,也没有输入输出示例,你所看到的就只有一个 Python 函数。

这是来自 MIT、Allen AI 和微软的研究人员提出的一种全新的编程题目描述方法:

每个题目都由一个简短的 Python 函数f定义,目标是找到一个输入x,使f输出 true。

这样的题目形式可以让 AI 审题更容易,人类程序员的理解也不会受到影响。

AI 编程,道路真是越来越平了啊。

接下来就来详细看看这个研究吧。

没有自然语言描述的编程题目

再来解释一下这种描述方法:

题目采用 Python 函数的形式,参数为答案。

解题的目标是找到使函数输出为真的输入x,即满足f(x)= true 的正确答案。

现在请你举一反三:求解一个有 1000 个不连续“o”的字符串,用这种新形式如何描述呢?

正确答案:

下面是另外两道题目的描述示例。

动态规划—最长单调递增子序列问题:

经典的汉诺塔(Towers of Hanoi ):

研究人员按此种出题形式囊括了各种编程题,提出来一个开源数据集:叫做 P3。

该数据集题型非常全面:涉及不同难度、不同领域和不同算法工具等方面的题目。

有简单的字符串操作问题;

有经典如汉诺塔和国际象棋(例如,骑士游历算法和N皇后问题变体)等难题;

也有两人挑战寻找最佳策略的题型,如井字棋(Tic-Tac-Toe)、石头剪刀布、珠玑妙算 Mastermind 等;

还包括来自国际数学奥林匹克竞赛(IMO)和国际大学生程序设计竞赛(ICPC)的题目,如各种图论和数论难题。

一共包含 208 种题型、14 万+的题目,并且还在不断更新中。

每个题目都提供了至少一种答案。

这套新颖的编程挑战题库数据集,抓住了编程题目的本质,可用于教 AI 编程并评估 AI 的编程能力。

研究人员表示,这套题可以对 AI 的编程能力进行客观评估。因为不用查看答案,就能直接验证解答的正确性。因此,这种题目不会增加 AI 学习任何答案偏差的负担。

希望这个数据集可以开发出新的 AI 编程解决方案

不同 AI 求解器根据这些题目编程的效果如何呢?

研究人员做了一些深入的实验,开发了基于随机森林、Transformer 和不同类型 GPT-3 prompts 的 AI 求解器,它们采用不同参数枚举、自顶向下的方法,使用这个 P3 数据集来评估性能。

首先,测试这些求解器在这个数据集上利用此前解决题目的方法来解决新题目的自举效率(bootstrapping efficacy)。

结果发现,增加尝试次数可以解决新题目。但它们也能通过学习过去的经验,更快地解决新的难题。

下图为这些 AI 求解器在不同尝试次数下的已解决题目数量:

而在一项小的用户研究中,21 名在 Python 编程方面有不同经验年限的程序员完成了不同难度的 30 个题目。每个题目最多分配 6 分钟的时间来解决。

用这个数据集评估 AI 与人类程序员对编程题难度的感知发现:

人类觉得难的题对 AI 来说也更难,现阶段情况下,AI 求解器能解决的大多数题都是对人类来说比较简单的。

上图表示人类和 AI 对各种题目的难度打分,按人类分数排序。人类的难度分数通过超出允许的最大解题时间的平均分数来衡量,AI 的则是根据解题所需的尝试次数。

另外,AI 用这种形式的题目可以解决了 60% 的难题,初学者和有经验的程序员平均分别解决了 76% 和 87% 的难题。

总的来说,利用这个新颖的数据集,通过精心设计的 AI 求解器,可以大大减少 AI 编程求解所需的尝试次数、并解出更多的题目。

因此,研究人员希望,这个新的编程题库数据集能支持大家研究和开发新的 AI 编程解决方案,提高 AI 编程的效率和性能。

此前,UC 伯克利曾训练 AI 刷 LeetCode,总共 5000 道题的测试中,AI 能做出 15%。

不知道使用这个数据集训练,AI 编程的能力又会达到什么水平呢?

论文地址:https://arxiv.org/abs/2106.05784

开源数据集链接:https://github.com/microsoft/PythonProgrammingPuzzles

本文链接

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注