CodeGen-Multi 2B 项目介绍
项目背景
CodeGen 是一组用于程序合成的自回归语言模型,源自一篇名为《A Conversational Paradigm for Program Synthesis》的论文。该论文由 Erik Nijkamp 等几位研究者撰写。CodeGen 模型家族最初发布于一个代码仓库中,它们有三个预训练数据变体(NL
、Multi
、Mono
)和四个模型大小变体(350M
、2B
、6B
、16B
)。在这些模型中,CodeGen-Multi 2B 是一个特别的版本。
模型描述
CodeGen-Multi 2B 是从 CodeGen-NL 2B 模型开始初始化的,并在一个包含多种编程语言的数据集上进一步预训练。"Multi" 指的是该模型使用多个编程语言的数据进行训练,而"2B"则表示模型具有20亿个可训练参数。
训练数据
CodeGen-Multi 2B 的训练数据主要来源于 GitHub 的多个编程语言数据集,这些数据存储于 BigQuery 中。数据集包含 1192 亿个标记,包括 C、C++、Go、Java、JavaScript 和 Python 等多种编程语言。
训练过程
CodeGen 模型家族通过交叉熵损失进行训练,以最大化序列输入的可能性。这些模型使用了多个 TPU-v4-512 单元进行训练,充分利用了数据和模型的并行性。具体的训练细节可以在相关论文的第2.3节中找到。
模型评估
CodeGen 模型在两个代码生成基准上进行了评估,即 HumanEval 和 MTPB。有关详细的评估结果,请参阅相关论文。
使用场景与限制
作为一个自回归语言模型,CodeGen 可以从给定的自然语言和编程语言文本中提取特征,并计算其可能性。然而,该模型的最佳用途是程序合成,即在给定英文提示的情况下生成可执行代码。提示通常应为注释字符串的形式,模型还可以补全部分生成的代码。
使用方法
使用 AutoModelForCausalLM
功能可以很容易地加载这个模型,以下是一个简单的示例代码:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-2B-multi")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-2B-multi")
text = "def hello_world():"
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=128)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
引用信息
该模型及其相关研究的完整引用信息如下:
@article{Nijkamp2022ACP,
title={A Conversational Paradigm for Program Synthesis},
author={Nijkamp, Erik and Pang, Bo and Hayashi, Hiroaki and Tu, Lifu and Wang, Huan and Zhou, Yingbo and Savarese, Silvio and Xiong, Caiming},
journal={arXiv preprint},
year={2022}
}