论文笔记--Evaluating Large Language Models Trained on Code

news2024/11/24 0:21:27

论文笔记--Evaluating Large Language Models Trained on Code

  • 1. 文章简介
  • 2. 文章概括
  • 3 文章重点技术
    • 3.1 评估
    • 3.2 模型训练--Codex
    • 3.3 微调模型--Codex-S
    • 3.4 微调模型--Codex-D
  • 4. 文章亮点
  • 5. 原文传送门
  • 6. References

1. 文章简介

  • 标题:Evaluating Large Language Models Trained on Code
  • 作者:Chen, Mark, et al.
  • 日期:2021
  • 期刊:arxiv preprint

2. 文章概括

  现存的GPT系列语言模型在自然语言中取得了不俗的表现,但实验表明其在代码方面的生成能力十分有限。本文提出了Codex,Codex-S和Codex-D三个大语言模型,在多个代码生成任务上表现远超GPT-3[1]。

3 文章重点技术

3.1 评估

  评估代码性能的方法大致分为两种:基于匹配的方法和函数正确率方法。比如BLEU就是一种基于匹配的方法,但文章数值实验证明,BLEU不能总是捕捉到函数的功能正确:分数很高的代码可能不正确。为此文章选择用函数正确率方法
  一种常用的评估函数正确率的指标叫pass@k指标,即模型随机生成k个回答(代码块),通过unit test(单元测试)的回答个数。但这样计算的指标方差很高,故文章每次生成 n ≥ k n\ge k nk个回答,其中通过测试的回答个数为 c c c,我们计算 p a s s @ k = E p r o b l e m [ 1 − ( n − c k ) ( n k ) ] pass@k = \mathbb{E}_{problem} \left[1 - \frac {\binom {n-c}k}{\binom nk}\right] pass@k=Eproblem[1(kn)(knc)]
  为了自动评估代码性能,文章手动构建了164个手写的编程问题,称为HumanEval数据集。每个问题都包含一个签名(返回)、说明、主题和几个单元测试。文章选择手动构建的原因是不希望训练语料库中包含HumanEval中的问题。
  下面给出了HumanEval中的三个问题示例,全部数据可在网址https://www.github.com/openai/human-eval 查看使用。
HumanEval
  评估时,只需要将上述问题转化成一个包含header、signature、docstring的prompt即可。

3.2 模型训练–Codex

  文章选择从GPT-3上微调得到代码模型,这样做虽然没有显著提升模型表现,但是加快了模型的收敛。文章从Github中收集了54million的公共库,包含1MB以下的Python文件共计179GB。为了保证训练集的质量,文章过滤了自动生成的文件、平均行数大于100的文件或仅包含一小部分字符数字的文件,过滤后的文件总计159GB。微调后的模型记作Codex模型(其中最大的模型为Codex-12B)。
  自动评估阶段,我们每次生成k个样例,然后评估其中通过单元测试的样例个数,得到pass@k;实际应用时,我们每次生成k个样例,选择其中mean token log-proba最大的输出即可。
  实验表明,Codex系列模型效果远超GPT-3。300M以上的Codex模型效果已经优于GPT-J 6B:
exp-Codex

3.3 微调模型–Codex-S

  文章发现Github上很多代码包含很多类、说明等,会造成数据集不纯粹。为此,我们构建了一个训练数据集并使用它对Codex模型进行微调。
  训练数据集来自编程竞赛、面试准备网站和PyPI中的持续集成问题。为了过滤其中模糊的、太复杂的问题,我们首先用Codex-12B对上述问题进行回答,每个问题生成100个答案,如果没有一个答案通过单元测试,则认为该问题太难或太模糊,将其从微调数据集中移除。
  最后我们在上述数据集上微调Codex模型:将上述问题转化成标准代码格式,将prompt中的token掩码,最小化参考答案的负对数似然。
  评估结果显示Codex-S的性能超过Codex,且Codex-S的pass@1,即通过最大似然筛选出来的单个样例准确率高于Codex的pass@100。
exp-Codex-S

3.4 微调模型–Codex-D

  另一方面,文章探索了从代码生成文本说明的反向过程。类似上一节中的微调方法,我们修改训练目标为“掩码代码(包括signature、header、body)部分,最小化说明(docstring)的负对数似然。得到的模型称为Codex-D。

4. 文章亮点

  文章给出了代码大语言模型Codex,Codex-S和Codex-D,可帮助开发者,尤其是初学者自动生成代码。但文章论证了Codex系列模型的局限性,现有模型还存在一些不正确的结论和misalianment(即模型有这个能力但是没回答)现象,同时模型可能存在一些敏感话题风险,后续可通过指令微调进行控制。

5. 原文传送门

Evaluating Large Language Models Trained on Code
HumanEval数据集

6. References

[1] 论文笔记–Language Models are Few-Shot Learners

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

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

相关文章

chatgpt赋能python:Python构造函数详解

Python构造函数详解 在Python中,构造函数是一种特殊的函数,用于创建类的实例并初始化其属性。Python构造函数的名称为__init__,它在创建类的实例时自动调用。本篇文章将全面介绍Python构造函数的重要性及其使用方法。 为什么需要构造函数&a…

Python之并发编程协程

一、介绍 基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换保存状态 CPU正在运行一个任务,会在两种情况下切走去执行其他的任务&a…

从零手写操作系统之RVOS抢占式多任务实现-06

从零手写操作系统之RVOS抢占式多任务实现-06 多任务系统的分类抢占式多任务的设计代码任务切换流程分析系统启动任务mepc初始化首个被调度执行的任务任务切换 兼容协作式多任务软件中断编码实现 测试 注意点 本系列参考: 学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春 整理而…

QT QVerticalSpacer 弹簧控件

本文详细的介绍了QVerticalSpacer控件的各种操作,例如:新建界面、控件布局、隐藏控件、设置宽高、添加布局、其它参数、.h源文件、cpp源文件、其它文章等等操作。 实际开发中,一个界面上可能包含十几个控件,手动调整它们的位置既费…

chatgpt赋能python:Python如何优化SEO

Python如何优化SEO SEO是指搜索引擎优化,是提高网站在搜索引擎中排名的技术实践。Python是一种高效、易用、灵活的编程语言,可以被应用于SEO的优化过程中。 关键词优化 关键词是SEO过程中的重要元素,Python可以帮助我们快速优化关键词。以…

chatgpt赋能python:Python拆分:如何有效地拆分Python代码

Python拆分:如何有效地拆分Python代码 Python是一种简洁而优雅的编程语言,它拥有庞大的库,使得它可以轻松处理各种任务。然而,在开发大型项目时,代码可能会变得冗长而难以维护。 通过拆分代码,可以使得代码…

WhatWeb使用教程,图文教程(超详细)

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 WhatWeb 一、扫描网站指纹二、扫描强度三、扫描内网…

Golang每日一练(leetDay0088) 数组的乘积、搜索二维矩阵II

目录 238. 除自身以外数组的乘积 Product of Array Except Self 🌟🌟 240. 搜索二维矩阵 II Search A 2d Matrix ii 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每…

SpringBoot中的增删改查案例

目录 一、案例说明 二、数据库 三、案例源码 3.1、pom文件 3.2、Application.yml 3.3、项目结构 a)整体结构 b)Java代码部分 c)资源文件部分 3.4、业务功能的实现 1)配置类 2)实体类 3)Mapper文…

chatgpt赋能python:Python中如何对数据进行归一化

Python中如何对数据进行归一化 什么是数据归一化? 在数据分析和机器学习中,数据归一化(Normalization)指的是对数据进行缩放以使其值域范围映射到特定范围内,以便更好地进行处理和分析。通常情况下,数据归…

《Java并发编程实战》课程笔记(十四)

原子类:无锁工具类的典范 对于简单的原子性问题,还有一种无锁方案。Java SDK 并发包将这种无锁方案封装提炼之后,实现了一系列的原子类。无锁方案相对互斥锁方案,最大的好处就是性能。 互斥锁方案为了保证互斥性,需要…

chatgpt赋能python:Python如何处理SEO

Python如何处理SEO Python语言是一种非常流行的编程语言,它可以用于各种类型的应用程序开发,包括网页开发。在网页开发中,搜索引擎优化(SEO)是至关重要的,因为它决定了搜索引擎是否能够有效地找到和展示您…

chatgpt赋能python:Python如何快速找到函数

Python如何快速找到函数 作为一名有10年Python编程经验的工程师,我深知在Python编程过程中如何快速找到函数是非常重要的。在学习和掌握Python函数之前,首先需要学会如何快速地找到所需的Python函数。这篇文章将介绍一些我在编程中经常使用的方法&#…

RK3588平台开发系列讲解(驱动基础篇)I2C 总线实现 client 设备

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、非设备树实现 i2c二、设备树实现 i2c沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 Linux 中的 I2C 也是按照平台总线模型设计的,既然也是按照平台总线模型设计的,是不是也分为一个device 和一个 driv…

编程比赛 入门 学习路线

内容若有不足与纰漏,请多指教! 文章目录 写在前面入门建议掌握的知识点数学思想算法 | 数据结构c STL容器类容器适配器组件迭代器常用算法函数 其他 编程 | 学习学习 | 练题 平台编程笔记 | 题解 比赛相关要点注意赛前赛中赛后 资料分享笔记题解资料PDF&…

JVM栈帧结构及动态链接

1. 栈帧结构 附加信息(此处官网未具体说明,可忽略,参考图中结构理解即可):栈帧的高度,虚拟机版本信息 栈帧信息:附加信息动态链接方法的返回地址 局部变量表:方法中定义的局部变量…

基于flask的web应用开发——登录界面

目录 0. 前言1. request2. redirect3. 动态路由4. Jinja2代码实现 0. 前言 打算在云服务器上部署一个 TODO LIST 来练手,也就是一个代办事项提醒表。 本节学习使用 flask 库制作出一个登录界面,并且使用Redis数据库实现账号密码加载功能,关…

微信小程序登录的最佳实践

微信小程序登录的最佳实践 官方文档的介绍 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。 登录流程时序 说明 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.co…

图解C++对象模型

C对象模型是什么 《深度探索C对象模型》这本书中对对象模型的描述如下: 有两个概念可以解释C对象模型: 语言中直接支持面向对象程序设计的部分。 对于各种支持的底层实现机制。 语言中直接支持面向对象程序设计的部分,包括了构造函数、析构函…

chatgpt赋能python:Python如何快速复制上一行?

Python 如何快速复制上一行? 在编写Python代码时,经常需要快速复制上一行代码进行修改。如果只是简单的手动复制粘贴,会造成不必要的时间浪费并且容易出错。本文将介绍三种快速复制上一行代码的方法。 方法一:使用快捷键 在Pyt…