【代码大模型】Is Your Code Generated by ChatGPT Really Correct?论文阅读

news/2024/11/17 3:28:08/

Is Your Code Generated by ChatGPT Really Correct? Rigorous Evaluation of Large Language Models for Code Generation

key word: evaluation framework, LLM-synthesized code, benchmark

论文:https://arxiv.org/pdf/2305.01210.pdf
代码:https://github.com/evalplus/evalplus

【why】
现存的 LLM-for-code 的基准测试集的局限性:
(1)Insufficient testing
当前的编程基准程序通常只包含平均少于10个测试的每个编码问题。
此外,这些测试相对过于简单,无法充分发掘代码或角案例的功能。
(2)Imprecise problem description
代码生成的输入除了函数签名外,还包括自然语言。现有基准程序中的这些任务描述往往过于模糊,无法充分阐明预期的程序行为。

【what】
1.EvalPlus – a code synthesis evaluation framework to rigorously benchmark the functional correctness of LLM-synthesized code
在这里插入图片描述
(1)Seed initialization via ChatGPT
ChatGPT作为一个自动生成引擎,生成少量但高质量种子
prompt 中包含的内容:
· 所要考察问题的真实解
· 一组作为示范的测试输入
· 激励ChatGPT提出输入的指令词
(2)Type-aware input mutation
inputs 的生成规则:
· 使用Chatgpt生成的种子初始化 seed pool 并引导 generation pipeline
· 每次从种子池中随机选择一个输入,将其突变为一个新的输入(即突变型)
在这里插入图片描述
· 在种子池中添加新的符合程序要求的输入,重复二三步
(3)Test-suite reduction
· code coverage
· mutant killings
· LLM sample killings
(4)Program input contracts
评估代码的最终目的是需要检查合成的代码是否符合期望的用户意图。
采用contracts编程思想,以断言的形式注释函数的前置条件。
2. Extend the test-cases of the popular HUMANEVAL benchmark by 80× to build HUMANEVAL+

【how】
评价指标:无偏版本的pass@k
在这里插入图片描述

1.结果
(1)在所有的LLMs,模型大小和k值中,使用HUMANEVAL +,几乎所有的pass @ k结果与使用基本HUMANEVAL相比一致下降。
(2)HUMANEVAL+更严格的评估可能会产生与HUMANEVAL不同或完全相反的相对结果。
(3) 在使用HUMANEVAL +前后,最佳temperature保持相当一致,说明具有稳健性。
(4) 精简后的测试集仅用47 ×的测试用例就可以达到与HUMANEVAL +几乎相同的pass @ 1⋆drop。
(5) HUMANEVAL和HUMANEVAL +之间的通过率差距表明,总体上HUMANEVAL +可以检测出HUMANEVAL错误识别的所有级别困难问题的解决方案。
2.实验细节:
(1)随机抽取200个programs,并且在 temperature{0.2, 0.4, 0.6, 0.8} 和greedy decoding with zero temperature 上重复实验

在这里插入图片描述

思考问题:

1.ChatGPT一般的输出包含很多无用词汇or符号,具有输出不稳定性,请问怎么保证每次输出稳定+正确的呢?
2. temperature 是什么呢?
3. 还是很迷惑,测试结果变差就代表本文提出的方法更好吗?


http://www.ppmy.cn/news/1547605.html

相关文章

不同规模的企业需要部署哪种组网?

针对不同规模的企业,合理的企业组网方式可以帮助优化网络性能和管理效率。以下是适合各类企业的组网建议。 一、小型企业(少于50用户) 选择经济实用的网络设备 小型企业可选择简单、成本合理的网络设备,如家庭路由器或小型商用路由…

docker 安装mongodb

docker 安装mongodb(5.0) 拉取mongodb镜像 docker pull mongo运行容器 docker run -d --name mongodb -v /mycontainers/mongodb/data:/data/db -p 27017:27017 mongo --auth^: -d : 指定后台运行 ^: --name mongodb :设置容器名 ^: -v /mycontainers/mongodb/d…

建立更及时、更有效的安全生产优化提升策略的智慧油站开源了

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。增…

效益登记册效益管理计划

效益登记册 benefit Register效益管理计划效益登记册汇集并列出项目集计划的效益,用于在项目集的整个持续时间内测量和沟通效益的交付。在效益识别阶段,效益登记册根据项目集商业论证、组织战略计划和其他相关项目集自标而编制。随后,登记册由…

Godot的开发框架应当是什么样子的?

目录 前言 全局协程还是实例协程? 存档! 全局管理类? UI框架? Godot中的异步(多线程)加载 Godot中的ScriptableObject 游戏流程思考 结语 前言 这是一篇杂谈,主要内容是对我…

场景解决之mybatis当中resultType= map时,因某个字段为null导致返回的map的key不存在怎么处理

1、场景:通过查询数据表将返回结果封装到map当中返回,因某个字段为null,导致map当中key丢失 <select id"queryMyBonus" parameterType"com.cn.entity.student" resultType "map">SELECTb.projectName as "projectName",b.money…

windows二进制安全零基础(二)

文章目录 栈&#xff08;The Stack&#xff09;调用约定&#xff08;Calling Conventions&#xff09;函数返回机制 在x86架构中&#xff0c;栈&#xff08;Stack&#xff09;是一个非常重要的内存区域&#xff0c;它用于支持线程的短期数据需求&#xff0c;如函数调用、局部变…

第8章利用CSS制作导航菜单

8.1 水平顶部导航栏 8.1.1 简单水平导航栏的设计与实现 8.1.1.1导航栏的创建 <nav>标签是 HIML5 新增的文档结构标签&#xff0c;用于标记导航栏&#xff0c;以便后续与网站的其他内整合&#xff0c;所以常用<nav>标签在页面上创建导航栏菜单区域。 例如,在<na…