🚀 CodeGen (CodeGen-Multi 2B)
CodeGen是一系列用于程序合成的自回归语言模型,能从给定的自然语言和编程语言文本中提取特征,并计算其可能性。它尤其擅长根据英文提示生成可执行代码。
🚀 快速开始
这个模型可以使用AutoModelForCausalLM
轻松加载:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-2B-multi")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-2B-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))
✨ 主要特性
- 基于自回归架构,能够根据输入的文本生成后续的代码。
- 支持多种预训练数据变体(
NL
, Multi
, Mono
)和模型大小变体(350M
, 2B
, 6B
, 16B
)。
- 特别适用于程序合成任务,能根据英文提示生成可执行代码。
📦 安装指南
文档未提及具体安装步骤,故跳过此章节。
💻 使用示例
基础用法
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-2B-multi")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-2B-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))
📚 详细文档
模型描述
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 2B,其中“Multi”表示该模型以 CodeGen-NL 2B 初始化,并在多种编程语言的数据集上进一步预训练,“2B”指的是可训练参数的数量。
训练数据
此检查点(CodeGen-Multi 2B)首先以 CodeGen-NL 2B 初始化,然后在 BigQuery 上进行预训练,这是一个来自GitHub仓库的大规模多编程语言数据集。数据包含1192亿个标记,包括C、C++、Go、Java、JavaScript和Python。
训练过程
CodeGen使用交叉熵损失进行训练,以最大化序列输入的可能性。该模型家族由Google使用多个TPU-v4-512进行训练,利用了数据和模型并行性。更多细节请参阅 论文 的第2.3节。
评估结果
我们在两个代码生成基准测试上评估了我们的模型:HumanEval和MTPB。更多细节请参阅 论文。
预期用途和局限性
作为一个自回归语言模型,CodeGen能够从给定的自然语言和编程语言文本中提取特征,并计算其可能性。然而,该模型旨在并最擅长程序合成,即根据英文提示生成可执行代码,提示应采用注释字符串的形式。该模型也可以完成部分生成的代码。
伦理考虑
此版本仅用于支持学术论文的研究目的。我们的模型、数据集和代码并非专门为所有下游用途设计或评估。我们强烈建议用户在部署此模型之前评估并解决与准确性、安全性和公平性相关的潜在问题。我们鼓励用户考虑人工智能的常见局限性,遵守适用法律,并在选择用例时采用最佳实践,特别是在错误或滥用可能对人们的生活、权利或安全产生重大影响的高风险场景中。有关用例的更多指导,请参阅我们的AUP和AI AUP。
🔧 技术细节
CodeGen使用交叉熵损失进行训练,以最大化序列输入的可能性。该模型家族由Google使用多个TPU-v4-512进行训练,利用了数据和模型并行性。更多细节请参阅 论文 的第2.3节。
📄 许可证
本项目采用BSD 3条款许可证(BSD-3-Clause License)。
📖 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}
}