模型:
Salesforce/codegen2-7B
CodeGen2(CodeGen2-7B)是一系列自回归语言模型,用于程序合成,由Erik Nijkamp *,Hiroaki Hayashi*,Caiming Xiong,Silvio Savarese和Yingbo Zhou在论文中介绍。
与原始的CodeGen模型系列(即CodeGen1)不同,CodeGen2能够进行填充,并支持更多的编程语言。
发布了四种模型大小:1B,3.7B,7B,16B。
可以使用AutoModelForCausalLm功能轻松加载此模型。
对于常规的因果采样,只需基于上下文生成完成结果即可:
from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen2-7B") model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen2-7B", trust_remote_code=True, revision="main") 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))
对于填充采样,我们引入了三种新的特殊标记类型:
例如,如果我们想为下面函数中的光标位置生成填充样本:
def hello_world(): | return name
我们可通过以下方式构建模型的输入:
最终的片段如下所示:
from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen2-7B") model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen2-7B", trust_remote_code=True, revision="main") 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>截断模型的输出。
此检查点是在 the deduplicated version of the Stack dataset (v1.1) 的更严格的允许子集上进行训练的。支持的语言(和框架)如下:c,c ++,c-sharp,dart,go,java,javascript,kotlin,lua,php,python,ruby,rust,scala,shell,sql,swift,typescript,vue。
CodeGen2使用交叉熵损失进行训练,以最大化顺序输入的概率。输入序列有两种格式:(1)因果语言建模和(2)文件级别的范围损坏。有关更多详细信息,请参阅论文。
我们在HumanEval和HumanEval-Infill上评估了我们的模型。有关更多详细信息,请参阅 paper 。
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} }