代码生成准确率翻倍:流量工程令成功率从19%提升至44%
来源:51CTO.COM
时间:2024-02-10 10:09:02 392浏览 收藏
今天golang学习网给大家带来了《代码生成准确率翻倍:流量工程令成功率从19%提升至44%》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~
一篇新论文的作者提出了一种“强化”代码生成的方法。
代码生成是人工智能中一项日益重要的能力。它通过训练机器学习模型,根据自然语言描述自动生成计算机代码。这一技术具有广泛的应用前景,可以将软件规格转化为可用的代码,自动化后端开发,并协助人类程序员提高工作效率。
然而,生成高质量代码对AI系统仍然具有挑战性,与翻译或总结等语言任务相比。代码必须准确地符合目标编程语言的语法,能够优雅地处理各种极端情况和意外输入,并精确地处理问题描述中的许多小细节。即使是其他领域看似无害的小错误也可能完全破坏程序的功能,导致编译或运行失败。
最近,CodiumAI的研究人员提出了AlphaCodium,这是一种新方法,可以显著提升GPT-4等大型语言模型的代码生成能力。他们的观点是,仅仅微调提示的措辞在解决复杂编码问题上具有固有的限制。相反,他们设计了一个多阶段流程,专注于通过迭代生成、运行和调试代码来对照测试用例,从而使模型能够从实践中学习。
提示工程的局限性
在自然语言任务中,提示工程是指对提示的措辞和结构进行仔细调整,以引导模型生成所需的输出。例如,在输入文本前加上“写简明的摘要:”这个短语,可以使模型生成更加准确的摘要。
提示工程已被证明在做文本生成引导大语言模型行为方面非常有效。然而针对编码问题,研究人员发现,即使进行广泛的及时调整,也只能获得微小的效益。这一发现令人深思。因此,生成高质量的代码仍然需要其他解决方案:
- 精确匹配目标编程语言的语法
- 优雅地处理极端情况和意外输入
- 解决问题陈述中描述的所有小细节和需求
- 为所有的有效输入确保代码正确编译和运行
这些结构性需求超出了文本生成的范围,无法硬编码到提示中。提示本身缺乏模型学习所需的编码技巧和具体反馈。
AlphaCodium迭代流程
为了应对这些挑战,研究人员开发了一种迭代流程,专门针对代码生成问题的结构。其中的关键创新在于利用所生成代码的执行结果作为学习信号,以提供直接的反馈。
AlphaCodium的流程有两个主要阶段:
预处理
- 模型将问题描述释义为项目符号,以提取关键细节。
- 解释每个示例输入/输出背后的预期逻辑。
- 提供两三个自然语言解决方案。
- 为代码覆盖生成额外的不同测试用例。
代码迭代
- 模型生成初始代码解决方案。
- 针对公共测试用例重复运行该代码,修复出现的错误。
- 对模型生成的测试用例执行同样的事情。
- 额外的测试用例被添加到不断增大的“测试锚”(test anchor)套件中,以防止回归。
通过增量推理问题、开发解决方案假设、扩展测试覆盖,以及反复生成和调试代码,模型通过经验来学习——这正是高质量代码生成所需的技能。
图1. 具有结构化输出的提示示例(生成可能的解决方案阶段)
研究人员发现,与端到端模型相比,将流程设计为具有清晰接口和目标的模块可以获得更好的结果。每个阶段首先专注于更简单的子任务,以积累知识,并发掘为下游阶段提供依据的洞察力。像测试生成这样的上游阶段不需要完整的解决方案,只需要基本的推理。
实验结果
研究人员依据CodeContests衡量基准对AlphaCodium进行了评估,该衡量基准包含来自竞争性编程比赛的数百个编码问题。
图2. 问题描述和反思——一个典型的CodeContests问题的例子,基于人工智能对问题进行自我反思。虽然最初的描述冗长而复杂,但适当的自我反思可以使问题更清晰、更连贯,从而改进代码解决方案
针对GPT-4模型,与经过大量优化的单个提示相比,AlphaCodium将验证集上的代码生成准确率从19%提高到了44%。面对不同的模型大小和测试集,这个好处依然适用,与单独的提示工程相比收效显著。
AlphaCodium的性能也显著优于之前发布的方法,比如AlphaCode和CodeChain,同时使用更少的计算资源。比如说,它通过避免不必要的蛮力生成,其准确性可以媲美AlphaCode,而模型查询少10000倍。
这些结果证明了围绕任务结构整体设计AI系统的价值,而不是将其视为通用文本生成器。通过合并迭代代码运行和调试,AlphaCodium更好地将训练过程与生成健壮实用代码的最终目标结合起来。
更广泛的影响
虽然针对竞争性编程问题进行了演示,但AlphaCodium中使用的概念为AI推进代码生成提供了更广泛的适用经验:
- 单单提示工程对于处理复杂的代码任务具有局限性。具体解决问题的经验至关重要。
- 基于测试的开发规范可以为模型训练提供依据。测试提供了明确的适应度函数。
- 迭代代码调试将模型改进的重点放在实际发生的错误上。
- 测试覆盖扩展突出了提示中不可见的泛化性差距。
- 具有双重验证的软决策减少了脆弱性和偏差。
AlphaCodium为基于软件工程最佳实践的代码生成提供了一种大有前途的新范式。关于泛化性和计算开销仍然存在有待商榷的研究问题。但这里展示的原则(从经验中学习、测试驱动开发、模块化推理和迭代式调试)似乎为提高AI的编码能力提供了坚实的基础。
论文链接:https://arxiv.org/pdf/2401.08500.pdf。
代码库:https://github.com/Codium-ai/AlphaCodium。
原文标题:"Flow engineering" doubles code generation accuracy (19% vs 44%),作者:Mike Young
链接:https://notes.aimodels.fyi/flow-engineering-intensifies-for-code-generation/。
终于介绍完啦!小伙伴们,这篇关于《代码生成准确率翻倍:流量工程令成功率从19%提升至44%》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布科技周边相关知识,快来关注吧!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
453 收藏
-
222 收藏
-
159 收藏
-
154 收藏
-
247 收藏
-
312 收藏
-
132 收藏
-
304 收藏
-
328 收藏
-
345 收藏
-
480 收藏
-
448 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习