英文

CodeT5+ 220M

模型描述

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

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

使用方法

使用T5ForConditionalGeneration功能可以轻松加载该模型,并且采用与原始 CodeT5 相同的标记器。

from transformers import T5ForConditionalGeneration, AutoTokenizer

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

tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = T5ForConditionalGeneration.from_pretrained(checkpoint).to(device)

inputs = tokenizer.encode("def print_hello_world():<extra_id_0>", return_tensors="pt").to(device)
outputs = model.generate(inputs, max_length=10)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
# ==> print "Hello World"

预训练数据

此检查点是在 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。

训练过程

此检查点在第一阶段的预训练中使用了单模式代码数据,其中包括跨度去噪和两个变种的因果语言建模。更多细节请参阅论文。

评估结果

CodeT5+模型在各种设置下对广泛的代码理解和生成任务进行了全面评估:零-shot、微调和指令调优。具体而言,与其它基准模型相比,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%的一次通过率和54.5%的十次通过率上取得了新的SoTA结果,超过了其它开源代码LLM甚至超过了闭源OpenAI code-cushman-001模式。更多细节请参阅论文。

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}
}