【通览一百个大模型】CodeX(OpenAI)

news2024/11/16 23:30:27

【通览一百个大模型】CodeX(OpenAI)

作者:王嘉宁,本文章内容为原创,仓库链接:https://github.com/wjn1996/LLMs-NLP-Algo

订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大模型和算法干货资料大礼包,近200篇论文,300份博主亲自撰写的markdown笔记,近100个大模型资料卡,助力NLP科研、学习和求职。


CodeX大模型基本信息资料卡

序号大模型名称归属推出时间规模预训练语料评测基准模型与训练方法开源论文模型地址相关资料
5CodeX
CodeX-C
CodeX-D
产品:Copilot
OpenAI2021-07<12B1、来自GitHub约为159GB的代码数据,用于Code Fine-Tuning
2、监督微调:编程比赛网站和持续合入的代码仓分别构造了10000、40000个编程问题,并进行了过滤。
构建HumanEval、APPS评测数据集。不采用BLEU等指标,而是定义pass@k来表示大模型在HumanEval测试集上功能正确性在GPT3的基础上,先在大规模的代码语料上进行预训练,得到CodeX。其次在监督数据集上进行微调,CodeX-C:根据函数名、docstrings生成函数体;CodeX-D:根据函数名和函数体生成docstrings。
image.png
未开源论文未开源查看
资料

CodeX

欢迎订阅阅读【大模型&NLP&算法】。

  • 作者:王嘉宁
  • 本文章内容为转载或整理;
  • 仓库链接:https://github.com/wjn1996/LLMs-NLP-Algo

Evaluating Large Language Models Trained on Code
论文:https://arxiv.org/pdf/2107.03374.pdf
相关资料:https://zhuanlan.zhihu.com/p/414210861
转载


正如OpenAI 的联合创始人兼首席技术官 Greg Brockman介绍的那样,“Codex是GPT-3的后代”,Codex基于GPT-3使用code数据进行了Fine-Tuning,模型参数从 12M 到 12B不等。
CodeX训练过程:

一. 数据集
1. Code Fine-Tuning数据集
首先是用来做Fine-Tuning的code数据集,根据论文介绍,Codex在2020年5月从Github 的 54,000,000 个公开代码仓上收集了数据,包括 179 GB 文件大小在 1 MB 以下的独一无二的python文件,在经过过滤后,最终的数据集大小为159GB。

这部分数据相当于是用于continual pre-training的

2. 评测数据集
在之前的代码生成工作中,主要采用的是基于匹配的方法,即基于模型输出和参考代码的精确或模糊匹配,如BLEU,也有一些工作基于匹配的方法做了一定的改进来捕捉代码的语义正确性,如CodeBLEU ,但论文中认为基于匹配的方法,不能评价编程功能的正确性,因为从功能上看,参考代码所对应的解空间是十分巨大和复杂的。因此,论文中参考了之前代码迁移工作 和“伪代码到代码”转换工作 中的做法,将生成代码的功能正确性作为评测指标

具体来说,在论文中,关注从docstrings生成python函数的任务,并通过unit tests的方法来评测生成代码的正确性。

评测指标采用的pass@k,在之前的工作 中,该指标表示被解决问题的比例,其中每个问题在预测时采样k个样本,k个样本中任何一个通过unit tests,则认为该问题被解决,但论文中指出,用这种方式计算 pass@k 方差比较大,论文对该评测指标进行了改进。与之前工作不同的是,对每个问题,在预测时产生 n≥k 个样本,统计能够通过unit tests的正确样本的数量 c ≤ n, 并根据下式计算 pass@k 的无偏估计:
image.png

pass@K的估计:
image.png
pass@K的评测脚本:
image.png

2.1 HumanEval
为了评价函数功能的正确性,论文中构建了一个包括164个人工受写的编程问题的数据集,叫做HumanEval,其中每个编程问题包括函数头、docstrings、函数体和几个 unit tests。HumanEval中的编程问题可以用来评估语言理解能力、推理能力、算法能力和简单的数学能力,该数据集已经开源 。
image.png
2.2 APPS
APPS 是 Hendrycks 等人提出的用来衡量语言模型编程能力的数据集,APPS一共包含10000个编程问题,每个编程问题都有若干个 unit tests,其中5000个编程问题作为训练集,5000个编程问题作为测试集,训练集中的每个问题还包括若干个正确答案。

3. Supervised Fine-Tuning数据集
从Github上收集的Code Fine-Tuning数据集除了独立函数外,还包含类实现、配置文件、脚本,甚至还包含存储数据的文件,这些代码和从 docstring 生成函数的相关性不大,因此,论文认为这种数据分布的不匹配会影响模型在HumanEval数据集上的效果。
为了进行额外的有监督的 fine-tuning,论文构建了一个用于正确生成独立函数的数据集,数据集的来源是编程比赛网站和持续合入的代码仓,论文通过前者构造了10000个编程问题,通过后者构造了40000个编程问题,并进行了过滤。
4. Docstrings 生成数据集
论文中还尝试了从代码生成docstrings,由于数据集中通常的数据格式为 <函数头><函数体>,因此根据函数头和 docstrings 生成函数体相对比较容易,而根据函数头和函数体生成 docstrings 可能没那么容易。通过将之前数据集中的数据格式变为<函数头><函数体>, 构造了一个根据代码生成 docstrings 的数据集。
二. 模型
Codex 的模型结构和 GPT 完全一样,论文中尝试了从头训练和基于 GPT-3 的参数 fine-tuning,结果发现基于 GPT-3 的参数 fine-tuning 并没有取得效果上的提升,原因可能是 Code Fine-tuning 数据集太大,但基于 GPT-3 的参数 fine-tuing 可以收敛的更快,因此,论文中都采用的是这种训练策略。
为了尽可能的利用 GPT 的文本表示,Codex 使用了和 GPT-3 一样的分词器,但因为代码中词的分布和自然语言中词的分布有很大区别,GPT-3 的分词器在表示代码时可能不是非常有效,在 python 语言中,分词器编码低效的一个主要原因是空格的编码,因此,论文中在GPT-3 的分词器中加入了额外的一些 token 来表示不同长度的空格,这样在表示代码时可以少使用 30% 的 token。
推理时,使用核采样 不断采样 Codex 生成的 token,直到碰见以下字符中的任何一个。
“\nclass”,“\ndef”,“\n#”,“\nif” , ‘\nprint’

2.1 Codex
论文中训练得到的第一个模型就是Codex,即在不同参数量的 GPT-3 上做 Code-Funing 得到的模型,模型参数量有12M、25M、42M、85M、300M、679M,2.5B 和 12B。
2.2 Codex-S
为了提升 Codex 在 HumanEval 数据集上的效果,论文将 Codex 在 Supervised Fine-Tuning 数据集上进行了fine-tuning,得到的模型称为 Codex-S。为了和HumanEval保持一致,将数据都处理成了图2所示例子的形式,当一个batch内提示(函数名和 docstrings )长度不同时,采用了 left-pad 的方法进行了处理,在训练时,mask了所有提示中的token上的loss。
2.3 Codex-D
为了训练 Codex 生成 docstrings 的能力,论文将 Codex 在 Docstrings 生成数据集上进行了fine-tuning,得到的模型称为Codex-D,在训练时,mask了所有代码(函数名+函数体)中token上的loss。

  博客记录着学习的脚步,分享着最新的技术,非常感谢您的阅读,本博客将不断进行更新,希望能够给您在技术上带来帮助。


【大模型&NLP&算法】专栏

近200篇论文,300份博主亲自撰写的markdown笔记。订阅本专栏【大模型&NLP&算法】专栏,或前往https://github.com/wjn1996/LLMs-NLP-Algo即可获得全部如下资料:

  • 机器学习&深度学习基础与进阶干货(笔记、PPT、代码)
  • NLP基础与进阶干货(笔记、PPT、代码)
  • 大模型全套体系——预训练语言模型基础、知识预训练、大模型一览、大模型训练与优化、大模型调优、类ChatGPT的复现与应用等;
  • 大厂算法刷题;

在这里插入图片描述

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

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

相关文章

01 |「沟通技巧」

前言 沟通是一个程序员需要具备的技能。 文章目录 前言一、学会沟通1. 为什么需要具备沟通能力2. 如何具备良好的沟通能力 二、沟通实践 一、学会沟通 1. 为什么需要具备沟通能力 程序员的工作能力一部分是需求的开发&#xff0c;另一部分是调试解决 Bug 的能力&#xff1b;快…

算法导论机考复习(数据处理)

素数筛选 求所有小于n的素数 #include<bits/stdc.h> using namespace std; const int N1000; int prim[N]; int n; int main() {while(cin>>n){//初始化2到n都是素数for(int i2;i<n;i){prim[i]1;}//从2到n把所有的是当前数的倍数的数都设置为0//不能设置自己为…

硬盘或者U盘提示需要格式化的解决办法

插入硬盘之后提示&#xff1a; 使用驱动器 G:中的光盘之前需要将其格式化 是否要将其格式化? 如下图所示 顿时慌了啊&#xff0c;里面还有比较重要的东西呢&#xff0c;这一下子完蛋&#xff1f; 遇事找某宝&#xff0c;上面估计有这种技术服务。果然有这一类的技术服务&…

数据库作业——select查询操作

数据库作业 创建数据库 mysql> create table worker( -> 部门号 int(11) not null, -> 职工号 int(11) primary key not null,-> 工作时间 date not null,-> 工资…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(十一)

今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏…

RabbitMQ ---- 消息队列

RabbitMQ ---- 消息队列 1. MQ 的相关概念1.1 什么是 MQ1.2 为什么要用 MQ1.3 MQ 的分类1.4 MQ 的选择 2. RabbitMQ2.1 RabbitMQ 的概念2.2 四大核心概念2.3 RabbitMQ 核心部分2.4 各个名词介绍2.5 安装 1. MQ 的相关概念 1.1 什么是 MQ MQ(message queue)&#xff0c;从字面…

03-2_Qt 5.9 C++开发指南_Qt全局定义、容器类、容器类的迭代器、Qt类库的模块

本篇简要介绍Qt全局定义中的数据类型、函数、宏定义&#xff1b;容器类中&#xff1a;顺序容器类、关联容器类&#xff1b;容器类的迭代器&#xff1b;Qt类库的模块。 文章目录 1.Qt全局定义1.1 数据类型定义1.2 函数1.3 宏定义1.3.1 QT_VERSION1.3.2 QT_VERSION_CHECK1.3.3 Q…

绘制等厚度图

clc;clear;close all; data xlsread(BRENT层等厚度.xlsx); x data(:,1) xmax max(x); xmin min(x); y data(:,2) ymax max(y); ymin min(y); z data(:,3); N 45; …

为什么没有getter方法无法成功返回new对象的json格式(chatgpt谬论)

标题防止太长所以精炼了些。springboot项目&#xff0c;restful风格下面&#xff0c;我们如果返回的是一个new的实体类对象是什么情况。 restful风格其实是要将返回的数据封装为json的&#xff0c;它是要去这样封装的。但是如果你不提供对象的get方法其实是没法返回的。接口测试…

数据库的备份与恢复(超详细讲解)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于MySQL数据库的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.数据库的备份与恢复是什么 二. …

5. Redis优化秒杀、Redis消息队列实现异步秒杀

文章目录 Redis优化秒杀、Redis消息队列实现异步秒杀一、秒杀优化1.1 回顾“一人一单”秒杀业务代码1.2 异步秒杀思路1.3 基于Redis完成秒杀资格判断1.3.1 修改VoucherServiceImpl1.3.2 Lua脚本编写1.3.3 Redislua判断用户是否抢购成功1.3.4 基于阻塞队列实现异步秒杀下单1.3.4…

Java024——String类

一、String类简单说明 1、单个字符可以用char类型保存&#xff0c;多个字符组成的文本就需要保存在String 对象中。 2、String是Java中的一个类 3、String 通常被称为字符串&#xff0c;一个String对象最多可以保存(2^32-1)个字节(占用4GB空间大小)的文本内容。 二、String类…

Jmeter 压测工具的安装及使用

目录 一、简介二、下载三、安装四、启动五、使用1.调整界面显示大小2.改为中文&#xff08;选&#xff09;3.添加线程组4.添加 HTTP 请求5.添加 HTTP 请求头6.保存压测配置7.启动压测8.查看结果树9.查看聚合报告 一、简介 官网地址&#xff1a; https://jmeter.apache.org/ JM…

HTML案例:滚动条下拉后导航栏有网格状效果

案例&#xff1a;在滚动条下拉的时候&#xff0c;导航栏是固定的&#xff0c;当下拉卷出的内容在导航条的范围内时&#xff0c;导航条的背景虚化为卷出的内容 固定定位的效果 需求效果&#xff1a; 1、HTML代码 <style>* {margin: 0;padding: 0;}nav {/* 固定定位 */pos…

穷且益坚,不坠青云之志——忆我的大学四年

文章目录 一、前言二、大学之前1.从小的经历以及家庭的困境2.一切的根源——自卑3.不愉快的初高中经历 三、大一&#xff1a;所谓追梦——改变的起点1.敏感而自卑的内心2.百团大战&#xff0c;与协会埋下不解之缘3.改变的契机——追梦App4.持续的学习&#xff0c;热爱铸就改变5…

vscode安装+配置+使用+调试【保姆级教程】

1. VScode是什么 Visual Studio Code简称VS Code&#xff0c;是一款跨平台的、免费且开源的现代轻量级代码编辑器&#xff0c;支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性&#xff0c;也拥有对git的开箱即…

Django_发送邮件

目录 一、开启SMTP服务并获取授权码 二、在Django的配置文件中添加邮箱服务配置 三、发送邮箱代码 源码等资料获取方法 使用django邮箱功能需要搭建smtp服务器&#xff0c;如果没有&#xff0c;可以使用第三方smtp服务器。 本文以第三方QQ邮箱服务器演示如何使用python的s…

从钢铁行业数字化管控平台的智能进化,看超自动化能力边界

文/王吉伟 钢铁行业的数字化转型&#xff0c;历来都是值得探讨的热点话题。 2022年&#xff0c;我国粗钢产量10.13亿吨&#xff0c;占据了全球钢铁供给市场的半壁江山。 这组数据可谓非常抢眼&#xff0c;但仍旧难掩诸多企业的各种经营问题。 钢铁生产过程工序众多&#xf…

CentOS环境下的JDK8安装

CentOS 安装 JDK8 安装JDK8 下载 官网&#xff1a;https://www.oracle.com/java/technologies/downloads/#java8-linux 将下载好的压缩包拷贝到根目录下 通过xshell如果出现 bash: rz: 未找到命令 &#xff0c;需要先运行下面的命令 yum -y install lrzsz解压 tar -zxvf …

ubuntu彻底卸载libreoffice和安装wps

一.卸载libreoffice 1. 打开ubuntu桌面&#xff0c;右键 打开终端 方法一 完全卸载 sudo apt-get remove libreoffice-common 根据提示输入管理员密码&#xff0c;然后根据提示 输入 Y 这样&#xff0c;等待卸载完成。 正常情况下上述命令执行完成后Libreffice的表格、绘图…