英文

CodeT5+ 770M (进一步在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-770m-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、微调和指令调整。具体而言,与其它最先进基线相比,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的成功率@1为35.0%,成功率@10为54.5%,超过其他开放代码LLMs,甚至超过了闭源的OpenAI code-cushman-001模式。请参阅 paper 获取更多细节。

特别针对此检查点,在零-shot设置下,它在HumanEval上的成功率@1为15.5%,与更大的LLMs(例如Incoder 6B的15.2%,GPT-NeoX 20B的15.4%和PaLM 62B的15.9%)相当。

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