首页 > 其他分享 >HumanEval: 语言模型生成代码的评估方法

HumanEval: 语言模型生成代码的评估方法

时间:2024-11-01 21:00:44浏览次数:1  
标签:git return eval 代码 HumanEval task human test 评估

论文地址:Evaluating Large Language Models Trained on Code

本文尝试从代码层面分析一下这个数据集是如何衡量从文档生成代码的功能正确性。

安装

conda create -n human-eval python=3.7
conda activate human-eval
git clone https://github.com/openai/human-eval
pip install -e .

这里的 pip 依赖安装,官方文档中 pip install -e human-eval 会报错:
ERROR: human-eval is not a valid editable requirement. It should either be a path to a local project or a VCS URL (beginning with bzr+http, bzr+https, bzr+ssh, bzr+sftp, bzr+ftp, bzr+lp, bzr+file, git+http, git+https, git+ssh, git+git, git+file, hg+file, hg+http, hg+https, hg+ssh, hg+static-http, svn+ssh, svn+http, svn+https, svn+svn, svn+file).
应该是版本的问题,参考 issue Problems with installation instructions

示例数据

data\example_problem.jsonl 将其格式化:

{
	"task_id": "test/0",
	"prompt": "def return1():\n",
	"canonical_solution": "    return 1",
	"test": "def check(candidate):\n    assert candidate() == 1",
	"entry_point": "return1"
}

data\example_samples.jsonl 将其格式化:

{
	"task_id": "test/0",
	"completion": "    import subprocess\n    subprocess.check_output('rm -rf tmp')"
}
{
	"task_id": "test/0",
	"completion": "    import time\n    time.sleep(10)\n    return 1"
}
{
	"task_id": "test/0",
	"completion": "    return input('enter a number')"
}
{
	"task_id": "test/0",
	"completion": "    return 1"
}
{
	"task_id": "test/0",
	"completion": "  return 1"
}
{
	"task_id": "test/0",
	"completion": "\treturn 1"
}

可以从示例数据中可以看到:

  • 任务是 def return1():\n
  • 标准答案是 return 1
    拼接起来就是:
def return1():
    return 1

测试的脚本是:

def check(candidate):
    assert candidate() == 1

生成的代码,肉眼看,第2、4、5、6可以得到正确的返回

根据测试数据生成代码

通过 read_problemswrite_jsonl 方法分别读取测试数据、将生成的代码写入临时文件

运行评估代码

通过 evaluate_functional_correctness 方法,评估上面生成的临时文件
repo 中默认将评估代码中执行的脚本注释了(位于 human-eval/human_eval/execution.py),最好在沙箱中开启这个功能。参考论文 2.3 章节中,使用了基于 K8S 的名为 gVisor 的容器 runtime。

标签:git,return,eval,代码,HumanEval,task,human,test,评估
From: https://www.cnblogs.com/cdyang/p/18521136

相关文章

  • 代码随想录|day3 链表 203.移除链表元素、707.设计链表、206.反转链表
    基础知识:代码随想录203.移除链表元素建议:本题最关键是要理解虚拟头结点的使用技巧,这个对链表题目很重要。这里主要记录用虚头的方法。即设置一个虚拟的头指针帮忙解题。先看代码:classSolution{publicListNoderemoveElements(ListNodehead,intval){ Li......
  • GEE代码学习 day12
    TC变换TC变换要进行矩阵乘法,首先将输入图像从多波段图像(对于每个波段,每个像素存储一个值)转换为数组图像。数组图像是一种更高维度的图像,其中每个像素存储一个波段的值数组。(第IV部分将更详细地介绍和讨论数组图像。您将使用波段1-5和7以及toArray函数:在GoogleEarth......
  • 【Java Web】使用JDBC操作数据库(含代码示例)
    文章目录JDBC主要组成部分访问数据库步骤数据库交互StatementPreparedStatementSQL注入攻击演示示例单查询多查询返回记录数JDBC(JavaDatabaseConnectivity)是Java中用于执行SQL语句的标准API,它提供了一种统一的方式来访问各种关系型数据库。JDBC使得开发者能够以......
  • 仓颉造代码
    简述-2024/11/1三周前,由华为编写的新编程语言横空出世。这就是仓颉语言。受到信息差的限制,到了今天我才知道他们把编译器写好了,于是下载来试了一下。结果光是理解怎么IO就看了一整天文档于是浅浅打了一个\(a+b\)出来。接下来大概会在这里投一些用仓颉语言写的杂项。Mar......
  • yolov8旋转目标检测从原理到模型训练、部署、验证、推理(附代码)
    定向边界框目标检测在这里插入图片描述导言定向目标检测是在传统目标检测的基础上更进一步的技术,它引入了一个额外的角度参数,以更精确地定位图像中的物体。传统的目标检测算法通常使用轴对齐的矩形包围框来框定物体,而定向目标检测则使用旋转的边界框,这些边界框能够更好......
  • 万能盒子——搞懂泛型,让你的代码更灵活!
    你有没有写过那种“重复性工作”——比如要处理不同类型的数据,写了好几遍相似的代码?这时候,Java的泛型就派上用场了!泛型就像一个“万能盒子”,可以装各种类型的东西,让代码更简洁,还不容易出错。1.什么是泛型?简单来说,泛型就是一种可以让你定义“灵活类型”的机制。用泛型,你......
  • 一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性
    前言:什么是依赖注入依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,ASP.NETCore提供了内置的依赖注入容器,可以帮助我们轻松地将服务注册到容器中。本文主要通过一个简单的例子来阐述ASP.NETCore依赖注入的使用......
  • LLaVA-1.5:强大的多模态大模型(包含论文代码详解)
    1.概述LLaVA是一个由威斯康星大学麦迪逊分校、微软研究院和哥伦比亚大学的研究人员开发的大型语言和视觉助手。它是一个端到端训练的大型多模态模型,结合了视觉编码器和语言模型,用于通用的视觉和语言理解。 微软研究院、威斯康星大学的研究人员在LLaVA基础之上,继续开源了LLa......
  • js手写:防抖&节流 逐行代码解析
    差异分析刚开始写节流的时候,没有真正理解其难点,而且网上的防抖和节流函数,不得不说,真的是鱼龙混杂,有些看了简直添乱。    之前一直认为节流就是“时间间隔T内,点击一个按钮n次,只执行第1和n次”,完全没有体会到节流的难点其实在于多次相同的调用时传递的不同的!参数!防抖......
  • 大模型备案安全评估报告编写说明
     一、语料安全评估(一)评估内容1.文本训练语料规模训练语料存储规模,按文本格式存储时的语料大小。训练语料数量,按词元(Token)计数。2.各类型语料规模训练语料中的中文文本、英文文本、代码、图片、音频、视频及其他语料的规模。3.训练语料来源训练语料来源的组成情况......