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

embedded/2024/11/17 19:36:18/

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/embedded/138077.html

相关文章

灵神DAY3 KMP算法

具体解释: 1. 真前缀和真后缀的定义 前缀:字符串的起始部分。例如,字符串 s "aabcaa" 的前缀是 ""、"a"、"aa"、"aab"、"aabc"、"aabca"、"aabcaa"。 …

「Qt Widget中文示例指南」如何创建一个窗口标志?(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 窗口标志要么是类型…

监控JVM的内存使用情况分析

监控JVM的内存使用情况对于确保应用性能和稳定性至关重要。以下是一些常用的方法和工具来监控JVM的内存使用情况: 1. JVM内置工具 jcmd jcmd是一个多功能的诊断命令行工具,可以用来监控和管理系统进程和核心Java虚拟机。使用jcmd可以获取堆内存和非堆…

封装map、set

红黑树中&#xff0c;封装map还是set是根据第二个节点参数决定的。 也就是说&#xff1a;树第一个参数是key&#xff0c;而第二个参数如果是set 就是 key&#xff0c;如果是map&#xff0c;则是pair。 RBTree.h#pragma once#include <iostream> using namespace std; #…

C#入门 020 事件(类型成员)

初步了解事件 定义:单词Event&#xff0c;译为“事件” 《牛津词典》中的解释是“a thing that happens, especially something important通顺的解释就是“能够发生的什么事情” 角色:使对象或类具备通知能力的成员 事件(event)是一种使对象或类能够提供通知的成员对象O拥有…

(蓝桥杯C/C++)——动态规划(DP)

目录 一、线性DP 1.DP(动态规划)简介 2.动态规划的分析步骤 3.例题讲解 二、二维DP 1.二维DP简介 2.选数异或 三、最长上升子序列LIS 1.LIS简介 2.例题讲解 四、最长公共子序列LCS 1.最长公共子序列 2.最长公共子序列 2.求出具体子序列 一、线性DP 1.DP(动态规划)…

动态规划-背包问题——1049.最后一块石头的重量II

1.题目解析 题目来源 1049.最后一块石头的重量II——力扣 测试用例 2.算法原理 首先需要将该问题转化为0-1背包问题后再做分析 1.状态表示 根据数学中的知识我们知道将一个数字分为两个子数后求这两个子数的最小差值&#xff0c;那么就要求这两个子数尽可能接近于原数字的一…

【RabbitMQ】09-取消超时订单

生产者完成创建订单和扣减库存之后&#xff0c;发送消息到延迟队列。 // 3.清理购物车商品cartClient.deleteCartItemByIds(itemIds);// cartService.removeByItemIds(itemIds);// 4.扣减库存try {itemClient.deductStock(detailDTOS);//itemService.deductStock(detailDTOS);…