你见过这种编程题目描述方式吗?
不用自然语言描述,也没有输入输出示例,你所看到的就只有一个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求解器根据这些题目编程的效果如何呢?
研究人员做了一些深入的实验,开发了基于随机森林、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
— 完 —