除了给文本处理、信息检索等领域带来革新,为编程领域带来的变革也是大语言模型的重要影响之一。

传统的编程往往要求开发者手动编写每一行代码,这一过程不仅耗时费力,还充斥着大量重复性和模式化的任务,使得编程在很大程度上变成了一种高级的体力劳动。而大语言模型的介入,正逐步改变这一现状。

LLMs 通过深度学习海量代码库和文档,掌握了丰富的编程知识和模式,能够理解复杂的编程逻辑和语境,从而实现智能代码补全、自动化错误修复、代码风格迁移,甚至是根据自然语言描述自动生成代码片段。

这意味着开发者可以将更多精力从繁琐的编码细节中解放出来,专注于更高层次的逻辑设计和创新思维,极大地提升了编程效率和创造力。

因此,编程能力一直以来都是业界所关注的大模型的重要能力之一,也有各种测试对大模型的编程能力进行测试。然而,对于大多数用户来说,这些测试的数据都很难被理解或是直观感受。

各大模型在那些测试和榜单上排第一还是第二,除了被厂商拿来宣传,并不能让普通用户们体会到它们在编程中发挥多大的作用。何况其测试方式,也和日常使用并不完全一致。

所以,即便 ChatGPT 在相关编程测试中的表现并不是最好的,但因为其用户群体的广泛性,也依旧是许多人首选的编程工具。

比起那些性能排行,对于我们大部分人来说,更重要的问题在于,这些大模型生成的代码质量高吗?它们能解决多难的编程问题?借助大模型来生成代码的难度如何,能让新手无痛成为编程高手吗?

近期arXiv上的一项研究,就从日常使用的角度出发,围绕着上述问题,对 ChatGPT(此处的版本应为 GPT-3.5)的代码生成能力进行了测试。

打开网易新闻 查看精彩图片

图丨相关论文(来源:arXiv)

与其他测评比较不同的是,这项研究不单单关注代码编写的准确性,也关注完整性、结构性、参数覆盖率、可读性、逻辑性、解释深度这几项指标。

同时,ChatGPT 生成的代码即便不正确,也不会被完全否定,而是考虑其与所需目的的接近程度,以评估是否能在其基础上进行修改,从而使其具有可用性。

并且,在研究中,每项测试也并不只会进行一次,而是按照日常的使用习惯,进行多次尝试,由此也引出了平均尝试次数和完成测试任务所需时间这两项指标。

这样所测评出的结果,对大多数用户而言也更具有参考价值。

测试所选用的数据都来自比较经典的 R 语言教科书的题目,涵盖了各种语言工具和库的使用、数值计算、数据结构操作和转换、数据可视化和统计分析等各类题目。

ChatGPT 生成的代码质量如何?

首先来看一下,ChatGPT 的整体表现如何。

打开网易新闻 查看精彩图片

图丨ChatGPT 生成的代码在各种质量标准上的平均得分(来源:arXiv)

总体来看,ChatGPT 在多项质量评估维度上都表现出色,只有简洁度和准确性两个方面,相对要弱一点,它所生成的代码基本准确,但还有少量小错误。

在尝试次数和完成任务的时间这两项指标上,ChatGPT 的表现也同样不错。其完成任务所需的平均尝试次数仅为 1.61 次。在总计 100 个测试场景中,有 72% 的情况 ChatGPT 一次性成功,14% 的案例需两次尝试,6% 则需三次。

打开网易新闻 查看精彩图片

图丨完成任务尝试次数的分布(来源:arXiv)

值得注意的是,在几乎所有的测试案例(98%)中,ChatGPT 都能在不超过 5 次尝试的限制下,顺利生成准确答案。仅其中一次尝试了7次才完成,另一次在历经 10 次尝试后仍未达到理想效果。

而完成任务所需的时间,则主要花费在构建查询指令及审查 ChatGPT 输出的内容两个环节上成为了主要耗时环节,ChatGPT 自身的响应速度非常迅速,时间几乎可以忽略不计。

具体到生成 R 代码任务的所需的时间,统计结果显示,平均每个任务的完成时间被控制在 47 秒之内,而中位数更是低至 31.50 秒。

90% 的测试案例都能够在 100 秒的时限内达成目标,只有那两个需要超过 5 次尝试的测试的完成时间超过了 180 秒。所以总的来说 ChatGPT 的整体效率与成功率都是不错的。

再对 ChatGPT 生成不同类型 R 代码的性能进行详细分析后发现,它在生成常规编程类型代码方面性能最佳,而在生成可视化和探索类型代码方面性能最弱。

打开网易新闻 查看精彩图片

图丨各类问题的平均总分(来源:arXiv)

从评估结果来看,ChatGPT 在解决常规编程挑战上展现了高度的能力,平均得分达到 38.08 分(满分为 40 分),相当于 95.2% 的正确率。

在处理数据可视化相关问题时,其平均得分略有下降,为 36.43 分(91.1% 正确率),而对于探索性质的问题解决,ChatGPT 依然保持了高水平表现,平均得分 36.63 分(91.6% 正确率)。

而完成任务所需的时间和尝试次数,也映证了这一结果,可视化代码的生成,所需的时间和尝试次数都是最多的。

打开网易新闻 查看精彩图片

图丨完成生成各种类型代码任务的平均尝试次数(来源:arXiv)

但总体来说,ChatGPT 在各类任务上的表现其实都还不错。

ChatGPT 在不同难度编程任务上的表现

那么,随着任务难度的提高,ChatGPT 的表现会有所下降吗?

结果显示,会的。随着任务难度的提高,其生成的代码在主观质量指标上的总体得分呈现下降趋势。同时,完成这些更具挑战性的任务时,ChatGPT 需要更多的尝试次数,并且耗费的时间也相应延长。

打开网易新闻 查看精彩图片

图丨不同难度级别的可用性。其中,低难度任务指生成的代码由少量代码行组成,基本上是对库函数的简单调用;中等难度任务的程序代码大概有 10 行左右,超出了简单调用预定义函数的范围,但不涉及复杂的数据结构和算法;高难度任务的程序代码则超过十行并且需要更复杂的数据结构和算法(来源:arXiv)

进一步分析每个独立的质量评判标准,可以明确观察到一个趋势:ChatGPT 的编程表现随着任务难度级别的提升而递减。换句话说,任务越难,ChatGPT 在各个具体质量维度上的表现越趋于减弱。

打开网易新闻 查看精彩图片

图丨同难度任务的各种质量标准的可用性(来源:arXiv)

我们能靠 ChatGPT 变身编程高手吗?

而最后,我们要关心的问题是,借助大模型来生成代码的难度到底怎么样?能让新手无痛成为编程高手吗?

不同于传统编程工作,在使用大模型辅助编程时,用户实际上是通过自然语言输入来生成程序代码,实质上是人与机器学习系统交互的过程,高质量输出的生成很大程度上取决于用户的自然语言输入质量。

为了了解用户是否容易学习如何为模型提供良好的输入,研究按时间顺序(也对应了使用 GPT 生成代码的经验),对测试集 T0 到 T4 进行了测试和评估。

同时,为了量化不同测试集所含的问题难度,研究用以下公式确定了各自对应的难度:

其中,DL(T)表示测试集 T 的难度等级,ET、MT 和 HT 分别代表该测试数据集中易、中、难题目的数量。按照测试顺序,不同测试集对应的难度如下:

打开网易新闻 查看精彩图片

图丨不同测试集的难度级别(左);使用 GPT 在不同测试集上的各种质量属性的得分(右)(来源:arXiv)

理想情况下,我们使用 GPT 编程的表现,应该会随着使用经验的增加而提高,事实会如我们所愿吗?

结果显示,随着使用 ChatGPT 经验的增加,完成任务所需的平均尝试次数和平均完成时间并没有被显著减少。

打开网易新闻 查看精彩图片

图丨不同难度级别的各种测试集的平均尝试次数(左)和完成测试时间(右)(来源:arXiv)

而且,使用 ChatGPT 在三个不同难度的编程任务中的平均总质量得分,也没有随着使用经验增加而明显提高,其得分依旧与任务难度有较大的关系

打开网易新闻 查看精彩图片

图丨使用 GPT 在不同难度级别的测试集的总体质量分数(来源:arXiv)

所以,普通用户仅凭借使用大模型的一般经验来掌握如何有效地利用 ChatGPT 生成程序代码并非易事,它并不能直接让新手成为编程高手

此前的另一项研究就表明,使用生产式 AI 来编程的表现,在很大程度上与使用者的在编程上的元认知能力相关。

打开网易新闻 查看精彩图片

图丨相关论文(来源:arXiv)

如果本身没有掌握编程的相关能力,那么其表现就不会太好,甚至,还会产生出一种自己已经掌握编程能力的错觉,让他们难以意识到自己在理解编程问题上的不足。

所以,虽然 ChatGPT 等大模型工具如今在编程上的表现已经比较出色了,我们可以借助他来完成许多编程工作,提高我们日常的工作效率。

但是,如果真的要实现“人人编程”,那么,要么首先需要提高每个使用者对编程技能本身的认识,要么还需要相关的工具,进一步引导他们,增强他们在编程上的元认知能力

参考资料:

[1].https://arxiv.org/abs/2402.03130v2

[2]. https://arxiv.org/abs/2405.17739

本文内容不代表平台立场,不构成任何投资意见和建议,以个人官网/官方/公司公告为准。