论文阅读_代码生成模型_CodeGeeX

news2024/12/24 20:44:04
英文名称: CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X
中文名称: CodeGeeX:一种用于代码生成的预训练模型,并在HumanEval-X上进行多语言评估
链接: https://arxiv.org/abs/2303.17568
代码: https://github.com/THUDM/CodeGeeX 7.6k Star
     https://github.com/THUDM/CodeGeeX2 6.5k Star
作者: Qinkai Zheng, Xiao Xia, Xu Zou, Yuxiao Dong, Shan Wang, Yufei Xue, Zihan Wang, Lei Shen, Andi Wang, Yang Li, Teng Su, Zhilin Yang, Jie Tang
机构: 清华大学, Zhipu.AI, 华为
日期: 2023-03-30
引用次数: 89

1 读后感

这是一篇比较早的论文,于 2022 年 4 月至 6 月期间,在 1,536 个 Ascend 910 AI 处理器集群上,对 23 种编程语言进行了训练,总共使用了超过 850B 个 token,模型于 2022 年 9 月公开发布。

该论文介绍了 CodeGeeX 的第一代技术,而 CodeGeeX2 则基于 ChatGLM2,底层结构转向了 llama2。新版本没有附带新的论文和开源代码。

通过阅读这篇论文,我们可以了解到开发代码生成的起始阶段,包括:现有对基础架构的调整、数据组织和模型评估的过程。从代码实现的角度来看,CodeGeeX 是完全开源的。它使用 Mindspore 作为深度学习框架,而非主流的 torch。不过,它提供了类似于 torch 的调用方法,所以只需简单浏览即可。

与 copilot 相比,CodeGeeX 免费使用的。我的使用体验是:功能差异不大,只是质量稍逊色一些。

2 摘要

目标:介绍 CodeGeeX,一个拥有 130 亿参数的,支持多编程语言的代码生成模型。

方法:CodeGeeX 用 850 B 个 token 进行了模型预训练,涵盖了 23 种编程语言。

结论:实验结果表明,CodeGeeX 在性能上优于规模相似的多语言代码模型。

3 引言

主要贡献

  • 推出了 CodeGeeX,一个 13B 参数的 23 语言代码生成模型,其在代码生成和翻译上超过了同等规模的多语言基线。
  • 为 VS Code、JebBrains 和 Tencent Cloud Studio 开发了 CodeGeeX 扩展插件,比 Copilot 有更多功能,包括代码完成、生成、翻译和解释,且能提高 83.4% 用户的编码效率。
  • 创建了 HumanEval-X 基准测试,以评估多语言代码模型在代码生成和翻译任务的功能正确性,推动对预训练代码模型的理解和发展。

4 实现

4.1 模型架构

基于 Transformer 框架,采用了仅解码器网络进行自回归语言建模。CodeGeeX 的核心架构是一个 39 层的转换器解码器。在每个 Transformer 层中,应用了多头自注意力机制,然后是 MLP 层、层归一化和残差连接。并使用了 FastGELU 激活函数。

采用 GPT 范式,在大量未标记的代码数据上训练模型。

在顶部查询层和解码方面,原始的 GPT 模型使用池函数来获取最终输出。而文中模型在所有其他转换器层之上使用了一个额外的查询层,并通过注意力来获得最终的嵌入。

4.2 预训练

4.2.1 训练数据

训练语料库包含两部分:

第一部分来自开源代码数据集,包括 Pile(Gao 等人,2020 年)和 CodeParrot3。Pile 包含了 GitHub 上星级超过 100 的公共仓库的子集,从中选择了 23 种流行编程语言的文件,包括 C++,Python,Java,JavaScript,C,Go 等。根据每个文件的后缀和它所属仓库的主要语言来确定编程语言。CodeParrot 是来自 BigQuery 的另一个公开的 Python 数据集。

第二部分是直接从 GitHub 公共仓库中抓取的 Python,Java 和 C++ 的补充数据,这些数据在第一部分中没有出现。选择的仓库至少有一个星级,总大小在 10MB 以内,然后过滤掉那些:1)平均每行超过 100 个字符的文件,2)自动生成的文件,3)字母比例小于 40% 的文件,4)大于 100KB 或小于 1KB 的文件。按照 PEP8 标准格式化 Python 代码。

4.2.2 Tokenization

考虑到 1)代码数据中存在大量自然语言注释,2)变量、函数和类的命名通常是有意义的词,将代码数据与文本数据相同,并应用 GPT-2 标记器。由于词汇表包含来自各种自然语言的标记,因此它允许 CodeGeeX 处理英语以外的语言的标记,如中文、法语、俄语、日语等。最终的词汇量为 52,224 。

4.2.3 输入词和位置嵌入

在给定 tokens 后,每个 token 会与一个词嵌入相关联,同时也会获取位置信息的嵌入。这两种嵌入相加后形成模型的输入嵌入,最后整个序列被转换为输入嵌入。

4.3 训练

在 Ascend 910 上进行并行训练。CodeGeeX 在带有 Mindspore(v1.7.0)的 Ascend 910 AI 处理器(32GB)集群上进行了训练。与 NVIDIA GPU 和 PyTorch/TensorFlow 相比,Ascend 和 Mindspore 相对较新。整个预训练过程需要两个月的时间,在 192 个节点和 1,536 个 AI 处理器上,850B 代币,相当于 5+ 个 epoch(213,000 步)。

4.4 快速推理

为了提供预训练的 CodeGeeX,实现了一个纯 PyTorch 版本的 CodeGeeX,它支持在 NVIDIA GPU 上进行推理。为了实现快速且节省内存的推理,将量化和加速技术应用于预训练的 CodeGeeX。

量化前后对比如下:

5 评测

主实验结果如下:

后面的 CodeGeeX2 相比 CodeGeeX 又好很多,下图取自 CodeGeeX2 github。

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

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

相关文章

【六袆 - MySQL】MySQL 5.5及更高版本中,InnoDB是新表的默认存储引擎;

InnoDB 这是一个MySQL组件,结合了高性能和事务处理能力,以确保可靠性、健壮性和并发访问。它体现了ACID设计哲学。它作为一个存储引擎存在,处理使用ENGINEINNODB子句创建的或修改的表。请参阅第14章“InnoDB存储引擎”以获取有关架构细节和管…

AOP案例(黑马学习笔记)

需求 需求:将案例中增、删、改相关接口的操作日志记录到数据库表中 ● 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时,需要详细的操作日志,并保存在数据表中,便于后期数据追踪。 操作日志信息包含: ●…

本地复制文本无法在Ubuntu终端中粘贴问题

在公司,安装Ubuntu环境后无法粘贴。 查询并自己实践后,解决方法如下: 1. sudo apt-get autoremove open-vm-tools 2. sudo apt-get install open-vm-tools-desktop 3.重启虚拟机 又可以愉快的复制粘贴了

解析平面设计师的任务:4个要点带你全面了解!

平面设计师是整个市场相对稀缺但需求非常大的职业,许多设计师都是主要公司竞争的对象。平面设计在我们的日常生活中非常常见,涉及广告设计、标志设计、名片设计等领域。因此,本文将从四个方面详细介绍平面设计。 什么是平面设计 说到平面设…

低功耗的CMOS实时时钟/日历电路,内置报警和定时器功能采用 DIP8、 SOP8、 TSSOP8三种封装形式,应用于移动电话,便携仪器上——D8563

D8563是低功耗的CMOS实时时钟/日历电路,它提供一个可编程时钟输出,一个中断输出和掉电检测器,所有的地址和数据通过IC总线接口串行传递。最大总线速度为400Kbitss每次读写数据后,内嵌的字地址寄存器会自动产生增量。 主要特点: …

Semantic human matting

1.introduction 数据集包括,时尚模特数据集,超过18.8w张模特图,从中选出35311张图片,DIM数据集,仅包含人类的图像,202个前景图像,背景来自coco数据集和互联网,背景图不含人类&#x…

输入一个字符,判断该数是否为素数

//输入一个字符,判断该数是否为素数,若是,输出该数,若否,输出大于该整数的第一个素数。例如,输入:14 输出:17(因为17是大于14的第一个素数) 代码&#xff1a…

从DDR到DDR2的变化

1、DDR2设计思路 前文分别讲解了SDRAM的工作原理和SDRAM到DDR的变化,DDR采用双沿传输数据,为了提高传输数据的速率,先后推出了DDR-200、DDR-266、DDR-333、DDR-400,后面的数字表示数据传输的速率,对应的时钟频率分别为…

不容错过!这7款视频格式转换器免费版真的好用【全】

随着数字媒体的不断发展,视频制作和分享已经成为人们生活中的常态。然而,不同的设备和平台对视频格式的要求却各不相同,这给视频编辑和分享带来了一定的困扰。 因此,免费的视频格式转换器变得至关重要。以下是7款视频格式转换器免…

什么是WiFi 7

福建厦门微思网络始于2002年,面向全国招生! 主要课程:华为、思科、红帽、Oracle、VMware、CISP安全系列、PMP....... 网络工程师实用课程华为HCIA课程介绍 网络工程师使用课程华为HCIP课程介绍 网络工程师使用课程华为HCIE课程介绍 WiFi …

Vue3使用JSX/TSX

文章目录 1. 什么是 JSX & TSX?JSX(JavaScript XML)TSX(TypeScript XML) 2.Vue3 中使用 TSX基本渲染 & 响应式 & 事件 3.JSX 和 template 哪个好呢?总结 1. 什么是 JSX & TSX? 提示:JSX…

Premiere模板,唯美大气光斑闪烁效果照片展示视频制作模板

Premiere模板,唯美大气光斑闪烁效果照片展示视频制作PR电子相册模板mogrt下载。 特点:Premiere Pro 2023或更高版本,高清分辨率:19201080,每秒25帧的帧速率,包括教程视频。来自PR模板网,下载地址&#xff1…

基于ssm学生公寓管理系统的设计与开发论文

学生公寓管理系统的设计与实现 摘要 如今,科学技术的力量越来越强大,通过结合较为成熟的计算机技术,促进了学校、医疗、商城等许多行业领域的发展。为了顺应时代的变化,各行业结合互联网、人工智能等技术,纷纷开展了…

2024最新性能测试面试题(带答案)

一、性能测试开展过程: 答:第一步:找产品沟通哪些接口需要压测,需要达到什么样的预期值(TPS和响应时间) 第二步:编写测试计划,人员、时间周期、工具 第三步:环境搭建 第四步:造数…

List集合的Stream流式操作实现数据类型转换

目录 问题现象: 问题分析: 解决方法: 拓展: 1、Collectors.toList() 2、Collectors.toCollection(ArrayList::new) 3、Collectors.toCollection(LinkedList::new) 4、Collectors.toCollection(LinkedHashSet::new) 5、Collector…

长时间佩戴耳机伤耳朵吗?如何使用耳机才能保护耳朵的健康?

我们在购买耳机时,往往会更关注耳机的音质、降噪等参数,却往往忽略了与耳机亲密接触的耳朵的感受。 耳机动听固然重要,但关注耳朵的健康,才能让我们更舒心且长久地舒服使用耳机,恰值3月3日爱耳日,我们一起…

linux nasm汇编中调用printf不报错,但调用scanf报错。抛出了分段错误(核心转储)

当我写了如下汇编时 ; nasm -f elf64 -g -F dwarf charsin.asm ; gcc charsin.o -no-pie -o charsin ; ld -o eatclib eatclib.o ; gdb eatclib[SECTION .data]SPrompt db Enter string data, followed by Enter: ,0IPrompt db Enter an integer value, followed by Enter: ,1…

持安科技亮相张江高科895创业营,总评分第三名荣获「最具创新性企业」!

近日,张江高科895创业营(第十三季)信息安全专场Demo day&结营仪式在上海集成电路设计产业园圆满落幕。本季创业营通过多种渠道在海内外甄选优秀创业项目,一共择优录取了29家入营,最终甄选出9家代表参加Demo day路演…

three 模型对象、材质

三维向量Vector3与模型位置 点模型Points、线模型Line、网格网格模型Mesh等模型对象的父类都是Object3D ,如果想对这些模型进行旋转、缩放、平移等操作,如何实现,可以查询Threejs文档Object3D 对相关属性和方法的介绍。 三维向量Vector3 三…

有道QAnything背后的故事---关于RAG的一点经验分享

近日,我们开源了有道自研的RAG(Retrieval Augmented Generation) 引擎QAnything。该引擎允许用户上传PDF、图片、Word、Excel、PowerPoint等多种格式的文档,并实现类似于ChatGPT的互动问答功能,其中每个答案都能精确追溯到相应的文…