英文

CodeT5+ 6B

模型描述

CodeT5+ 是一种全新的开源大型语言模型,采用编码器-解码器架构,可以灵活地在不同模式(即仅编码器、仅解码器和编码器-解码器)下运行,以支持广泛的代码理解和生成任务。该模型在以下论文中进行了介绍:

CodeT5+: Open Code Large Language Models for Code Understanding and Generation by Yue Wang *, Hung Le *, Akhilesh Deepak Gotmare Nghi D.Q. Bui Junnan Li Steven C.H. Hoi (*表示相等贡献)。

与原始的CodeT5系列(base: 220M,large: 770M)相比,CodeT5+是通过对多样化的预训练任务进行预训练,包括跨度去噪、因果语言建模、对比学习和文本代码匹配,从单模态代码数据和双模态代码文本数据中学习丰富的表示。此外,它采用了一种简单而有效的计算高效预训练方法,用冻结的现成LLM(例如 CodeGen )初始化模型组件,以便有效地扩展模型(即2B,6B,16B),并采用“浅编码器和深解码器”架构。此外,它经过了指导调整,以与自然语言指令对齐(请参阅我们的InstructCodeT5+ 16B),遵循 Code Alpaca

如何使用

通过使用AutoModelForSeq2SeqLM功能可以轻松加载此模型,并使用与 CodeGen 相同的分词器。

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

checkpoint = "Salesforce/codet5p-6b"
device = "cuda" # for GPU usage or "cpu" for CPU usage

tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint,
                                              torch_dtype=torch.float16,
                                              trust_remote_code=True).to(device)

encoding = tokenizer("def print_hello_world():", return_tensors="pt").to(device)
encoding['decoder_input_ids'] = encoding['input_ids'].clone()
outputs = model.generate(**encoding, max_length=15)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

预训练数据

此检查点是在 github-code dataset 的重复版本的更严格的宽松子集上进行训练的。数据经过预处理,仅保留许可的代码("mit",“apache-2”,“bsd-3-clause”,“bsd-2-clause”,“cc0-1.0”,“unlicense”,“isc”)。支持的语言(共9种)如下:c,c ++,c-sharp,go,java,javascript,php,python,ruby。

训练过程

此检查点从现成的LLM初始化,即它的编码器从 CodeGen-350M-mono 初始化,解码器从 CodeGen-6B-mono 初始化。它在第一阶段预训练时,使用单模态代码数据进行训练,其中包括跨度去噪和两个变体的因果语言建模。之后,它在Python子集上使用因果语言建模目标进行更多次数的训练,以便更好地适应Python代码生成。更多细节请参阅论文。

评估结果

CodeT5+模型已在各种设置下的广泛代码理解和生成任务上进行了全面评估:零样本、微调和指导调整。具体而言,与SoTA基线相比,CodeT5+在许多下游任务上取得了显著的性能提升,例如8个文本到代码检索任务(+3.2平均MRR),2个行级代码补全任务(+2.1平均完全匹配)和2个检索增强代码生成任务(+5.8平均BLEU-4)。在MathQA-Python和GSM8K-Python上的2个数学编程任务中,较小规模的CodeT5+模型明显优于多达137B参数的许多LLM。特别是,在HumanEval基准测试上的零样本文本到代码生成任务中,InstructCodeT5+ 16B创下了35.0% pass@1和54.5% pass@10的SoTA结果,超过其他开源代码LLM,甚至超过闭源的OpenAI code-cushman-001模式。请参考 paper 以获取更多详细信息。

BibTeX条目和引用信息

@article{wang2023codet5plus,
  title={CodeT5+: Open Code Large Language Models for Code Understanding and Generation},
  author={Wang, Yue and Le, Hung and Gotmare, Akhilesh Deepak and Bui, Nghi D.Q. and Li, Junnan and Hoi, Steven C. H.},
  journal={arXiv preprint},
  year={2023}
}