模型:
Salesforce/codegen25-7b-multi
标题: CodeGen2.5: Small, but mighty
作者: Erik Nijkamp *, Hiroaki Hayashi *,Yingbo Zhou,Caiming Xiong
(* 同等贡献)
CodeGen2.5 是一系列用于程序合成的自回归语言模型。
在 CodeGen2 的基础上构建,该模型在1.4T标记的 StarCoderData 上进行了训练,并且在比StarCoderBase-15.5B小一半的情况下取得了有竞争力的结果。
像CodeGen2一样,该模型能够进行填充,并支持多种编程语言。
然后我们进一步在Python上进行了训练,然后在指令数据上进行了训练。我们如下发布所有的模型:
可以使用 AutoModelForCausalLM 功能轻松加载此模型。
请安装OpenAI tiktoken进行分词。
pip install tiktoken==0.4.0
对于常规的因果抽样,只需根据上下文生成补全代码:
from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-multi", trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-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))
对于填充抽样,我们遵循CodeGen2的格式:
例如,如果要为函数的以下光标位置生成填充样本:
def hello_world(): | return name
我们按以下方式构建模型的输入:
最终的代码段如下所示:
from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-multi", trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-multi") def format(prefix, suffix): return prefix + "<mask_1>" + suffix + "<|endoftext|>" + "<sep>" + "<mask_1>" prefix = "def hello_world():\n " suffix = " return name" text = format(prefix, suffix) 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=False)[len(text):])
您可能希望使用 <eom> 来截断模型的输出。
我们在HumanEval和HumanEval-Infill上评估了我们的模型。有关更多详细信息,请参阅 blog 。
作为一个自回归语言模型,CodeGen2.5能够从给定的自然语言和编程语言文本中提取特征,并计算它们的可能性。然而,该模型适用于程序合成,并且在给定英语提示的情况下表现最佳,其中提示应采用注释字符串的形式。该模型也可以完成部分生成的代码。
模型的预训练数据集仅被筛选为仅包含许可证。然而,模型可以直接从数据集中生成源代码。代码的许可证可能要求归因和/或其他特定要求,必须遵守。数据提供者BigCode提供了一个工具,可以搜索预训练数据以确定生成的代码来自于哪里,并对您的代码应用适当的归因。
请引用CodeGen2论文:
@article{Nijkamp2023codegen2, title={CodeGen2: Lessons for Training LLMs on Programming and Natural Languages}, author={Nijkamp, Erik and Hayashi, Hiroaki and Xiong, Caiming and Savarese, Silvio and Zhou, Yingbo}, journal={arXiv preprint}, year={2023} }