license: apache-2.0
tags:
- codet5
datasets:
- code_search_net
inference: false
CodeT5(小规模模型)
预训练的CodeT5模型。该模型由Yue Wang、Weishi Wang、Shafiq Joty和Steven C.H. Hoi在论文《CodeT5:面向代码理解与生成的标识符感知统一预训练编码器-解码器模型》中提出,并首次发布于此代码库。
免责声明:发布CodeT5的团队未编写此模型的模型卡,故本模型卡由Hugging Face团队(具体为nielsr)撰写。
模型描述
论文摘要节选:
"我们提出CodeT5,这是一个统一的预训练编码器-解码器Transformer模型,能更好地利用开发者赋予标识符所传达的代码语义。我们的模型采用统一框架无缝支持代码理解与生成任务,并支持多任务学习。此外,我们提出了一种新颖的标识符感知预训练任务,使模型能区分哪些代码标记是标识符,并在它们被掩码时恢复。我们还提出利用用户编写的代码注释,通过双模态双重生成任务实现更好的自然语言-编程语言对齐。综合实验表明,CodeT5在代码缺陷检测、克隆检测等理解任务,以及PL-NL、NL-PL和PL-PL等多方向的生成任务上显著优于现有方法。进一步分析表明,我们的模型能更好地捕捉代码中的语义信息。"
预期用途与限制
本代码库仅包含预训练模型,因此您可将其用于掩码跨度预测(如下方代码示例所示)。但该模型的主要用途是针对下游任务进行微调,例如:
- 代码摘要生成
- 代码生成
- 代码翻译
- 代码优化
- 代码缺陷检测
- 代码克隆检测
请访问模型中心查找您感兴趣任务的微调版本。
使用方法
使用示例:
from transformers import RobertaTokenizer, T5ForConditionalGeneration
tokenizer = RobertaTokenizer.from_pretrained('Salesforce/codet5-small')
model = T5ForConditionalGeneration.from_pretrained('Salesforce/codet5-small')
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=10)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
训练数据
CodeT5模型基于CodeSearchNetHusain等,2019进行预训练。此外,作者从BigQuery1收集了两个C/CSharp数据集,以确保所有下游任务与预训练数据的编程语言存在重叠。预训练共使用约835万条数据实例。
训练流程
预处理
本模型使用代码专用的BPE(字节对编码)分词器。用户可使用本代码库中的RobertaTokenizer文件预处理文本(或代码)。
评估结果
关于多个下游基准测试的评估结果,请参阅原论文。
伦理考量
本版本仅用于支持学术论文的研究目的。我们的模型、数据集和代码并非针对所有下游用途设计或评估。我们强烈建议用户在部署前评估并解决可能涉及的准确性、安全性和公平性问题。我们鼓励用户考虑AI的普遍局限性,遵守适用法律,并在选择应用场景(尤其是可能显著影响人们生活、权利或安全的高风险场景)时采用最佳实践。有关应用场景的进一步指导,请参考我们的AUP和AI AUP。
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}
}