大模型评估中Pass@k值是如何计算的

  在前面的博客中分别介绍了大模型评估过程不同指标的含义,以及如何通过代码,实现指标的收集。如果对如何运行代码生成结果和收集pass@k指标不清楚,可以参考这两篇博客。

如何对大模型进行评估上

如何对大模型进行评估下

Pass@k的来源

  代码的生成模型主要是通过将样本与参考方案进行匹配来衡量的,其中的匹配可以是精确的,也可以是模糊的(如BLEU分数)。匹配的代码指标存在缺陷。例如,Ren等人(2020年)发现,BLEU在捕捉代码特有的语义特征方面存在问题,并建议对该分数进行若干语义修改。更为根本的是,基于匹配的指标无法解释在功能上等同于参考解决方案的庞大而复杂的程序空间。因此,在无监督代码翻译(Lachaux等人,2020年)和伪代码到代码翻译(Kulal等人,2019年)方面的工作已经转向功能正确性,如果一个样本通过了一组单元测试,就认为它是正确的。我们认为,这种衡量标准也应适用于docstringconditional代码生成。
  评估功能正确性的最有说服力的理由是,人类开发者用它来判断代码。一个被称为"测试驱动开发"的框架规定,在任何实施开始之前,软件需求要转化为测试用例,而成功的定义是通过这些测试的程序。虽然很少有组织采用完全的测试驱动开发,但新代码的集成通常取决于创建和通过单元测试。

  Kulal等人(2019)使用pass@k指标评估功能正确性,即每个问题生成k个代码样本,如果有任何样本通过单元测试,则认为问题已解决,并报告问题解决的总比例。然而,以这种方式计算pass@k会有很高的方差性。相反,为了评估pass@k,我们为每个任务生成n≥k的样本(在本文中,我们使用n=200,k≤100),计算通过单元测试的正确样本c≤n的数量,并计算出无偏估计器。论文中提到的公式如下图所示:

  直接计算这个估计值会导致非常大的数字和数值上的不稳定。为了解决这个问题,我们包括一个数值稳定的numpy实现,它简化了表达式并逐项评估了乘积。人们可能会想用 1−(1−p^)k来估计pass@k,其中pˆ是pass@1的经验估计值。将上面的公式转换成具体的计算代码是这样。

def estimate_pass_at_k(num_samples: Union[int, List[int], np.ndarray],num_correct: Union[List[int], np.ndarray],k: int
) -> np.ndarray:"""Estimates pass@k of each problem and returns them in an array."""def estimator(n: int, c: int, k: int) -> float:"""Calculates 1 - comb(n - c, k) / comb(n, k)."""if n - c < k:return 1.0return 1.0 - np.prod(1.0 - k / np.arange(n - c + 1, n + 1))if isinstance(num_samples, int):num_samples_it = itertools.repeat(num_samples, len(num_correct))else:assert len(num_samples) == len(num_correct)num_samples_it = iter(num_samples)return np.array([estimator(int(n), int(c), k) for n, c in zip(num_samples_it, num_correct)])

  对于上面的数学运算公式,实际在论文中也没有进行透彻的解析,上面的代码是来源于openai的humanEval评估脚本。所以,在实际项目中,本质上就是以openai给出的评估代码计算公式为准。对于使用脚本的人来说,关键是弄清楚里面的几个参数含义即可,即明白什么是n,什么是k,什么是c。

从源代码来分析如何计算Pass@k值

 对于c是非常清晰的,就是通过单元测试的个数,那么k值和n值分别是什么呢?来看下面这段代码就知道了。下图是对一个问题(task_id都是test/0),产出了12个结果答案,并放到jsonl文件中。

 执行评估脚本命令

evaluate_functional_correctness /Users/taoli/human-eval/data/example_samples.jsonl --problem_file=/Users/taoli/human-eval/data/example_problem.jsonl

得到的结果如下图所示:

   通过上面的实验可以看到,n值就是对于每一个问题,生成的答案总数,结合源代码分析,k值是一个数组[1,10,100],包含三个数据,如果n<10,那么只能计算得到pass@1的值,如果100>n>10,能计算得到pass@1和pass@10的值,如果n>100,能计算得到pass@1,pass@10,pass@100的值。

  再来看一下这个数据集,对于每一个任务只有一个答案,执行这样的文件数据,最终只能得到pass@1的值。

  总结而言,因为LLM生成的答案有随机性,如果只为每一个问题生成一个答案作为评估结果,可能会低估LLM的能力,也可能会高估LLM的能力。所以,更好的方式是为每一个答案生成n个结果。n的值越大,评估的结果更接近真实,当n的值很大时,假设,要为每个问题准备200个答案,那么,这200个答案可以分为多次生成,然后组合到jsonl文件中即可。对于LLM来说,本身有窗口大小的限制,一次也无法生成200个答案。

  准备好jsonl文件后,评估脚本会根据n的值,自动生成pass@k的值。

如何解决执行脚本过程中的错误

在执行“evaluate_functional_correctness”脚本中,如果遇到下图的错误

解决办法是:pip3 install multiprocess,将脚本中使用multiprocessing的地方都修改成multiprocess。

另外,在执行脚本前,取消exec(...)的注释,默认情况下,这行代码是被注释掉的。

以上就是对于pass@k的解释,总结而言,对于数学公式,不用过度去纠结,明白两个原则即可。

原则一:pass@k值中,k的值越大,评估越贴近真实。如果只有pass@1的值,可能会低估或者高估大模型的能力。

原则二:无需动态设置k的值,pass@k的值是根据n的值决定的(n是为每个问题生成的答案数量)。

当然,官网的执行命令中,也允许传入自定义的k值,但通常用默认的[1,10,100]即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/232132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day34算法训练|贪心算法

1005.K次取反后最大化的数组和 两次贪心算法思路 1. 数组中有负数时&#xff0c;把绝对值最大的负数取反 2. 数组全为非负数时&#xff0c;一直取反最小的那个数 步骤&#xff1a; 第一步&#xff1a;将数组按照绝对值大小从大到小排序&#xff0c;注意要按照绝对值的大小…

基于YOLOv8深度学习的智能小麦害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

JavaSE 排序

目录 1 概念1.1 排序1.2 稳定性 2 常见基于比较排序算法总览3 插入排序3.1 直接插入排序3.1.1 思想3.1.2 实现3.1.3 性能分析 3.2 折半插入排序3.2.1 思想3.2.2 实现3.2.3 性能分析 3.3 希尔排序3.3.1 思想3.3.2 实现3.3.3 性能分析 4 选择排序4.1 选择排序4.1.1 思想4.1.2 实现…

神奇的数据恢复算法

今天码哥给大家带来一种数据备份与修复的技术——里德所罗门编码。 里德所罗门编码可是应用场景很多&#xff0c;例如我们耳熟能详的RAID&#xff08;磁盘阵列&#xff09;&#xff0c;又例如在UDP传输中降低丢包导致的数据缺失的情况等等。 什么是里德所罗门编码 这里&…

随时随地刷题题库小程序源码系统+完整代码包+安装部署教程

互联网的普及和在线教育的发展&#xff0c;越来越多的人开始利用碎片时间进行学习。为了满足这一需求&#xff0c;随时随地刷题题库小程序应运而生。该小程序提供了一个便捷的刷题平台&#xff0c;用户可以在任何时间、任何地点进行刷题练习&#xff0c;提高自己的学习效率。 …

C盘满了?这里有释放空间有效方案!

一、需要释放小空间 方法一&#xff0c;下载火绒安全软件&#xff0c;点击垃圾清理 方法二&#xff0c;手动清理&#xff1a; 1.左下角搜索"添加或删除" 2.左下角搜索"存储设置" 3.【我的电脑】-【C盘】-右键【属性】-【磁盘清理】 4.以下位置的不需要…

局域网其他pc如何访问宿主机虚拟机IP?

文章目录 背景贝瑞蒲公英设置虚拟机网络连接测试 背景 使用贝瑞蒲公英异地组网&#xff0c;将家里的pc作为pgsql服务器在公司使用&#xff0c;但是虚拟机的ip和端口访问不了 贝瑞蒲公英 设置虚拟机网络 就是添加端口转发规则 连接测试 公网内其他pc连接测试 可以看到已经连接成…

学习Java第74天,Ajax简介

什么是ajax AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 不是新的编程语言&#xff0c;而是一种使用现有标准的新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下&#xff0c;可以与服务器交换数据并更新部分网页…

ERP真的“烂”吗?为什么有些公司上了ERP效率反而更低?

ERP是由美国Gartner Group咨询公司首先提出的国际上最先进的企业管理模式之一&#xff0c;也是企业信息化集成的最佳解决方案。 ERP到底是什么&#xff1f; ERP的概念 先打个比方。 把ERP理解成手机。 使用通讯类APP和同事、朋友、亲人交流。 使用购物类APP购买生活工作中需…

一文详细介绍Ehcache

title: Ehcache 快速入门 categories: 编程 Java 中间件 缓存 tags: Java 中间件 缓存 Ehcache abbrlink: 2720adf1 date: 2022-02-17 22:34:30 permalink: /pages/c4647d/ Ehcache 快速入门 EhCache 是一个纯 Java 的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff…

中国九大农业区划

数据名称&#xff1a;中国九大农业区划 数据时间&#xff1a;2012年 数据空间位置:全国 数据空间分辨率&#xff1a;1:100万 数据格式&#xff1a;shp 数据坐标系&#xff1a;WGS1984 数据简介&#xff1a;农业区划是管理和指导农业生产的重要手段。我国农业区划种类较多…

如何在公网环境使用固定域名远程访问内网BUG管理系统协同办公

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

评分卡在数字化时代的应用与比较,谁是最强规则引擎?

在数字化时代&#xff0c;规则引擎在各种业务场景中发挥着越来越重要的作用。评分卡作为规则引擎的一个重要应用&#xff0c;被广泛应用于员工KPI考核、业务评估、授信额度计算等等场景。本文引用了奔跑的小武哥的内容&#xff0c;对市面上的几个规则引擎进行对比展示&#xff…

Leetcode的AC指南 —— 链表:142.环形链表II

摘要&#xff1a; Leetcode的AC指南 —— 链表&#xff1a;142.环形链表II。题目介绍&#xff1a;给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 文章目录 一、题目二、解析1、快慢指针法2、一个破坏链表的解…

原生html + vue3 获取引用元素refs - elementUI如何在setup中进行表单校验设置

背景&#xff1a; 原生Html 引入elementPlust vue3 &#xff0c;需要在vue3 setup里做表单校验&#xff0c;通过el-form refform 的refs元素执行校验。 解决方案1&#xff1a; 保存vue挂载之后实例vm为一个常量&#xff0c;由实例来获取&#xff1a;vm.$refs.form.validate(…

GBASE南大通用ADO.NET 结构

GBASE南大通用ADO.NET&#xff08;全称是 .NET Framework Data Provider For GBase&#xff09;提 供给.NET 应用程序访问 GBase 数据库、获取数据、管理数据的一套完整的解决 方案。 GBASE南大通用 ADO.NET 的四个核心类及若干功能类具有以下功能&#xff1a;  建立和管…

低代码软件开发的革命

一、前言 如果一个概念能在科技圈火起来&#xff0c;它往往兼具字面简明和内涵丰富的特征&#xff0c;并具有某种重塑产业格局的潜力。低代码&#xff08;Low Code&#xff09;就是这样一个典型。顾名思义&#xff0c;低代码是指少用代码&#xff0c;甚至不用代码&#xff0c;仅…

【LeetCode:1901. 寻找峰值 II | 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

中华儿慈会回家的希望宝贝守护计划儿童安全反拐宣传活动

为帮助低龄段儿童树立防拐反拐意识&#xff0c;提高儿童自护自救能力&#xff0c;近日&#xff0c;遂宁艺宁妇女儿童社会工作服务中心在汤普森幼儿园等学校开展了中华儿慈会回家的希望宝贝守护计划活动。 讲师志愿者通过设定动画人物形象讲述防拐故事&#xff0c;教授儿童遇到陌…

EasyExcel导入excel文件解析日期格式数据出现偏差

Excel日期字段值&#xff1a; 7:00:00 解决方案&#xff1a; 增加 DateTimeFormat("HH:mm")