license: bsd-3-clause
CodeT5+ 770M(基于Python进一步调优)
模型描述
CodeT5+ 是一个新型开源代码大语言模型家族,采用编码器-解码器架构,可灵活切换不同工作模式(如仅编码器、仅解码器或编码器-解码器组合),以支持广泛的代码理解与生成任务。该模型在论文中首次提出:
《CodeT5+: 面向代码理解与生成的开放代码大语言模型》
作者:王越*、黎雄*、Akhilesh Deepak Gotmare、裴德庆、李俊楠、许子衡(*表示共同一作)。
相较于原始CodeT5系列(基础版:220M
,大版:770M
),CodeT5+通过多样化的预训练任务进行训练,包括片段去噪、因果语言建模、对比学习和文本-代码匹配,从而从单模态代码数据和双模态代码-文本数据中学习丰富表征。此外,该模型采用高效计算预训练方法,利用现成冻结大语言模型(如CodeGen)初始化组件,可高效扩展至2B
、6B
、16B
规模,并采用"浅编码器-深解码器"架构。模型还基于Code Alpaca进行指令微调以对齐自然语言指令(参见我们的InstructCodeT5+ 16B)。
使用方法
本模型可通过T5ForConditionalGeneration
直接加载,分词器与原始CodeT5一致。
from transformers import T5ForConditionalGeneration, AutoTokenizer
checkpoint = "Salesforce/codet5p-770m-py"
device = "cuda"
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))
预训练数据
本检查点基于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
。
训练流程
本检查点首先在第一阶段预训练中基于多语言单模态代码数据训练,包含片段去噪和两种因果语言建模变体任务。随后专门在Python子集上以因果语言建模目标额外训练一个周期,以优化Python代码生成能力。详见论文。
评估结果
CodeT5+系列在零样本、微调和指令微调等设置下,在广泛的代码理解与生成任务中表现优异。相较于现有技术,其在多个下游任务实现显著提升:8个文本-代码检索任务(平均MRR +3.2)、2个行级代码补全任务(平均精确匹配率 +2.1)、2个检索增强代码生成任务(平均BLEU-4 +5.8)。在MathQA-Python和GSM8K-Python数学编程任务中,十亿参数以下的CodeT5+模型显著优于许多高达137B参数的大模型。特别是在HumanEval基准的零样本文本-代码生成任务中,InstructCodeT5+ 16B以35.0% pass@1和54.5% pass@10刷新了开源模型记录,甚至超越闭源的OpenAI code-cushman-001模型。详见论文。
本检查点在HumanEval零样本设置下达到15.5% pass@1,与更大规模模型相当: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}
}
伦理声明
本版本仅供学术研究使用。我们的模型、数据集和代码并非为所有下游场景设计或评估。强烈建议用户在部署前评估准确性、安全性和公平性等潜在问题。我们鼓励用户考虑AI的普遍局限性,遵守适用法律,并为高风险场景(模型错误或滥用可能严重影响人类生活、权利或安全的情况)制定最佳实践方案。具体使用指南请参考我们的AUP和AI AUP政策。