🚀 CodeT5+ 16B
CodeT5+ 16B是一款编码器 - 解码器架构的开源代码大语言模型,能灵活运行于不同模式,支持广泛的代码理解和生成任务,为代码相关工作提供强大助力。
🚀 快速开始
本模型可使用AutoModelForSeq2SeqLM
轻松加载,且采用与 CodeGen 相同的分词器。
💻 使用示例
基础用法
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
checkpoint = "Salesforce/codet5p-16b"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint,
torch_dtype=torch.float16,
low_cpu_mem_usage=True,
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))
✨ 主要特性
- 多模式灵活运行:CodeT5+ 可在不同模式(即 仅编码器、仅解码器 和 编码器 - 解码器)下灵活操作,以支持广泛的代码理解和生成任务。
- 丰富的预训练任务:与原始的 CodeT5 家族相比,CodeT5+ 通过多种预训练任务进行预训练,包括 跨度去噪、因果语言建模、对比学习 和 文本 - 代码匹配,从而从单模态代码数据和双模态代码 - 文本数据中学习丰富的表示。
- 高效的预训练方法:采用简单有效的 计算高效预训练 方法,使用冻结的现成大语言模型(如 CodeGen)初始化模型组件,以高效扩展模型规模(如
2B
、6B
、16B
),并采用“浅编码器和深解码器”架构。
- 指令调优:按照 Code Alpaca 进行指令调优,以与自然语言指令对齐。
📦 安装指南
文档未提及安装步骤,暂不提供。
📚 详细文档
模型描述
CodeT5+ 是一个新的开源代码大语言模型家族,采用编码器 - 解码器架构,能在不同模式下灵活运行,支持广泛的代码理解和生成任务。该模型在论文 CodeT5+: Open Code Large Language Models for Code Understanding and Generation 中被提出,作者包括 Yue Wang*、Hung Le* 等(* 表示同等贡献)。
与原始的 CodeT5 家族(基础版:220M
,大版本:770M
)相比,CodeT5+ 通过多种预训练任务进行预训练,包括 跨度去噪、因果语言建模、对比学习 和 文本 - 代码匹配,以从单模态代码数据和双模态代码 - 文本数据中学习丰富的表示。此外,它采用了一种简单而有效的 计算高效预训练 方法,使用冻结的现成大语言模型(如 CodeGen)初始化模型组件,以高效扩展模型规模(如 2B
、6B
、16B
),并采用“浅编码器和深解码器”架构。此外,它还按照 Code Alpaca 进行指令调优,以与自然语言指令对齐。
预训练数据
此检查点在 github-code 数据集 去重版本的更严格许可子集上进行训练。数据预处理时仅保留许可宽松的代码(“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 - 16B - mono 初始化。在第一阶段预训练中,它在单模态代码数据上进行训练,包括多种预训练任务,如 跨度去噪 和两种变体的 因果语言建模。之后,它在 Python 子集上以因果语言建模为目标再训练一个周期,以更好地适应 Python 代码生成。更多详细信息请参考论文。
评估结果
CodeT5+ 模型在各种设置(零样本、微调 和 指令调优)下的广泛代码理解和生成任务中进行了全面评估。具体而言,与现有最佳基线相比,CodeT5+ 在许多下游任务上取得了显著的性能提升,例如:8 个文本到代码检索任务(平均 MRR 提高 3.2)、2 个行级代码补全任务(平均精确匹配提高 2.1)和 2 个检索增强代码生成任务(平均 BLEU - 4 提高 5.8)。在 MathQA - Python 和 GSM8K - Python 上的 2 个数学编程任务中,参数低于十亿的 CodeT5+ 模型显著优于许多参数高达 137B 的大语言模型。特别是在 HumanEval 基准的零样本文本到代码生成任务中,InstructCodeT5+ 16B 相对于其他开源代码大语言模型创造了新的最佳成绩,pass@1 为 35.0%,pass@10 为 54.5%,甚至超过了闭源的 OpenAI code - cushman - 001 模型。更多详细信息请参考 论文。
🔧 技术细节
文档未提供足够详细的技术实现细节,暂不提供。
📄 许可证
本项目采用 bsd-3-clause
许可证。
📖 引用信息
@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}
}
⚠️ 重要提示
本次发布仅用于支持学术论文的研究目的。我们的模型、数据集和代码并非专门为所有下游用途设计或评估。我们强烈建议用户在部署此模型之前评估并解决与准确性、安全性和公平性相关的潜在问题。我们鼓励用户考虑人工智能的常见局限性,遵守适用法律,并在选择用例时采用最佳实践,特别是在错误或滥用可能对人们的生活、权利或安全产生重大影响的高风险场景中。有关用例的更多指导,请参考我们的 AUP 和 AI AUP。