项目介绍:CodeGen-Mono 350M
CodeGen-Mono 350M 是自回归语言模型家族中的一员,其目的是程序合成,即从给定的自然语言提示中生成可执行代码。这个模型出自论文《A Conversational Paradigm for Program Synthesis》,由 Erik Nijkamp 等人撰写。CodeGen 的模型共有三个前训练数据变体(NL
、Multi
、Mono
)和四种模型规模(350M
、2B
、6B
、16B
)。而 CodeGen-Mono 350M 特指在《A Conversational Paradigm for Program Synthesis》中提到的一个特殊模型。
模型描述
CodeGen-Mono 350M 是一个经过特定初始化和进一步训练的语言模型。首先,它以 CodeGen-Multi 350M 为初始模型,然后在一个名为 BigPython 的数据集上进行再训练,这个数据集包含了 71.7B 的 Python 编程语言符号数据。而 "350M" 指的是模型可训练参数的数量。
训练数据
CodeGen-Mono 350M 的初始阶段是使用 CodeGen-Multi 350M 开始的。而在第二阶段,它特别在 Python 编程语言的数据集 BigPython 上进行了再训练。该数据集包含了大量 Python 代码,这有助于模型更好地生成和理解 Python 代码结构与语法。
训练过程
CodeGen 家族的模型通过交叉熵损失进行训练,以最大化输入序列的可能性。模型使用 Google 的 TPU-v4-512 进行训练,充分利用数据和模型的并行化处理能力。更多技术细节参见论文的第 2.3 节。
评估结果
为了评估模型的能力,研究人员使用了两个代码生成基准测试:HumanEval 和 MTPB。具体的评估结果和细节可以在论文中找到。
使用范围和限制
CodeGen 作为自回归语言模型,可以从给定的自然语言和编程语言文本中提取特征,并计算其可能性。然而,模型最佳应用领域在于程序合成,即通过英文提示生成可执行代码。这些提示应以注释字符串的形式给出。模型同样可以补全部分生成的代码。
如何使用
这个模型可以通过 AutoModelForCausalLM
功能轻松加载并使用。下面是一个简单的 Python 示例:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-350M-mono")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-350M-mono")
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))
引用信息
如果在学术或技术文档中引用这个模型,可以使用以下 BibTeX 条目:
@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}
}