模型:

Salesforce/instructcodet5p-16b

英文

InstructCodeT5+ 16B

模型描述

CodeT5+ 是一种新的开放源码大型语言模型系列,采用编码器-解码器结构,可以在不同模式下灵活地操作(即仅编码器,仅解码器和编码器-解码器),以支持广泛的代码理解和生成任务。它在以下论文中介绍:

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

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

如何使用

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

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

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

tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint,
                                              torch_dtype=torch.float16,
                                              low_cpu_mem_usage=True,
                                              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-16B-mono 初始化。它在第一阶段预训练中使用单模态代码数据进行训练,其中包括跨度去噪和两种变种的因果语言建模。之后,它在Python子集上进一步使用因果语言建模目标进行训练一个epoch,以更好地适应Python代码生成。最后,我们应用指令调整,以与自然语言指令相匹配,根据 Code Alpaca 进行调整。更多详细信息,请参考论文。

评估结果

CodeT5+模型在各种设置下在广泛的代码理解和生成任务中进行了全面评估:零-shot、微调和指令调整。具体来说,与SoTA基线相比,CodeT5+在许多下游任务上取得了显著的性能提升,例如8个文本到代码检索任务(平均MRR+3.2)、2个行级代码完成任务(平均精确匹配+2.1)和2个检索增强代码生成任务(平均BLEU-4+5.8)。在MathQA-Python和GSM8K-Python的2个数学编程任务中,较低参数规模的CodeT5+模型明显优于多达137B参数的许多LLM模型。特别是在HumanEval基准测试中的零-shot文本到代码生成任务中,InstructCodeT5+ 16B在35.0% pass@1和54.5% pass@10方面超过了其他开放源码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}
}