license: bsd-3-clause
CodeGen (CodeGen-Multi 16B)
模型描述
CodeGen是一系列用于程序合成的自回归语言模型,源自论文:A Conversational Paradigm for Program Synthesis,作者为Erik Nijkamp、Bo Pang、Hiroaki Hayashi、Lifu Tu、Huan Wang、Yingbo Zhou、Silvio Savarese和Caiming Xiong。这些模型最初发布于此代码库,包含3种预训练数据变体(NL
、Multi
、Mono
)和4种模型规模变体(350M
、2B
、6B
、16B
)。
本代码库包含的检查点在论文中称为CodeGen-Multi 16B,其中"Multi"表示该模型以CodeGen-NL 16B为初始权重,并在多编程语言数据集上进一步预训练,"16B"指可训练参数的数量。
训练数据
该检查点(CodeGen-Multi 16B)首先以CodeGen-NL 16B初始化,然后在BigQuery上预训练,这是一个来自GitHub仓库的多编程语言大规模数据集。数据包含1192亿个标记,涵盖C、C++、Go、Java、JavaScript和Python。
训练过程
CodeGen使用交叉熵损失进行训练,以最大化序列输入的可能性。该系列模型利用Google提供的多个TPU-v4-512,结合数据和模型并行技术进行训练。更多细节请参阅论文的第2.3节。
评估结果
我们在两个代码生成基准上评估模型:HumanEval和MTPB。详情请参考论文。
预期用途与限制
作为自回归语言模型,CodeGen能够从给定的自然语言和编程语言文本中提取特征,并计算它们的可能性。然而,该模型最适合程序合成,即根据英文提示生成可执行代码,其中提示应以注释字符串的形式给出。该模型也可以补全部分生成的代码。
使用方法
可以使用AutoModelForCausalLM
轻松加载此模型:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-16B-multi")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-16B-multi")
text = "def hello_world():"
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=128)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
伦理考量
此版本仅用于支持学术论文的研究目的。我们的模型、数据集和代码并非为所有下游用途专门设计或评估。我们强烈建议用户在部署此模型之前评估并解决与准确性、安全性和公平性相关的潜在问题。我们鼓励用户考虑AI的常见限制,遵守适用法律,并在选择用例时采用最佳实践,特别是对于可能显著影响人们生活、权利或安全的高风险场景。有关用例的进一步指导,请参考我们的AUP和AI AUP。
BibTeX条目与引用信息
@article{Nijkamp2022ACP,
title={A Conversational Paradigm for Program Synthesis},
author={Nijkamp, Erik and Pang, Bo and Hayashi, Hiroaki and Tu, Lifu and Wang, Huan and Zhou, Yingbo and Savarese, Silvio and Xiong, Caiming},
journal={arXiv preprint},
year={2022}
}