导读//
人工智能(AI)在各个领域的自动化方面取得了显著进展,展现了巨大的潜力。大型语言模型(LLM)是这一进展的重要贡献者,彻底改变了人工智能技术的前景。这些模型经过训练,可以理解并生成非常接近人类交流的文本。
除了在内容起草、主题探索和协作方面发挥作用,还对软件开发领域产生了重大影响。它不仅能够生成各种语言的代码,还能提供代码注释、审查代码并识别潜在问题、错误。这些功能在许多应用中发挥着重要作用,例如作为新手程序员的指导工具、协助代码审查和加速原型开发过程等。
该文基于迄今为止最大的编码挑战目录,对的编码能力进行了评估。重点关注编程语言和以数据结构和算法为核心的问题,而这两个主题是计算机科学的基础。大多数实际编程任务都涉及算法和数据结构的某些方面。该文旨在提供对编码能力的全面评估,以便用户和开发人员能够更好地了解其特点和使用场景。
论文链接:
精读笔记
一、评估工作
该文的研究基于该文研究中使用的各种实验设置中分布的总共2,792个编码挑战。具体包括:
深入算法下的五个子主题:动态规划、贪婪算法、深度优先搜索、分治和拓扑排序。同时,该文探索数据结构中的五个区域:优先级队列、数组、哈希表、堆栈和二分搜索法树。该文还介绍了一个新的研究领域——字符串操作。
一系列全面的质量指标:评估GPT-3和GPT-4,包括但不限于编码惯例、编码错误的复杂性、警告和重构。
评估中的语言模型:该文的工作集中在GPT-4和它的前身GPT-3(该文特别使用模型3.5),它们是通过在消费者市场上的最先进的模型。
在该文的评估中使用的两个主要工具是和。是一个在线平台,提供广泛的编码挑战和面试准备材料。它在广泛的主题中提供了不同的问题难度级别,并支持广泛的编程语言选择。上的大多数问题都是受谷歌、亚马逊、脸书、微软等大型科技公司面试问题的启发,或者直接从这些面试问题中提取的。包含一个内置的编译器,它不仅可以评估用户提交的代码,还可以将其与其他提交的代码进行比较。它基于测试用例的详细目录来评估代码提交。这些卓越的特性使成为评估编码熟练程度的可靠平台,因此该文在实验中使用它作为编码挑战的来源,并作为评估挑战解决方案的平台(参见图1中提交给的问题示例,以及在实验中生成的编码解决方案)。
图1 在该文的实验中,面临的一个编码挑战的截图。左图为在提示符下输入的问题,右图为生成的响应问题的部分代码
二、评估结果
2.1 多久产生一个正确的编码解决方案
对于GPT-3、GPT-4和人类编码者,图5显示了完整编码挑战中正确编码解决方案的百分比。结果包括训练集和测试集。在训练集中,GPT-4表现出色,GPT-3与人类表现相当。在测试集上,人类表现优于两个模型,而GPT-4的表现大约是GPT-3的两倍。
图2 GPT-3、GPT-4和人类在训练和测试中正确性
对于训练和测试数据集,图3显示GPT-3能够生成正确解决方案的一些问题,而GPT-4生成了错误的解决方案(即训练集中的7.13%的问题和测试集中的2.08%的问题)。因此,虽然GPT-4明显比GPT-3更有效,但这并不意味着它在每个任务上都能战胜GPT-3。这一特征指出了基于学习的系统的现实,即改进的模型通常在整体上具有更好的性能,但在某些问题上表现较差。
图3 GPT-3和GPT-4对训练和测试数据集中所有问题的排他性和包容性正确性
另一个有趣的特点是,随着问题变得越来越难,人类的表现越来越好。例如,在测试集上,GPT-4在简单问题上的最高准确率为75%,而在困难问题上的最低准确率为0%。另一方面,随着测试集上的问题变得更难,人类看到了更温和的下降,从69.81%下降到33.62%。在训练集上,两个模型中最好的一个在简单问题上比人类做得好得多,然而人类在较难的问题上缩小了差距。
表1 GPT-3、GPT-4和人类在训练和测试数据集的每个子主题上的表现
表2 GPT-3、GPT-4和人类在不同难度问题上的表现
2.2 检查未能产生正确解决方案的情况
为了说明如何阅读表3,该文使用第二列(即“算法”->“训练集”->“GPT-3”)中的第一个值(42.57)。该值表示,当从训练集中提取算法问题的编码挑战时,由GPT-3模型生成的错误答案中有42.57%通过了0到10%的测试用例。因此,通过观察整个表格的前两行,可以得出结论,绝大多数由生成的错误解决方案仅通过了0-20%的测试用例。在另一个极端(最后一行),可以看到很小一部分错误答案通过了90%到接近100%的测试用例。
总体而言,表格显示,在该文解决的编码问题类型中,无论是哪个模型(GPT-3还是GPT-4),问题主题(算法、数据结构还是字符串)以及问题的来源(即训练集还是测试集),每当生成错误的解决方案时,根据通过的测试用例,该解决方案很可能与正确解决方案相差甚远。表格显示,大部分情况下,这种模式仍然存在。
表3 当生成错误的解决方案时,测试用例通过的百分比
2.3 代码质量评估
图4 代码中出现的代码质量问题
在报告中,发现了总共20个不同的重构信息和18个规范信息。这些信息及其在GPT-3和GPT-4中出现的百分比可以在表4中看到。有一个重构信息和一个规范信息的频率相对于其他信息来说非常高,及ID为R0903的信息。根据的文档,该ID指的是消息:too-few–。另一常见规范信息是具有的信息:当给定的名称不符合其类型特定的命名约定时,无论是常量、变量、类还是其他类型,都会发生这种情况。
对于使用生成源代码的用户来说,可以预期绝大多数情况下只会出现几个较为常见的质量问题。
表4 在代码中看到的每个重构和约定问题的百分比份额
三、结论
本文对的编程能力进行了全面的评估。重点关注算法和数据结构,使用2,792个编码提示进行评估。评估了在各个子主题中的正确解决方案比例。发现人类在未见过的问题上通过的数量多于,而在见过的问题上通过的数量少于。还发现,新模型GPT-4并非在每个问题上都优于旧模型GPT-3。观察结果表明,随着LLM的发展,较旧版本的模型仍可能有用。
评估了其生成的代码质量,包括错误类型、警告、约定和重构问题。发现少数错误类型和问题类型占据了绝大多数情况。训练记忆实验发现的解决方案受益于对训练集的记忆,但也可能是其能够填补不完整问题中缺失信息的稳健性表现。总的来说,本文展示了LLMs令人印象深刻的性能。
附录-该文实验中生成的代码中所有代码质量问题的定义