英文

CodeT5+ 16B

模型描述

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

CodeT5+ ,作者为 Yue Wang *、 Hung Le *、 Akhilesh Deepak Gotmare Nghi D.Q. Bui Junnan Li Steven C.H. Hoi (*表示等同贡献)。

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

如何使用

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

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

checkpoint = "Salesforce/codet5p-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。

训练过程

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

评估结果

CodeT5+ 模型在各种设置下广泛评估了许多代码理解和生成任务:零-shot、微调和指令调优。具体而言,与最先进的基线模型相比,CodeT5+ 在许多下游任务中取得了显著的性能提升,例如 8 个文本到代码检索任务(平均 MRR 增加了 3.2),2 个行级代码补全任务(平均准确匹配增加了 2.1),以及 2 个检索辅助代码生成任务(平均 BLEU-4 增加了 5.8)。在 MathQA-Python 和 GSM8K-Python 上进行的 2 个数学编程任务中,长度不到十亿参数的 CodeT5+ 模型明显优于多达 137B 参数的许多语言模型。特别地,在 HumanEval 基准测试中的零-shot 文本到代码生成任务中,InstructCodeT5+ 16B 超越了其他开源代码语言模型,取得了新的 35.0% 的 pass@1 和 54.5% 的 pass@10,甚至超过了闭源的 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}
}