英文

CodeT5+ 220M(在Python上进一步调整)

模型描述

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+ 在预训练阶段使用了多样的预训练任务,包括跨度去噪、因果语言建模、对比学习和文本-代码匹配,以从单一模态代码数据和双模态代码-文本数据中学习丰富的表示。此外,它采用了一种简单但有效的计算高效预训练方法,通过使用冻结的现成LLMs(例如 CodeGen )来初始化模型组件,以实现高效的模型扩展(即2B、6B、16B),并采用“浅层编码器和深层解码器”架构。此外,它经过指令调整以与自然语言指令保持一致(即InstructCodeT5+ 16B),遵循 Code Alpaca

如何使用

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

from transformers import T5ForConditionalGeneration, AutoTokenizer

checkpoint = "Salesforce/codet5p-220m-py"
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():", 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#、Go、Java、JavaScript、PHP、Python、Ruby。

训练过程

此检查点首先在第一阶段预训练中在多语言单模态代码数据上进行训练,包括一组多样的预训练任务,包括跨度去噪和两种变体的因果语言建模。之后,它在Python子集上再次使用因果语言模型目标进行了一个时代的训练,以更好地适应Python代码生成。更多细节请参阅论文。

评估结果

CodeT5+模型在各种设置中已在广泛的代码理解和生成任务上进行了全面评估:零-shot、微调和指令调整。具体而言,与其SoTA基准相比,CodeT5+在许多下游任务上取得了显著的性能提升,例如8个文本到代码检索任务(平均MRR增加了3.2),2个行级代码完成任务(平均精确匹配增加了2.1),以及2个基于检索的代码生成任务(平均BLEU-4增加了5.8)。在MathQA-Python和GSM8K-Python上的2个数学编程任务中,较小的CodeT5+模型性能明显优于多达137B参数的许多LLMs。特别地,在HumanEval基准上的零-shot文本到代码生成任务中,InstructCodeT5+ 16B取得了35.0%的1次通过率和54.5%的10次通过率,超过了其他开放源码LLMs,甚至超过了闭源OpenAI code-cushman-001模式。更多细节请参阅 paper

特别针对此检查点,在零-shot设置下,它在HumanEval上的1次通过率达到12.0%,优于较大的LLMs,如Incoder 1.3B的8.9%、GPT-Neo 2.7B的6.4%和GPT-J 6B的11.6%。

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