codegen-350M-multi 项目介绍
项目概述
CodeGen 是一系列用于程序合成的自回归语言模型,来源于论文“A Conversational Paradigm for Program Synthesis”。这个项目由 Erik Nijkamp 等人开发,最初发布于 GitHub 上的一个指定仓库。在该系列模型中,CodeGen 提供了三种预训练数据变体(NL
、Multi
、Mono
)和四种模型大小变体(350M
、2B
、6B
、16B
)。其中,codegen-350M-multi
是其中的一种模型版本,“Multi”表示该模型最初用 CodeGen-NL 350M 初始化,然后在多种编程语言的数据集上进行进一步预训练,“350M”则表示该模型含有 3.5 亿个可训练参数。
训练数据
codegen-350M-multi
首先基于 CodeGen-NL 350M 初始化,随后在 GitHub 仓库的多种编程语言构成的大规模数据集 BigQuery 上进行进一步预训练。该数据集包含 1192 亿个 token,涉及 C、C++、Go、Java、JavaScript 和 Python 等编程语言。
训练过程
CodeGen 使用交叉熵损失来最大化序列输入的可能性。该系列模型利用由 Google 提供的多台 TPU-v4-512 进行训练,并采用数据与模型并行化技术。详细的训练过程可以参考论文的第 2.3 节。
评估结果
研究团队使用 HumanEval 和 MTPB 两个代码生成基准对模型进行了评估。详细的评估结果和方法可查阅相关论文。
预期用途与限制
作为自回归语言模型,CodeGen 能够从自然语言和编程语言文本中提取特征,并计算其出现的概率。然而,该模型最主要的用途在于 程序合成,即在给定英文提示的情况下生成可执行代码。这些提示应以注释字符串的形式出现。该模型还能够完成部分生成的代码。
使用方法
用户可以通过 AutoModelForCausalLM
功能轻松加载该模型。以下是一个使用示例:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-350M-multi")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-350M-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))
上述代码展示了如何利用模型生成代码片段,输入为一段代码提示,输出为这段代码的完整实现。