🚀 CodeGen (CodeGen-HTML 350M)
CodeGen是用于程序合成的自回归语言模型家族,能够解决从自然语言提示生成可执行代码的问题,为程序开发提供了高效的解决方案。
🚀 快速开始
这个模型可以使用AutoModelForCausalLM
轻松加载:
基础用法
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-350M-multi")
model = AutoModelForCausalLM.from_pretrained("alecsharpie/codegen_350m_html")
text = "<body>"
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 。
- 模型最初在 此仓库 发布,有3种预训练数据变体(
NL
、Multi
、Mono
)和4种模型大小变体(350M
、2B
、6B
、16B
)。
- 本仓库中的检查点是在CodeGen-Multi 350M基础上微调得到的,“Multi” 表示模型用 CodeGen-NL 350M 初始化,并在多种编程语言的数据集上进一步预训练,“350M” 指可训练参数的数量。
- 该模型在Hugging Face上的bigcode/the-stack数据集中的HTML代码上进行了微调。
📚 详细文档
模型描述
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 350M基础上微调得到的,“Multi” 表示模型用 CodeGen-NL 350M 初始化,并在多种编程语言的数据集上进一步预训练,“350M” 指可训练参数的数量。
它在Hugging Face上的bigcode/the-stack数据集中的HTML代码上进行了微调。
训练数据
此检查点(CodeGen-Multi 350M)首先用 CodeGen-NL 350M 初始化,然后在 BigQuery 上进行预训练,这是一个来自GitHub仓库的大规模多编程语言数据集。数据包含1192亿个标记,包括C、C++、Go、Java、JavaScript和Python。
最后,它在Hugging Face上的 bigcode/the-stack 数据集中的HTML代码上进行了微调。
训练过程
初始训练
CodeGen使用交叉熵损失进行训练,以最大化顺序输入的可能性。
该模型家族由Google使用多个TPU - v4 - 512进行训练,利用了数据和模型并行性。
更多详细信息请参阅 论文 的第2.3节。
微调
我在单个40GB RAM的A100上对350M模型进行了微调,批量大小为10,输入长度为512个标记,使用了80 - 90%的RAM。
预期用途和局限性
作为一个自回归语言模型,CodeGen能够从给定的自然语言和编程语言文本中提取特征,并计算它们的可能性。
然而,该模型旨在并最擅长程序合成,即根据英文提示生成可执行代码,提示应采用注释字符串的形式。该模型也可以完成部分生成的代码。
🔧 技术细节
CodeGen最初使用交叉熵损失进行训练,以最大化顺序输入的可能性。模型家族由Google使用多个TPU - v4 - 512进行训练,利用了数据和模型并行性。在微调阶段,350M模型在单个40GB RAM的A100上进行微调,批量大小为10,输入长度为512个标记,使用了80 - 90%的RAM。
📄 许可证
本项目采用BSD 3条款许可证。
📖 引用信息
@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}
}