license: bsd-3-clause
CodeT5+ 20亿参数模型
模型描述
CodeT5+ 是一个新型开源代码大语言模型家族,采用编码器-解码器架构,可灵活切换不同工作模式(包括_纯编码器_、纯解码器_和_编码解码器),支持广泛的代码理解与生成任务。该模型在以下论文中首次提出:
《CodeT5+: 面向代码理解与生成的开放代码大语言模型》
作者:王越*、黎雄*、Akhilesh Deepak Gotmare、裴德庆、李俊楠、许子衡(*表示同等贡献)。
相较于原始CodeT5系列(基础版:2.2亿参数
,大型版:7.7亿参数
),CodeT5+通过多样化的预训练任务进行训练,包括_片段去噪_、因果语言建模、对比学习_和_文本-代码匹配,从而从单模态代码数据和双模态代码-文本数据中学习丰富表征。该模型采用创新的_计算高效预训练_方法,通过冻结现成大语言模型(如CodeGen)组件进行高效扩展(支持20亿
、60亿
、160亿
参数规模),并采用"浅编码器-深解码器"架构。此外,模型经过指令微调以对齐自然语言指令(参见我们的InstructCodeT5+ 160亿参数模型),方法遵循Code Alpaca。
使用方法
本模型可通过AutoModelForSeq2SeqLM
快速加载,使用与CodeGen相同的分词器。
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
checkpoint = "Salesforce/codet5p-2b"
device = "cuda"
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数据集去重后的严格许可子集训练。数据预处理时仅保留符合宽松许可的代码(包括"mit"、"apache-2"、"bsd-3-clause"、"bsd-2-clause"、"cc0-1.0"、"unlicense"、"isc")。支持的9种编程语言为:
C
、C++
、C#
、Go
、Java
、JavaScript
、PHP
、Python
、Ruby
。
训练流程
本检查点基于现成大语言模型初始化:编码器源自CodeGen-350M-mono,解码器源自CodeGen-2B-mono。第一阶段预训练使用单模态代码数据,包含_片段去噪_和两种_因果语言建模_变体任务。随后在Python子集上额外训练若干周期,通过因果语言建模目标优化Python代码生成能力。详见论文。
评估结果
CodeT5+系列在零样本、微调和指令微调等多种设置下,经过广泛的代码理解与生成任务评估。具体表现包括:在8个文本-代码检索任务上平均MRR提升3.2个点,2个行级代码补全任务平均Exact Match提升2.1个点,2个检索增强代码生成任务平均BLEU-4提升5.8个点。在MathQA-Python和GSM8K-Python数学编程任务中,百亿参数以下的CodeT5+模型显著优于多个高达1370亿参数的LLM。特别是在HumanEval基准的零样本文本-代码生成任务中,InstructCodeT5+ 160亿参数模型以35.0%的pass@1和54.5%的pass@10刷新了开源模型纪录,甚至超越闭源的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}
}
伦理声明
本版本仅供学术研究支持论文发表使用。我们的模型、数据集和代码并非为所有下游场景设计或评估。我们强烈建议用户在部署前评估并解决可能涉及的准确性、安全性和公平性问题。我们鼓励用户充分考虑AI的通用局限性,遵守适用法律,在选择应用场景时遵循最佳实践,特别是对于可能显著影响人们生活、权利或安全的高风险场景。有关使用场景的更多指导,请参考我们的可接受使用政策(AUP)和AI使用政策(AI AUP)。