英文

CodeT5+ 2B

模型描述

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

作者: 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-2b"
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。

训练过程

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

评估结果

CodeT5+ 模型在各种不同环境下广泛评估了各种代码理解和生成任务:零-shot、微调和指令调整。具体来说,与基线模型相比,CodeT5+ 在许多下游任务中取得了显著的性能提升,例如 8 个文本到代码检索任务(平均 MRR +3.2)、2 个行级代码补全任务(平均完全匹配 +2.1)和 2 个检索增强代码生成任务(平均 BLEU-4 +5.8)。在 MathQA-Python 和 GSM8K-Python 上的 2 个数学编程任务中,体积不到 10 亿参数的 CodeT5+ 模型明显优于多达 137B 参数的许多语言模型。特别是在 HumanEval 基准测试的零-shot 文本到代码生成任务中,InstructCodeT5+ 16B 在其他开放代码语言模型之上取得了新的 SOTA 结果,通过率@1 为 35.0%,通过率@10 为 54.5%,甚至超过了封闭式的 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}
}