🚀 CodeT5 (基础规模模型)
CodeT5是一个预训练的代码处理模型。它能更好地利用开发者指定标识符所传达的代码语义,支持代码理解和生成任务,在多种代码相关任务中表现出色。
🚀 快速开始
本仓库仅包含预训练模型。你可以将此模型用于掩码跨度预测等任务,但该模型的主要用途是针对特定下游任务进行微调,例如代码摘要、代码生成、代码翻译等。
from transformers import RobertaTokenizer, T5ForConditionalGeneration
tokenizer = RobertaTokenizer.from_pretrained('Salesforce/codet5-base')
model = T5ForConditionalGeneration.from_pretrained('Salesforce/codet5-base')
text = "def greet(user): print(f'hello <extra_id_0>!')"
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=8)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
✨ 主要特性
- 统一框架:采用统一的预训练编码器 - 解码器Transformer模型,无缝支持代码理解和生成任务,允许进行多任务学习。
- 标识符感知:提出了一种新颖的标识符感知预训练任务,使模型能够区分哪些代码标记是标识符,并在它们被掩码时恢复它们。
- 双模态双生成任务:利用用户编写的代码注释,通过双模态双生成任务实现更好的自然语言 - 编程语言对齐。
- 性能优越:在代码缺陷检测、克隆检测等理解任务以及PL - NL、NL - PL和PL - PL等各种生成任务中显著优于先前的方法。
📦 安装指南
暂未提及具体安装命令,故跳过此章节。
💻 使用示例
基础用法
from transformers import RobertaTokenizer, T5ForConditionalGeneration
tokenizer = RobertaTokenizer.from_pretrained('Salesforce/codet5-base')
model = T5ForConditionalGeneration.from_pretrained('Salesforce/codet5-base')
text = "def greet(user): print(f'hello <extra_id_0>!')"
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=8)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
高级用法
暂未提供高级用法的代码示例,故不展示。
📚 详细文档
模型描述
从论文摘要可知:“我们提出了CodeT5,这是一个统一的预训练编码器 - 解码器Transformer模型,它能更好地利用开发者指定标识符所传达的代码语义。我们的模型采用统一框架,无缝支持代码理解和生成任务,并允许进行多任务学习。此外,我们提出了一种新颖的标识符感知预训练任务,使模型能够区分哪些代码标记是标识符,并在它们被掩码时恢复它们。此外,我们提出利用用户编写的代码注释,通过双模态双生成任务实现更好的自然语言 - 编程语言对齐。综合实验表明,CodeT5在代码缺陷检测和克隆检测等理解任务以及包括PL - NL、NL - PL和PL - PL等各个方向的生成任务上显著优于先前的方法。进一步分析表明,我们的模型能够更好地从代码中捕获语义信息。”
预期用途与限制
本仓库仅包含预训练模型,你可以将此模型用于掩码跨度预测等任务。不过,该模型的主要用途是针对感兴趣的下游任务进行微调,例如:
- 代码摘要
- 代码生成
- 代码翻译
- 代码优化
- 代码缺陷检测
- 代码克隆检测
代码的监督数据集可在此处找到。你可以在模型中心查找针对你感兴趣任务的微调版本。
训练数据
CodeT5模型在CodeSearchNet Husain等人,2019上进行了预训练。此外,作者从BigQuery1收集了两个C/CSharp数据集,以确保所有下游任务的编程语言与预训练数据有重叠。总共约835万个实例用于预训练。
训练过程
预处理
该模型使用了一个特定于代码的BPE(字节对编码)分词器,该分词器使用HuggingFace Tokenizers库进行训练。可以使用RobertaTokenizer
和本仓库中的文件为模型准备文本(或代码)。
评估结果
关于几个下游基准的评估结果,请参考论文。
伦理考量
此版本仅用于支持学术论文的研究目的。我们的模型、数据集和代码并非专门为所有下游用途设计或评估。我们强烈建议用户在部署此模型之前评估并解决与准确性、安全性和公平性相关的潜在问题。我们鼓励用户考虑人工智能的常见局限性,遵守适用法律,并在选择用例时采用最佳实践,特别是在错误或滥用可能对人们的生活、权利或安全产生重大影响的高风险场景中。有关用例的进一步指导,请参考我们的AUP和AI AUP。
🔧 技术细节
暂未提供足够具体的技术说明,故跳过此章节。
📄 许可证
本模型采用Apache - 2.0许可证。
BibTeX引用
@misc{wang2021codet5,
title={CodeT5: Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generation},
author={Yue Wang and Weishi Wang and Shafiq Joty and Steven C. H. Hoi},
year={2021},
eprint={2109.00859},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
免责声明
发布CodeT5的团队并未为此模型编写模型卡片,因此此模型卡片由Hugging Face团队(更具体地说是nielsr)编写。