麻省理工、微软为AI量身打造了一套Leetcode编程题,来挑战下?

  丰色 发自 凹非寺

  量子位 报道 | 公众号 QbitAI

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

  def sat(s: str, n: int=7):

  assert type(s) is str, 's must be of type str'

  return int(str(5 ** n)[:-2] + s)==5 ** n

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

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

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

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

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

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

  

麻省理工、微软为AI量身打造了一套Leetcode编程题,来挑战下?

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

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

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

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

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

  

麻省理工、微软为AI量身打造了一套Leetcode编程题,来挑战下?

  正确答案:

  def sat(s: str):

  assert type(s) is str, 's must be of type str'

  return s.count('o')==1000 and s.count('oo')==0

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

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

  def sat(x: List[int], length: int=13, s: str="Dynamic programming solves this puzzle!!!"):

  assert type(x) is list and all(type(a) is int for a in x), 'x must be of type List[int]'

  return all(s[x[i]] <=s[x[i + 1]] and x[i + 1] > x[i] >=0 for i in range(length - 1))

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

  def sat(moves: List[List[int]]):

  assert type(moves) is list and all(type(a) is list and all(type(b) is int for b in a) for a in moves), 'moves must be of type List[List[int]]' # moves is list of [from, to] pairs

  rods=([8, 7, 6, 5, 4, 3, 2, 1], [], [])

  for [i, j] in moves:

  rods[j].append(rods[i].pop)

  assert rods[j][-1]==min(rods[j]), "larger disk on top of smaller disk"

  return rods[0]==rods[1]==

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

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

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

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

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

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

  

麻省理工、微软为AI量身打造了一套Leetcode编程题,来挑战下?

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

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

  

麻省理工、微软为AI量身打造了一套Leetcode编程题,来挑战下?

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

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

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

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

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

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

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

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

  

麻省理工、微软为AI量身打造了一套Leetcode编程题,来挑战下?

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

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

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

  

麻省理工、微软为AI量身打造了一套Leetcode编程题,来挑战下?

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

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

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

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

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

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

  论文地址:

  arxiv/abs/2106.05784

  开源数据集链接:

  github/microsoft/PythonProgrammingPuzzles

  今天给大家推荐一本机器学习、深度学习的人都应该听说过一本经典教材: 《Pattern Recognition and Machine Learning》,中文译名《模式识别与机器学习》,简称 PRML。 出自微软剑桥研究院实验室主任 Christopher Bishop 大神之手。 对,就是豆瓣评分 9.5 的这本书。

  

麻省理工、微软为AI量身打造了一套Leetcode编程题,来挑战下?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值