首页 > 其他分享 >Program Code Generation with Generative AIs 代码生成

Program Code Generation with Generative AIs 代码生成

时间:2024-08-11 16:55:59浏览次数:17  
标签:代码生成 Code 编码 Generation 复杂度 生成 问题 AI 程序代码

这篇文章是一篇学术论文,标题为《Program Code Generation with Generative AIs》,由Baskhad Idrisov和Tim Schlippe撰写,发表在《Algorithms》期刊的2024年第17卷上,文章编号为62。文章主要探讨了使用生成性人工智能(Generative AIs)生成程序代码的正确性、效率和可维护性,并将这些指标与人类生成的程序代码进行了比较。

以下是文章的详细内容概述:

摘要

  • 文章比较了人类生成和AI生成程序代码的正确性、效率和可维护性。
  • 通过分析AI和人类生成的程序代码的计算资源,使用时间复杂度、空间复杂度、运行时和内存使用情况等指标进行评估。
  • 同时,使用代码行数、圈复杂度、Halstead复杂度和维护性指数等指标来评估可维护性。
  • 实验中,让生成性AI在Java、Python和C++中生成解决leetcode.com上问题的程序代码。
  • 研究结果表明,GitHub Copilot(基于Codex GPT-3.0)表现最佳,解决了50%的问题,而CodeWhisperer未能解决任何问题。BingAI Chat(GPT-4.0)正确解决了38.9%的问题,ChatGPT(GPT-3.5)和Code Llama(Llama 2)各解决了22.2%的问题,StarCoder和InstructCodeT5+各解决了5.6%的问题。
  • 尽管ChatGPT只生成了四个正确的程序代码,但它是唯一能够提供难度级别为“困难”的编码问题正确解决方案的生成性AI。
  • 文章还提到,对于11个AI生成的错误代码,只需要进行最小修改即可解决问题,与从头开始编程相比,可以节省8.9%至71.3%的时间。

引言

  • 生成性AI已成为日常生活的一部分,尤其是在文本生成方面,能够提供类似人类的对话、帮助、信息甚至情感支持。
  • AI在编码领域的变革力量,AI驱动的聊天机器人不仅能进行类似人类的对话,还能生成程序代码。

相关工作

  • 论文回顾了有关自动程序代码生成和评估的现有工作,包括Codex、GitHub Copilot、Amazon CodeWhisperer和ChatGPT等工具的评估。

实验设置

  • 介绍了参与研究的生成性AI模型,包括ChatGPT、BingAI Chat、GitHub Copilot、StarCoder、Code Llama、CodeWhisperer和InstructCodeT5+。
  • 描述了从LeetCode选择的编码问题和用于评估的代码质量指标。

实验和结果

  • 分析了生成的程序代码的正确性,并使用一系列评估标准比较了正确程序代码的质量。
  • 评估了错误程序代码的可维护性,以及它们被手动更正的潜力。

结论和未来工作

  • 论文总结了不同生成性AI在程序代码生成方面的表现,并指出AI生成的程序代码即使不正确,也具有加速编程的潜力。
  • 提出了未来的研究方向,包括分析AI生成的程序代码在其他编程语言中的质量,以及探索不同聊天机器人之间的交互如何提高最终程序代码的质量。

作者贡献

  • B.I.和T.S.负责概念化、方法论、软件、验证、资源、写作和可视化。

资金

  • 这项研究没有接受外部资金支持。

数据可用性声明

  • 为了促进对程序代码生成的生成性AI的分析,作者与研究社区分享了代码和语料库。

利益冲突声明

  • 作者声明没有利益冲突。

参考文献

  • 文章列出了一系列相关的研究和资源,作为论文观点和结论的依据。

这篇文章为理解生成性AI在程序代码生成方面的现状和潜力提供了有价值的见解,并为未来的研究提供了方向。

标题

程序代码生成与生成性人工智能

摘要

本文比较了人类生成和人工智能(AI)生成程序代码的正确性、效率和可维护性。为此,我们分析了AI和人类生成程序代码的计算资源,使用诸如时间和空间复杂度以及运行时和内存使用情况等指标。此外,我们还使用代码行数、圈复杂度、Halstead复杂度和维护性指数等指标评估了可维护性。在我们的实验中,我们让生成性AI生成Java、Python和C++程序代码,以解决leetcode.com上定义的问题。我们选择了六道不同难度的LeetCode问题,每个生成性AI生成了18个程序代码。GitHub Copilot(由Codex(GPT-3.0)驱动)表现最佳,解决了18个问题中的9个(50.0%),而CodeWhisperer没有解决任何问题。BingAI Chat(GPT-4.0)为七个问题生成了正确的程序代码(38.9%),ChatGPT(GPT-3.5)和Code Llama(Llama 2)各自解决了四个问题(22.2%),StarCoder和InstructCodeT5+各自只解决了一个问题(5.6%)。令人惊讶的是,尽管ChatGPT只生成了四个正确的程序代码,但它是唯一能够为难度级别为“困难”的编码问题提供正确解决方案的生成性AI。总结来说,26个AI生成的代码(20.6%)解决了相应的问题。对于11个AI生成的错误代码(8.7%),只需要对程序代码进行最小的修改就可以解决问题,与从头开始编程相比,这可以节省8.9%至71.3%的时间。

引言

生成性AI已经成为我们日常生活的一部分,特别是在文本生成方面,它们被设计来复制类似人类的对话,并提供帮助、信息甚至情感支持。它们可以全天候提供即时响应,使它们成为客户服务、个人助理和其他许多应用的有价值工具。其中,ChatGPT(https://openai.com/chatgpt,于2024年1月29日访问)是用于文本生成最常用的工具之一。在推出后的短短五天内,就有超过一百万用户注册。AI的变革力量也渗透到了编码领域,这是一个技术已经取得显著进展的领域:AI驱动的聊天机器人不仅能进行类似人类的对话,还能生成程序代码。同时,集成开发环境(IDE)、单元测试和基准工具简化了编码,使其对资深开发人员和初学者都更加容易接近。

相关工作

本节将回顾有关自动程序代码生成和评估的现有工作。Codex(https://openai.com/blog/openai-codex,于2024年1月29日访问)是一个基于GPT-3.0的AI模型,用于程序代码生成,并在GitHub上公开可用的程序代码上进行了微调。

实验设置

本节将提供我们实验设置的全面概述。这包括介绍我们在实验中使用的最先进生成性AI、我们从LeetCode选择的编码问题以及我们用于评估的代码质量指标。

实验和结果

为确保我们实验的有效性,我们让所有生成性AI在2023年8月至9月的短时间内生成程序代码,确保对于每个生成性AI只使用相同版本。在本节中,我们将首先分析哪些生成的程序代码是正确的,即解决了编码问题。然后,我们将使用我们的评估标准代码行数、圈复杂度、时间复杂度、空间复杂度、运行时、内存使用情况和维护性指数比较正确程序代码的质量。最后,我们将评估哪些错误程序代码由于其可维护性和接近正确程序代码而有可能被手动轻松修改,然后快速且不费力地用于解决相应的问题。

结论和未来工作

快速发展的AI引发了关于其对开发人员和开发工具影响的问题,因为借助生成性AI,程序代码可以自动生成。因此,我们论文的目标是回答以下问题:程序代码在计算资源方面有多高效?程序代码对人类来说有多易于理解和维护?为了回答这些问题,我们使用时间复杂度、空间复杂度、运行时和内存使用情况等指标分析了AI和人类生成程序代码的计算资源。此外,我们还使用代码行数、圈复杂度、Halstead复杂度和维护性指数等指标评估了可维护性。在我们的实验中,我们使用了包括ChatGPT(GPT-3.5)、Bing AI Chat(GPT-4.0)、GH Copilot(GPT-3.0)、StarCoder(StarCoderBase)、Code Llama(Llama 2)、CodeWhisperer和InstructCodeT5+(CodeT5+)在内的生成性AI来生成Java、Python和C++程序代码。生成的程序代码旨在解决leetcode.com上指定的问题。我们选择了六道不同难度的LeetCode问题,结果生成了18个程序代码。GH Copilot通过解决18个编码问题中的9个(50.0%)表现最佳,而CodeWhisperer未能解决任何编码问题。BingAI Chat提供了七个编码问题的正确程序代码(38.9%),而ChatGPT和Code Llama成功解决了四个编码问题(22.2%)。StarCoder和InstructCodeT5+各自只解决了一个编码问题(5.6%)。GH Copilot在解决我们的Java和C++编码问题方面表现突出,而BingAI在解决Python编码问题方面表现更好。令人惊讶的是,尽管ChatGPT只产生了四个正确的程序代码,但它是唯一能够为难度级别为“困难”的编码问题提供正确解决方案的模型。这种意外的表现应该进一步调查,例如通过评估pass@k或进一步的难度级别为“困难”的编码问题。

由于篇幅限制,这里仅提供了文章的部分翻译。如果您需要更详细的翻译或对特定部分感兴趣,请告知我,我将提供更具体的翻译。

标签:代码生成,Code,编码,Generation,复杂度,生成,问题,AI,程序代码
From: https://blog.csdn.net/sinat_37574187/article/details/140914957

相关文章

  • [最新]VS Code自动补全ros::后面代码
    在Ubuntu20.04系统中解决VScode不能自动补全ros::后面代码的问题。安装插件1.安装C/C++插件配置c_cpp_properties.json文件2.网上很多教程都是在"includePath"下添加"/opt/ros/noetic/include/**"路径,这种方法对我来说没有解决问题,还是无法自动补全。在此基础上再新增"/......
  • Android Media Framework(十六)ACodec - Ⅳ
    上一篇文章讲了ACodec的buffer分配过程,有同学读完后提出了一些问题,所以本篇内容是对上一篇文章的补充。本篇内容将会了解GraphicOutputBufferCount的计算方式,复习useBuffer的调用,学习ACodecBufferChannel。1、configureOutputBuffersFromNativeWindow有同学提问使用N......
  • Android Media Framework(十七)ACodec - Ⅴ
    本篇文章我们一起来分析Executing状态下的数据处理流程。首先对上一篇文章做勘误:实际在调用allocateOutputBuffersFromNativeWindow分配buffer时我们会看到,一开始确实是分配了nBufferCountActual个buffer,但是后面又调用cancelBufferToNativeWindow销毁掉了备用的。可能......
  • Codeforces Round 965 (Div. 2) 题解
    个人难度顺序:A<D<B<C<E。A.FindKDistinctPointswithFixedCenter如果\(k\)是偶数,构造\((x_c+i,yc+i)\),其中\(-\frac{k}{2}\lei\le\frac{k}{2}\)。对于\(k\)是奇数,先加一个点\((xc,yc)\),然后就变成偶数的情况了。B.MinimizeEqualSumSubarr......
  • vscode step into出现Could not load source './malloc/./malloc/malloc.c': 'SourceR
    问题:使用stepinto调试c语言内建函数时就会出现解决:1.使用stepover跳过调试c语言内建函数2.将launch.json的工作目录设置为c库目录对于debian系统sudoaptinstallglibc-sourcecd/usr/src/glibc/sudotar-xvfglibc-2.36.tar.xz最后在launch.json设置"cwd":"/us......
  • Codeforces Round 965 (Div. 2) 补题记录(A,B,D,E1)
    speedforcesagain~A<E1<<B<D<<CA若\(k\equiv1(\bmod2)\),则构造\((x,y)\),\((x-1,y)\),\((x+1,y)\),\((x-2,y)\),\((x+2,y)\),\(\ldots\)。否则构造\((x-1,y)\),\((x+1,y)\),\((x-2,y)\),\((x+2,y)\),\(\ldots\)。#pra......
  • 猜数字得爱心code(小黑子版)
    接下来我们先提前学习一个代码不会的同学可以直接复制可以给自己心爱之人(因为今天是情人节我就提前出了)今天我们对代码不解释太多,只粗略的过一下。在学完循环和分支语句之后我会为大家逐个解释的#include<stdio.h>#include<stdlib.h>#include<time.h>voidlove()......
  • Github-vscode联合使用保姆及教程
    Github-VScode联合使用保姆及教程update:2024/8/10_Karenbluu文章目录Github-VScode联合使用保姆及教程1.Git和Github分别是什么2.安装2.1git安装2.2vscode安装3.使用Github3.1拉取项目3.1.1拉取方法3.1.2注意事项3.2寻找合适的项目3.3创建自己的git......
  • visual studio code安装与C/C++语言运行
    VisualStudioCode(VSCode)安装与C/C++语言运行需要几个步骤,包括安装VSCode、配置C/C++环境以及安装必要的插件。以下是一个详细的步骤指南:1.安装VSCode访问官网:首先,前往VSCode的官方网站 VisualStudioCode-CodeEditing.Redefined 进行下载。下载并安装:选择......
  • AtCoder Beginner Contest 366
    A-Election2(abc366A)题目大意\(n\)张票,目前投了\(t\)给高桥,\(a\)给青木。问剩余票随便分配,是否都是一个结局。解题思路考虑最好情况,即剩下票全部投给当前票少的,看看能不能超过对方,会则结局会变,否则不会变。神奇的代码#include<bits/stdc++.h>usingnamespaces......