支持多种编程语言的程序合成模型
CodeGen-Multi 350M是一种程序合成模型,旨在生成可执行代码。其预训练数据来自GitHub的多语言代码库,包括C、C++、Go、Java、JavaScript和Python等。模型具备350M个参数,可以高效生成和补全代码。适用于HumanEval和MTPB等基准测试,为程序合成任务提供了良好的支持。
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))
上述代码展示了如何利用模型生成代码片段,输入为一段代码提示,输出为这段代码的完整实现。