模型:

Salesforce/codegen25-7b-mono

英文

CodeGen2.5-7B-mono

标题: CodeGen2.5: Small, but mighty

作者: Erik Nijkamp *, Hiroaki Hayashi *,Yingbo Zhou,Caiming Xiong

(*等同贡献)

模型描述

CodeGen2.5 是一个用于程序合成的自回归语言模型家族。

CodeGen2 的基础上构建,该模型在 StarCoderData 上进行了1.4T令牌的训练,与StarCoderBase-15.5B相比,尺寸减少了不到一半,但结果相当竞争。

像CodeGen2一样,此模型能够填充,并支持多种编程语言。

然后我们进一步在Python上进行训练,然后是在指令数据上进行训练。我们按照以下方式发布所有模型:

  • CodeGen2.5-7B-multi:在StarCoderData上进行训练。根据Apache-2.0许可证。
  • CodeGen2.5-7B-mono (此存储库):在其他Python令牌上进行了更进一步的训练。根据Apache-2.0许可证。
  • CodeGen2.5-7B-instruct:在CodeGen2.5-7B-mono上进一步训练以获取指令数据。仅供研究使用。

如何使用

可以使用AutoModelForCausalLM功能轻松加载此模型。

先决条件

请安装OpenAI tiktoken进行标记。

pip install tiktoken==0.4.0

因果抽样(代码自动补全)

对于常规的因果抽样,只需给出上下文生成补全即可:

from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-mono", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-mono")

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的格式:

  • :第N个要掩盖的片段。实际上,在想要对其进行填充的位置使用。
  • :后缀和填充样本之间的分隔符令牌。见下文。
  • :“结束-标记”令牌,在填充结束时模型将输出。您可以使用此令牌截断输出。

例如,如果我们要对函数的以下光标位置生成填充:

def hello_world():
    |
    return name

我们通过以下方式构造模型的输入:

  • 在光标位置插入令牌
  • 添加令牌以示边界
  • 插入另一个以示要填充的遮罩。
  • 最终的片段如下所示:

    from transformers import AutoTokenizer, AutoModelForCausalLM
    tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-mono", trust_remote_code=True)
    model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-mono")
    
    
    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):])
    

    您可能想使用截断模型输出。

    评估结果

    我们在HumanEval和HumanEval-Infill上评估我们的模型。有关更多详细信息,请参阅 blog

    预期的使用和限制

    作为自回归语言模型,CodeGen2.5能够从给定的自然语言和编程语言文本中提取特征,并计算它们的可能性。然而,该模型适用于程序合成,并在这方面表现最佳,即根据英文提示生成可执行代码,其中提示应以注释字符串的形式提供。该模型还可以完成部分生成的代码。

    归属和其他要求

    模型的预训练数据集仅针对允许的许可证进行了筛选。但是,该模型可以从数据集中逐字生成源代码。代码的许可证可能需要归属和/或其他特定要求,必须予以尊重。数据提供者BigCode提供了一个 search index ,可让您搜索预训练数据,确定生成的代码来自何处,并对您的代码应用正确的归属。

    BibTeX条目和引用信息

    请引用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}
    }