随着人工智能技术的不断发展,大模型在各个领域都有了广泛的应用。在软件工程领域,大模型也被用于辅助代码生成。大模型代码生成工具可以从自然语言提示或部分代码输入中生成代码,极大地提高了软件开发的效率和质量。
目前,已经有许多研究人员和机构开展了大模型代码生成能力的评估研究。这些评估研究为了解大模型代码生成工具的现状和发展趋势提供了重要参考。
本文中,将介绍大模型代码生成最新排行,以及能力评估的常用评估指标和数据集。
"Papers with Code" 是一个知名的研究论文和代码共享平台,为学者们提供了一个展示和对比研究成果的平台。其中,HumanEval Benchmark (Code Generation) 部分列出了代码生成领域的最新模型排名。为了深入理解这些排名,我们需要了解其背后的评估指标。
数据集介绍
HumanEval是由AI target=_blank class=infotextkey>OpenAI开发的广泛使用的代码生成基准测试。它涵盖了从简单的字符串操作到复杂的算法设计的多种编程任务。
如上图所示,每个任务都包括一个函数签名、注释、主体和几个单元测试。为了确保评估的公正性,这些任务都是手工编写的。在模型训练过程中,模型没有接触过这些具体任务。模型接收的提示以白色背景显示,而模型成功生成的代码部分以黄色背景显示。这样的设计旨在为评估提供一个公正的基准,确保模型在实际应用中的性能与在数据集上的表现是一致的。
数据集特点
1.多样性:HumanEval涵盖了从基础到高级的各种编程任务,确保了模型在各种情境下都能得到充分的评估。
2.实际应用导向:该基准测试的设计考虑了实际的编程需求,从而确保了模型的实用性和实际应用价值。
3.动态更新:随着编程领域的不断进步,HumanEval也会定期更新,加入新的编程任务和挑战,确保其始终保持与时俱进。
评估方法
1.直接生成:评估模型在没有任何先验知识或提示的情况下,直接生成代码的能力。
2.多次尝试:评估模型在多次尝试和修正后的代码生成性能。
3.代码质量:除了代码的正确性,还会评估生成代码的效率、可读性和维护性。
4.算法设计:评估模型在设计和实现复杂算法时的性能。
5.数据结构操作:测试模型在操作如数组、链表、树等常见数据结构时的能力。
6.实际编程场景模拟:模拟真实的编程任务,如数据库操作、网络编程等,来评估模型的实际应用能力。
评估指标
其中,Pass@k是一个核心指标。它衡量的是模型在生成k个样本后至少有一个样本是正确的概率。例如,Pass@1表示模型第一次尝试生成代码时的正确率;Pass@10表示模型在前10次尝试中至少有一次生成了正确的代码;而Pass@100则表示在前100次尝试中,模型至少有一次生成了正确的代码。
大模型代码生成能力的最新排行
基于上述数据集,指标与实验方法,下方列出了代码生成任务的最新模型排名:
第一名介绍:
图中根据Pass@1分数从高到低排序,GPT系列位居前列:
Reflexion (GPT-4): 目前在HumanEval上的最佳模型,其Pass@1得分为91.0。其背后的研究成果为"Reflexion: Language Agents with Verbal Reinforcement Learning"。这篇于2023年发布的论文探讨了如何通过语言反馈来强化语言代理,而不是通过更新权重。具体来说,Reflexion代理的工作方式是,当完成一个任务并接收到反馈后,它会生成一段关于该反馈的描述或分析。这段反思文本随后被存储在一个特定的“情景记忆缓冲区”中。当代理在后续的任务中遇到类似的情境时,它会回顾这个缓冲区中的反思文本,从而帮助其做出更好的决策。这种独特的方法使Reflexion在多种任务上获得了显著的改进,例如,在HumanEval编码基准测试上达到了91%的pass@1准确率,超过了之前的最新技术GPT-4的80%。
第二名介绍:
GPT-4: 排名第二,其Pass@1得分为86.6。相关论文为"OctoPack: Instruction Tuning Code Large Language Models",发布于2023年,文中探讨了如何通过指令调优来提高大型语言模型(LLMs)在自然语言任务上的性能。研究者采用了一种独特的方法,利用Git提交(commits)的自然结构,将代码更改与人类指令配对,进行指令调优。
为此,他们编译了名为"CommitPack"的数据集,包含了4TB的Git提交数据,涵盖了350种编程语言。他们将CommitPack与其他自然和合成的代码指令(如xP3x、Self-Instruct、OASST)进行了基准测试,并在16B参数的StarCoder模型上取得了卓越的性能。在HumanEval Python/ target=_blank class=infotextkey>Python基准测试上,该模型达到了46.2%的pass@1准确率。
此外,研究者还引入了"HumanEvalPack",将HumanEval基准测试扩展到了3种编码任务(代码修复、代码解释、代码合成)和6种语言(Python、JAVAScript、Java、Go、C++、Rust)。他们的模型,OctoCoder和OctoGeeX,在HumanEvalPack中的所有模型中表现最佳,证明了CommitPack在泛化到更广泛的语言集和自然编码任务上的优势。
第三名介绍:
Parsel (GPT-4 + CodeT): 排名第三,其Pass@1得分为85.1,发布于2022年。相关论文为:"Parsel: Algorithmic Reasoning with Language Models by Composing Decompositions"
文中详细探讨了"Parsel",一个专为增强大型语言模型(LLMs)在代码生成和层次化多步推理任务中的能力而设计的框架。为了更好地生成复杂的程序代码,Parsel采用了一种独特的方法:它首先自动将算法任务分解为层次化的自然语言函数描述,然后利用测试来寻找可能的函数实现方式。这种方法不仅适用于代码生成,还可以广泛应用于其他需要层次化推理的领域,如机器人规划。实验结果证明,Parsel在代码生成任务上,特别是在解决高难度的竞赛级问题时,相较于传统的直接生成方法,展现出了更为出色的性能。
第八名介绍
值得关注的是,中国的模型在这个排行榜上也有显著的表现。
例如,PanGu-Coder2 15B,其Pass@1得分为61.64,而Pass@100得分高达91.76分。排名第八,紧随GPT系列,相关论文为” PanGu-Coder2: Boosting Large Language Models for Code with Ranking Feedback”:
文中探讨了关于OpenAI发布了Codex之后,许多其他的代码生成模型如AlphaCode、PaLM-Coder和PanGu-Coder相继发布。但是,大多数代码LLM在性能上仍然落后于最新的商业模型,如OpenAI的GPT-3.5和GPT-4。
提出了RRTF框架:为了解决现有基于强化学习的方法的问题,并进一步挖掘Code LLM的潜力,作者提出了RRTF框架。与之前的工作如CodeRL和RLTF不同,RRTF采用了与InstructGPT/ChatGPT相似的RLHF(Reinforcement Learning from Human Feedback)的思想,但采用了一种更简单且高效的训练方法,使用排名响应作为反馈而不是奖励模型的绝对值。
通过广泛的评估,PanGu-Coder2在多个基准测试上都取得了最佳性能,尽管与如GPT系列的通用模型仍有一定差距,但是超越了之前所有发布的Code LLMs。
第29名介绍
清华大学开源的CodeGeeX-13B ,其Pass@1得分为22.9分,排名29
相关论文为:”CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X”,介绍了CodeGeeX,用于代码生成的多语言模型,拥有130亿参数。CodeGeeX在2022年6月之前的23种编程语言上预训练了8500亿个TOKENS。广泛的实验表明,CodeGeeX在HumanEval-X上的代码生成和翻译任务上均超越了类似规模的多语言代码模型。此外,清华团队还在Visual Studio Code、JetBrains和Cloud Studio上构建了基于CodeGeeX的扩展,每周为数万活跃用户生成47亿TOKENS。用户研究显示,83.4%的用户认为CodeGeeX可以帮助提高编码效率。并且开源了其代码、模型权重、API、扩展和HumanEval-X。
而后面紧跟的CodeGeeX2-6B,Pass@1得分为35.9分,能力大幅加强,提升了12名
按照Pass@1分数(35.9)排序,位列17名左右,在开源CODE LLM中有相当的竞争力。
总的来说,大型语言模型在代码生成领域的进展是显而易见的,各大研究团队都在不断推动技术的边界,努力提高模型的性能和实用性。特别是中国的模型,如PanGu-Coder2和CodeGeeX,不仅在排行榜上取得了骄人的成绩,更展现了中国在人工智能研究领域的实力和潜力。随着技术的不断进步,我们有理由相信,未来的语言模型将为编程和软件开发带来更多的便利和创新。
参照文献:
Large Language Model Evaluation in 2023: 5 Methods (aimultiple.com)
https://arxiv.org/pdf/2304.10778.pdf
HumanEval Benchmark (Code Generation) | Papers With Code
https://arxiv.org/pdf/2107.03374.pdf
THUDM/CodeGeeX2: CodeGeeX2: A More Powerful Multilingual Code Generation Model (Github.com)