GPT-4o无法取代程序员! IEEE研究显示,困难编码正确率仅为0.66%!
目录
有了ChatGPT,还需要人类程序员编码吗?上个月,一项发表在IEEE TSE期刊(Transactions on Software Engineering)上的研究评估了ChatGPT生成代码在功能性、复杂性和安全性方面的表现。
结果显示,ChatGPT生成可用代码的能力差异很大,其成功率从0.66%到89%不等,这主要取决于任务的难度和编程语言等多种因素。
研究人员测试了GPT-3.5在五种编程语言(C、C++、Java、JavaScript和Python)中,解决LeetCode平台上的728个编码问题和应对18个CWE(常见缺陷枚举)场景的能力。
虽然AI在某些情况下能够生成比人类更优质的代码,但分析也揭示了一些AI生成代码的安全性问题。
论文作者、格拉斯哥大学助理教授Yutian Tang指出,
「AI代码生成在一定程度上可以提升开发效率和自动化软件工程。然而,我们必须认识这些模型的优势和不足,以便合理应用」。
「通过全面的分析,可以发现ChatGPT生成代码过程中出现的潜在问题和局限性,从而改进生成技术」。
网友对此发表了看法,有人庆幸地问道,所以我还没有被解雇?另一人回应说,至少今天还没有。
还有人指出,这项研究评估的是GPT-3.5,而GPT-4和Claude 3.5在编码能力上已经有了大幅提升。
没体验过OpenAI最新版GPT-4o?快戳最详细升级教程,几分钟搞定:
升级ChatGPT-4o Turbo步骤https://www.zhihu.com/pin/1768399982598909952
如何使用WildCard正确方式打开GPT-4o,目前 WildCard 支持的服务非常齐全,可以说是应有尽有!
官网有更详细介绍:WildCard
01 0.66%-89%,惊人的成功率差异
总体而言,ChatGPT在不同编程语言的问题上表现不错,特别是在解决2021年之前的LeetCode编码问题时。
例如,它能够为简单、中等和困难的问题生成可运行代码,成功率分别约为89%、71%和40%。
然而,当涉及到2021年之后的算法问题时,ChatGPT生成正确运行代码的能力受到了影响。即使是简单级别的问题,它有时也无法理解问题的含义。
例如,ChatGPT在生成「简单」编码问题的可运行代码方面的成功率在2021年后从89%下降到52%。
而它在生成「困难」问题的可运行代码方面的成功率也在此时间后从40%下降到0.66%。
Tang表示,「一个合理的假设是,ChatGPT在2021年之前的算法问题上表现更好的原因是这些问题在训练数据集中经常出现」。
02 实验评估
首先为给定的LeetCode问题或CWE场景构造合适的提示并发送给ChatGPT,让它根据提示和上一轮对话的上下文信息给出响应。
之后,研究人员将模型响应中的代码片段提交给LeetCode平台,利用其在线判断功能来检验代码的正确性,CWE漏洞则使用CodeQL进行手动分析。
如果测试结果通过,则生成结束,否则就需要利用LeetCode和CodeQL的反馈继续建立新的提示输入给ChatGPT,再次进行代码生成。
如果ChatGPT在对话轮数限制(5轮)内始终没有生成出通过测试的代码,则认为生成任务失败。
生成功能性正确代码的能力
研究动机:
探究ChatGPT在接收到提示后,能否自动生成功能性正确的代码。此研究的目标是评估ChatGPT在单轮对话中生成功能性正确代码的能力,从而提升开发者的生产力。
研究方法:
- 让ChatGPT阅读问题描述,并在单轮对话中生成相应代码(最大对话轮数设为1)。
- 使用LeetCode平台上的编程问题作为数据集,截至研究时共包含2500个难度不等的问题。
- 将LeetCode所有问题分为2021年之前(Bef.problems)和2021年之后(Aft.problems)两类,因为ChatGPT的训练数据截止于2021年。
- 考虑到2021年之前的问题可能已存在于ChatGPT的训练集中,这可能使代码生成任务退化为简单的数据库查询(即代码复用)。为全面评估,研究中同时考虑了这两类问题。
研究重点放在LeetCode上的算法问题,因为算法问题是该平台上最重要、最多和最多样化的问题。Bef.problems和Aft.problems的总数分别为1624个和354个,且两者的难度分布为难、中、易,比例为1:2:1。
在所有Bef.problems中,研究者随机抽取了374个问题,其数量与Aft.problems相似,难度分布也与Aft.problems相同。同样,在354个Aft.problems和Bef.problems中,难、中、易问题的数量比例也是1:2:1,与LeetCode平台上所有问题的难度分布一致。
此外,研究人员还检查了Bef.problems和Aft.problems之间是否存在显著差异。如果Aft.problems只是Bef.problems的重构,ChatGPT很可能可以轻松解决这些问题,这可能会影响实验结果在区分时间段方面的可靠性。
研究人员找到了142对相似问题,并让两名研究生独立检查这些问题对。通过仔细核对和讨论,发现这些相似的问题要么情景相似,但求解目标完全不同;要么情景和条件不同,但可以使用类似的算法(如动态编程)求解。经过人工分析,研究者认为没有任何情况表明Bef.problems可以轻易重新表述为Aft.problems。
研究实施:
对于每个问题,要求ChatGPT用5种不同的编程语言生成代码:C、C++、Java、Python3和JavaScript。使用相同的提示模板为每个 <问题、语言> 对创建了相应的提示。Bef.problems和Aft.problems分别生成1,870和1,770个提示。由于ChatGPT的查询速度有限,研究者将每条提示输入一次,要求生成代码。然后将解析后的解决方案提交给LeetCode进行功能正确性判断,结果包含接受(A.)、回答错误(W.A.)、编译错误(C.E.)、超时(T.L.E.)和运行错误(R.E.)。
为了评估ChatGPT的代码生成能力,研究者采用状态率(SR),图片和图片分别表示根据状态生成的代码片段数和输入的提示数。
通过该研究,揭示了ChatGPT在生成功能性正确代码方面的潜力和局限性,并为未来的改进提供了依据。
研究结果:
表1和表2显示,LeetCode对五种编程语言在两个时间段、两种形式下的代码生成结果、SR以及相应的相对频率柱形图。
由于Python3和JavaScript都是动态编程语言,因此这两列不包含C.E.。
从总体结果来看,ChatGPT为Bef.problems生成的功能正确代码的A.率明显高于Aft.problems。
具体来说,Bef.problems的五种语言平均正确率(68.41%)比Aft.problems的(20.27%)高出 48.14%。
五种语言在不同阶段的代码生成性能差异显著,P值为0.008,效应大小值为1。
ChatGPT的多轮修复功能似乎没法让代码更简洁,多数情况下会维持甚至提高代码的复杂
性,这或许也是多轮修复功能效果不理想的原因之一。
如何使用WildCard正确方式打开GPT-4o,目前 WildCard 支持的服务非常齐全,可以说是应有尽有!
官网有更详细介绍:WildCard
推荐阅读:
GPT-4o不仅能写代码,还能自查Bug,程序员替代进程再进一步!
原文地址:https://blog.csdn.net/ElevenSakura/article/details/140303741
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!