英文

CodeT5+ 770M

模型描述

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

如何使用

可以使用 T5ForConditionalGeneration 功能轻松加载此模型,并采用与原始 CodeT5 相同的分词器。

from transformers import T5ForConditionalGeneration, AutoTokenizer

checkpoint = "Salesforce/codet5p-770m"
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、微调和指令调整。具体来说,与其SoTA基线相比,CodeT5+ 在许多下游任务中取得了显著的性能提升,例如8个文本到代码检索任务(+3.2平均 MRR)、2个行级代码完成任务(+2.1平均精确匹配)和2个检索辅助代码生成任务(+5.8平均BLEU-4)。在MathQA-Python 和 GSM8K-Python 的2个数学编程任务中,CodeT5+ 模型在10亿以下参数规模下明显优于多个高达137B参数的LLMs。特别地,在HumanEval基准测试的零-shot文本到代码生成任务中,InstructCodeT5+ 16B 在对比其他开放源代码LLMs时取得了35.0%的pass@1和54.5%的pass@10的最新SoTA结果,甚至超越了闭源的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}
}