CodeGeex论文阅读

news2025/2/2 20:50:47

《CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X》

论文地址:https://arxiv.org/pdf/2303.17568.pdf

代码地址:https://github.com/THUDM/CodeGe

一、简介

CodeGeeX,是一个具有130亿个参数的多语言模型,用于代码生成,在23种编程语言的8500亿个token上进行了预训练。

CodeGeeX的特点

(1)CodeGeeX模型本身以及训练代码都是开源的,有助于理解和改进预训练代码模型。也支持在Ascend和NVIDIAGPUs等不同平台上推理。

(2)除了代码生成和代码补全,也支持代码解释和代码翻译。

(3)与知名的代码生成模型相比(CodeGen-16B、GPT-NeoX-20B、InCode-6.7B和GPT-J-6B),CodeGeeX的表现优于其他模型。

二、模型

CodeGeeX是一个具有13B个参数的代码生成模型,由39层从左到右的transformer decoders和一个top query layer组成。它将文本/代码tokens作为输入,并自回归地输出下一个标记的概率

1、使用Transformer为主干。

与GPT-3Codex类似,CodeGeeX也是生成式预训练(GPT)架构,使用纯解码器的GPT架构,采用自回归(编程)语言建模。

CodeGeeX的核心架构是一个39层的transformer解码器。在每个transformer层中,应用了多头自注意力机制,然后是MLP层,以及层归一化和残差连接。使用类GELU的FastGELU,它在Ascend910AI处理器下效率更高:

2、生成式预训练。

通过采用GPT范式,在大量未标记的代码数据上训练模型。其原理是迭代地将代码token作为输入,预测下一个token,预测下一个token并与真实的token进行比较。对于长度为n的任意输入序列 {x1,...xn} ,CodeGeeX的输出都是下一个token的概率分布

 Θ 表示所有参数,v是词表大小。通过将预测token与真实分布进行比较,可以优化交叉熵损失函数:

3、Top Query层和解码层。

原始的GPT使用pooler函数来获得最终的输出。我们在所有transformer层之上使用一个额外的查询层,通过attention获得最终的embedding。top query层的输入被替换为位置n+1的query embedding。最后的输出再乘以词嵌入矩阵的转置,得到输出概率。对于解码策略,贪心、温度采样、top-k采样、top-p采样和beam search。最后,去标记化将把选中的tokenID变成一个实际的单词。

三、预训练设置

1、代码语料库

训练语料库包含两部分。第一部分来自开源代码数据集,Pile和CodeParrot6选择了23种流行的编程语言的文件,包括c++Python,Java,JavaScript,C,Go等。根据每个文件的后缀和它所属的存储库的主要语言来识别其编程语言。第二部分是直接从GitHub公共存储库中抓取的PythonJavac++的补充数据。

将训练数据分成长度相等的片段。为了帮助模型区分多种语言,我们在每个片段之前以[注释符号]language:[LANG]的形式添加了一个特定于语言的标签,例如#language:Python标记。

2、Tokenization

第一步是将代码片段转换为数值向量。考虑到代码数据中存在大量自然语言注释,变量、函数和类的命名通常是有意义的单词,将代码数据视为文本数据并使用GPT-2 tokenizer,它是一种BPE(Byte Pair Encoding)分词器,使用固定大小的词表和可变长度的字符来处理开放词表问题。初始词汇表大小为50,000将多个空格编码为额外的标记,以提高编码效率。具体来说,L个空格用<|extratoken_X|>表示,其中X=8+L。由于词汇表包含来自各种自然语言的标记,因此它允许CodeGeeX处理除英语以外的其他语言的标记,如中文。最终的词表大学是v=52,224。经过分词后,任何代码片段或文本描述都可以转换为整数向量。

3、词嵌入和位置嵌入

给定token,下一步是将每个token与单词嵌入相关联。通过在词嵌入矩 阵中查找token ID,其中h=5120为隐藏大小,为每个token 获得一个可学习的嵌入。为了获取位置信息,我们还采用了可学习的位置嵌入,将当前位置ID从映射到一个可学习的嵌入,其中nmax=2048为最大序列长度。然后,添加两个嵌入以获得模型的输入嵌入。最后,整个序列可以转化为输入嵌入,其中n是输入序列长度。

四、训练

CodeGeeX在 使 用 Mindspore (v1.7.0)的 Ascend 910AI处 理 器 (32GB)集 群 上 进 行 训 练 。  整 个 预 训 练 过 程 在 192个 节 点 和 1536个 AI处 理 器 上 花 费 了 两 个 月 的 时 间 , 在 此 期 间 , 模 型 消 耗 了 850B个token, 相 当 于5个epochs(213000steps)。为了提高训练效率,采用8路模型并行和192路数据并行,并使用ZeRO-2优化器来进一步降低显存消耗。最终,每个节点上的micro-batch size为16,全局batch size为3072。

使用Adam优化器来优化loss。模型权重采用FP16的格式,为了更高的精度和稳定性layer-norm和softmax使用FP32。模型占用GPU显存为27GB。初始学习率为1e-4,并应用cosine学习率衰减:

 

vscode的插件体验

代码翻译功能

1、完全不理解原始代码的意思,会生成一些毫不相干的代码:比如生成的print函数,里面是一堆莫名其妙的逻辑

2、输出的代码语言也不是kotlin,仍然是Java,可能是代码样本数量少的原因

代码理解

对于简单的代码可以正确的理解

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

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

相关文章

<数据结构>NO10.快速排序|递归|非递归|优化

文章目录 快速排序递归实现快速排序hoare版本DigHole版本前后指针版本 非递归实现快速排序算法优化1. 针对有序数组进行优化2. 针对全相等数组进行优化 算法分析时间复杂度空间复杂度 快速排序 快速排序&#xff08;英语&#xff1a;Quicksort&#xff09;&#xff0c;又称分区…

0基础学习VR全景平台篇 第64篇:高级功能-自定义LOGO和密码访问

一、功能说明 VR视频的高级功能目前有两项&#xff0c;分别是自定义LOGO和密码访问。 二、后台编辑界面 1、自定义LOGO&#xff1a;支持JPG、PNG、GIF格式的图片&#xff0c;大小不超过5M&#xff0c;建议高度不超过500px&#xff0c;设置后显示在VR视频的左上角位置。 2、密…

Vue学习随堂记录

计算属性和监听器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…

MobPush:Android SDK 集成指南

开发工具&#xff1a;Android Studio 集成方式&#xff1a;Gradle在线集成 安卓版本支持&#xff1a;minSdkVersion 19 集成准备 注册账号 使用PushSDK之前&#xff0c;需要先在MobTech官网注册开发者账号&#xff0c;并获取MobTech提供的AppKey和AppSecret&#xff0c;详情可…

《程序是怎样跑起来的》简介

目录 1. 前言2. 主要内容3. 总结 1. 前言 闲暇之余&#xff0c;读了一遍《程序是怎样跑起来的》这本书。颇感欣喜。借此机会分享一下。 本书可以这样定位&#xff1a; 对学生&#xff1a;作为专业课之前的开胃菜&#xff0c;非常合适&#xff0c;尤其是作为《计算机组成原理…

华为OD机试真题 Java 实现【最少数量线段覆盖】【2023Q1 200分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路四、Java算法源码五、效果展示1、输入2、输出3、说明4、复杂一点5、理性分析一下 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&#xff…

FLStudio21中文版水果软件最新版下载安装图文教程

FL Studio21简称FL&#xff0c;全称&#xff1a;Fruity Loops Studio&#xff0c;因此国人习惯叫它"水果"。目前版本是FL Studio20&#xff0c;它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先进的制作工具&#xff0c;让你的音乐突破想象…

数据结构--图定义与基本术语

数据结构–图定义与基本术语 图的定义 图G由 顶点集 V \color{red}顶点集V 顶点集V和 边集 E \color{red}边集E 边集E组成&#xff0c;记为G (V, E)&#xff0c;其中V(G)表示图G中顶点的有限非空集&#xff1b; E(G)表示图G中顶点之间的关系&#xff08;边&#xff09;集合。…

现代化 Android 开发:Jetpack Compose 最佳实践

作者&#xff1a;古哥E下 如果一直关注 Compose 的发展的话&#xff0c;可以明显感受到 2022 年和 2023 年的 Compose 使用讨论的声音已经完全不一样了, 2022 年还多是观望&#xff0c;2023 年就有很多团队开始采纳 Compose 来进行开发了。不过也有很多同学接触了下 Compose&am…

22.JavaWeb-Minio存储服务器

MinIO是一个开源的对象存储服务器&#xff0c;它兼容Amazon S3 API。它提供了一个简单而强大的存储解决方案&#xff0c;可以用于存储和检索任意大小的文件对象&#xff0c;如图片、视频、文档等。 1.安装与配置Minio https://dl.min.io/server/minio/release/windows-amd64/…

Leetcode 1352: 最后K个数的乘积

题目描述 链接&#xff1a;https://leetcode.cn/problems/product-of-the-last-k-numbers/ 结果 耗时&#xff1a;12min-13min 思路 暴力法&#xff0c;直接从后面读取数组计算。 Java代码 import java.util.ArrayList;class ProductOfNumbers {ArrayList<Integer…

4个简单易上手的免费抠图工具,让你轻松在线抠图!

本文介绍了四个简单易上手的免费抠图工具&#xff0c;它们分别是记灵在线工具、Remove、FocoClipping和免费抠图工具。无论你是初学者还是有经验的设计师&#xff0c;这些工具都能帮助你快速、高效地进行在线抠图操作。 在现代设计和摄影中&#xff0c;抠图是一项重要且常见的…

新建一个Vue项目后,如何在vue.config,js中配置后端访问地址

在 Vue 2 项目中&#xff0c;可以通过配置 vue.config.js 文件来设置后端访问地址。下面是一个简单的示例&#xff1a; 在项目根目录下新建 vue.config.js 文件&#xff08;如果已存在&#xff0c;则直接编辑该文件&#xff09;。在 vue.config.js 文件中添加以下内容&#xf…

ClickHouse原理剖析

1.ClickHouse简介 ClickHouse是一款开源的面向联机分析处理的列式数据库&#xff0c;其独立于Hadoop大数据体系&#xff0c;最核心的特点是极致压缩率和极速查询性能。同时&#xff0c;ClickHouse支持SQL查询&#xff0c;且查询性能好&#xff0c;特别是基于大宽表的聚合分析查…

yolo系列学习

文章目录 理论基础YOLO-V1YOLO-V2YOLOV3 教学视频 理论基础 不同阶段算法优缺点分析 two-stage (两阶段) &#xff1a;Faster-rcnn、Mask-Rcnn &#xff0c;多了预选框操作RPNOne-stage (单阶段)&#xff1a;YOLO 指标分析 精度 Precision 查准率&#xff0c;预测为正且实际…

亚马逊、lazada店铺销售策略揭秘:如何利用测评自养号突破瓶颈?

在跨境平台上&#xff0c;想要取得突破性的销售成绩并不容易。随着竞争的日益激烈&#xff0c;商家们需要采取有效的销售策略来突破销售瓶颈。本文将揭示三种结合测评自养号的销售策略&#xff0c;帮助卖家在跨境平台上取得更好的销售业绩。 一、建立完善的自养号评价体系 自…

git rebase (合并代码和整理提交记录)图文详解

git rebase详解&#xff0c;附带操作过程命令&#xff0c;运行图片 合并代码初始代码分支结构merge合并代码rebase合并代码 整理提交记录背景-整理提交记录步骤-图文详解 建议在看这篇文章之前一定要看完&#xff1a;git reset 命令详解 git revert命令详解。 看完上面的文章后…

基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件

系列文章目录 基于scrcpy的远程调试方案 基于scrcpy的Android群控项目重构 基于scrcpy的Android群控项目重构 进阶版 基于scrcpy的Android群控项目重构&#xff0c;获取Android屏幕元素信息并编写自动化事件&#xff08;视频&#xff09; 基于scrcpy的Android群控项目重构…

struct详解

导入 我们有没有这种情况&#xff0c;总想有一个数组&#xff0c;其中可以有int,double,char。。。各种类型&#xff0c;但是对于内置的数据类型显然是做不到的&#xff0c;于是就有了结构体类型 结构体是将多种不同的结构打包在一起&#xff0c;形成全新的类型进行使用 stru…

Spring的两种事务管理机制,面试这样答当场入职!

前言&#xff1a; 博主在最近的几次面试中&#xff0c;大中小厂都问到了Spring的事务相关问题&#xff0c;这块知识确实是面试中的重点内容&#xff0c;因此结合所看的书籍&#xff0c;在这篇文章中总结下。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读&#xff0c;感…