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

ops/2024/11/20 6:32:43/

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/ops/135169.html

相关文章

MongoDB聚合操作

管道的聚合 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。 MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。 表达式:处理输入文档并输出。表达式是无状态的,只能用…

蓝桥杯——数组

1、移动数组元素 package day3;import java.util.Arrays;public class Demo1 {public static void main(String[] args) {int[] arr {1,2,3,4,5,6};int k 2;int[] arr_new f(arr,k);for (int i : arr_new) {System.out.print(i",");}//或System.out.println();St…

Android Studio | 修改镜像地址为阿里云镜像地址,启动App

在项目文件的目录下的 settings.gradle.kts 中修改配置,配置中包含插件和依赖项 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urlu…

2017年下半年试题一:论软件系统建模方法及其应用

论文库链接:系统架构设计师论文 论文题目 软件系统建模(Software System Modeling)是软件开发中的重要环节,通过构件软件系统模型可以帮助系统开发人员理解系统、抽取业务过程和管理系统的复杂性,也可以方便各类人员之…

NAT网络地址转换——Easy IP

NAT网络地址转换 Tip&#xff1a;Easy IP允许将多个内网地址映射到网关出口地址上的不同端口。 本次实验模拟nat协议配置 AR1配置如下&#xff1a; <Huawei>sy [Huawei]sys AR1 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 192.168.1.1 24 //配置端口IP地址&…

STM32 极速入门第一天基础拓展 驱动i2c屏幕 ( 使用PlatformIO开发STM32单片机 )

输入输出模式解析 输出模式 在输出模式下&#xff0c;通常不需要设置上下拉电阻. 输出电平由 LL_GPIO_SetOutputPin 和 LL_GPIO_ResetOutputPin 函数直 接控制。 输入模式 在输入模式下&#xff0c;设置上下拉电阻是非常重要的. 输入引脚悬空时可能会导致不确定的电平&#xf…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04目录1. Alopex: A Computational Framework for Enabling On-Device Function Calls with LLMs摘要&#xff1a;研究背景&…

实现了两种不同的图像处理和物体检测方法

这段代码实现了两种不同的图像处理和物体检测方法&#xff1a;一种是基于Canny边缘检测与轮廓分析的方法&#xff0c;另一种是使用TensorFlow加载预训练SSD&#xff08;Single Shot Multibox Detector&#xff09;模型进行物体检测。 1. Canny边缘检测与轮廓分析&#xff1a; …