「草莓」模型再次跳票,凌晨发布的是个啥?

机器之心报道

编辑:张倩、小舟

有人说,「我们期待的是草莓,但他们发布的是羽衣甘蓝。」我们来看看这个「羽衣甘蓝」是做什么用的。

一直以来,大模型的编程能力都备受关注,超强AI程序员Devin的问世更是将「AI能否替代程序员」这一话题推上了风口浪尖。最近,Devin也迎来了新对手——初创公司Cosine推出的自主AI程序员Genie

。该公司表示,Genie的表现轻松超越了Devin,在第三方基准测试SWE-bench上的得分为30%,而Devin的得分仅为13.8%。

这个SWE-Bench是一个用于评估LLM解决GitHub上真实软件问题能力的基准测试数据集。它收集了来自12个流行的Python仓库的2,294个Issue-PullRequest对。在测试时,LLM会拿到一个代码库和issue描述,然后生成一个补丁来解决issue描述的问题。这个数据集在AI编程能力的评估中已被广泛使用。

在AI编程能力进化的同时,这个基准也在进化。今天凌晨,网传的OpenAI「草莓」模型再次跳票,但OpenAI确实发布了新东西,就是SWE-Bench的改进版本——SWE-benchVerified。

OpenAI指出,原始的SWE-bench存在一些问题,可能导致模型的自主软件工程能力被低估。因此,在改进过程中,他们与SWE-Bench原作者合作,进行了人工筛选和改进,确保单元测试的范围适当且问题描述明确。

在SWE-benchVerified上进行的新测试中,很多AI编程智能体的得分都比原来要高。其中,UIUC的无Agent方案Agentless甚至实现了得分翻倍,OpenAI认为,这证明之前的基准确实存在低估AI编程能力的缺陷。

但对于蹲守「草莓」的全世界网友来说,这个发布还是过于敷衍了。有人说,「我们期待的是草莓,但他们发布的是羽衣甘蓝。」

关于SWE-bench的背景知识

SWE-bench测试集中的每个示例都是根据GitHub上12个开源Python代码库中一个已解决的GitHubissue创建的。每个样本都有一个相关的拉取请求(PR),其中包括解决方案代码和用于验证代码正确性的单元测试。这些单元测试被称为FAIL_TO_PASS测试,因为在PR中的解决方案代码添加之前它们会失败,添加之后则会通过。每个样本还包括PASS_TO_PASS测试,这些测试在PR合并前后都会通过,用于检查PR是否破坏了代码库中与问题无关的其他功能。

在SWE-bench中,AI智能体会获得来自GitHubissue的原始文本,即问题陈述,并可以访问代码库。给定这些信息,智能体必须编辑代码库中的文件以解决问题。

AI智能体给出的编辑将通过运行FAIL_TO_PASS和PASS_TO_PASS测试来评估。如果FAIL_TO_PASS测试通过,这意味着编辑解决了问题。如果PASS_TO_PASS测试通过,则意味着编辑没有破坏代码库中无关的部分。要完全解决原始的GitHub问题,两组测试都必须通过。

提高SWE-bench稳健性、可靠性的三个改进方向

为了提高SWE-bench的稳健性和可靠性。开发团队确定了三个主要的改进方向:

SWE-benchVerified

为了解决这些问题,OpenAI启动了一项由专业软件开发人员进行的人工注释活动,对SWE-bench测试集中的每个样本进行了筛查,以确保单元测试的范围适当,问题描述清晰明确。

他们与SWE-bench的作者们一起发布了SWE-benchVerified:这是SWE-bench原始测试集的一个子集,包含500个样本,这些样本已经通过了人工注释者的验证。这个版本取代了原来的SWE-bench和SWE-benchLite测试集。此外,他们还在发布所有SWE-bench测试样本的人工注释。

他们还与SWE-bench的作者合作,为SWE-bench开发了一个新的评估工具,该工具使用容器化的Docker环境,使在SWE-bench上进行的评估变得更容易、更可靠。

改进方法

OpenAI与93位具有Python经验的软件开发人员合作,手动筛选SWE-bench样本,并对SWE-bench测试集中的1699个随机样本进行了注释,最终得到SWE-benchVerified。

他们的方法是对SWE-bench测试集中的样本进行注释,以确保测试的公平性和准确性。具体来说,他们关注两个关键点:首先,评估问题描述是否足够详细,以防过于模糊的描述导致测试不公平;其次,检查FAIL_TO_PASS单元测试是否会错误地筛选掉有效的解决方案。

每个注释标准都有一个标签,范围为[0,1,2,3],严重程度逐渐增加。标签0和1是次要的;标签2和3是严重的,表明样本在某些方面不充分,应该被丢弃。

此外,假设样本没有问题,OpenAI会通过让注释者估计开发人员决定和实施解决方案需要多长时间来评估每个样本的难度。最后,OpenAI提供了一个自由格式输入选项来标记样本的任何其他主要问题。

为了构建SWE-benchVerified,OpenAI从原始测试集中过滤掉问题陈述或FAIL_TO_PASS单元测试严重性为2或以上的任何样本,并且还过滤掉所有标记有其他严重问题的样本。

注释结果

按照新的标准,原始SWE-bench中的样本有很大一部分是不合格的。如图所示,38.3%的样本因为问题陈述不够明确而被标记,61.1%的样本因为单元测试可能会不公平地将有效的解决方案错误地标记为不正确而被标记(严重程度2、3两级加起来)。总体而言,他们的注释过程导致68.3%的SWE-bench样本因问题陈述不明确、单元测试不公平或其他问题而被过滤掉。

下图比较了原始SWE-bench数据集和新SWE-benchVerified数据集的难度分布。他们根据1699个样本的随机子集估算SWE-bench的难度分布。

从图上可以看出,在原始的SWE-bench数据集中,大多数(77.8%)样本的预计完成时间少于一个经验丰富的软件工程师一个小时的工作量。SWE-benchLite和新SWE-benchVerified数据集进一步增加了这一比例,预计超过一个小时才能解决的问题少于10%。然而,这种变化背后的机制有着很大的不同:SWE-benchLite是对原始数据集的子采样,使基准测试变得更容易,而SWE-benchVerified则试图从数据集中移除不可行的样本。

各个智能体在SWE-benchVerified上的性能

在新的SWE-benchVerified数据集上,开发团队使用多个在原始SWE-bench排行榜上表现良好的开源支架测试了GPT-4o的性能。

结果发现GPT-4o在性能最佳的支架上的性能在SWE-benchVerified上达到33.2%,是原始SWE-bench上16%分数的两倍多。总的来说,这证实了OpenAI最初的怀疑,即原始SWE-bench低估了智能体的能力。

值得注意的是,从SWE-benchLite到SWE-benchVerified的跳跃并不那么明显,因为经过筛选,SWE-benchLite已经比完整数据集变得更容易。

按难度分层的性能分析

在SWE-benchVerified上进行评估时,性能的提高可能部分是由于测试样本的分布向更简单的样本倾斜。

OpenAI通过绘制按难度分层的性能来调查这一点。如果新数据集只是改变难度分布以包含更简单的样本,则每个类别内的分层性能不会改变,就像从原始SWE-bench到SWE-benchLite的情况一样。

相反,OpenAI观察到,当转向SWE-benchVerified时,智能体在各个难度类别的性能均有所提高,这与预期效果一致,「草莓」模型再次跳票,凌晨发布的是个啥?即从所有类别中移除不可能的样本,而不是简单地移除困难样本。

参考链接:https://openai.com/index/introducing-swe-bench-verified/

免责声明:本网站部分内容由用户自行上传,若侵犯了您的权益,请联系我们处理,谢谢!联系QQ:2760375052

分享:

扫一扫在手机阅读、分享本文