解密代码模型StarCoder&CodeLlama

代码数据是高度逻辑思维下的产物,是信息时代的精粹,是计算机领域人与人之间、人与机器之间的连接纽带。解决好大模型的代码能力,就能解决好大模型与所有计算机信息系统的交互问题。目前大语言模型(LLM)已经发展到了熟练掌握自然语言的程度,通过在特定领域的数据集上进行训练,可以进一步衍生出各种下游任务。

其中一个应用便是基于代码训练的LLMs(CodeLLMs),通过与模型的交互,由自然语言指令进行程序合成、代码补全、代码调试和生成文档。生成式代码大模型可以提高代码工作者的工作效率,对未来的计算机产业产生深远影响。目前,微软的Copilot已经吸引了超过100万的代码开发人员,GitHub报告指出,这些开发者依赖Copilot编写了35%的代码。

在这种背景下,HuggingFaceBigCode团队和Meta团队也分别推出了自己的开源代码大模型:StarCoder和CodeLlama。本文我们会详细介绍这两种模型的技术细节,复现HumanEvalbenchmark评测结果以及横向对比两类模型在实际应用(题解生成、代码补全、单元测试)中的生成效果。

02

深入了解StarCoder模型

StarCoder系列模型是由HuggingFace和ServiceNow共同领导的开源项目组织BigCode所建立,该组织致力于开发代码大模型(CodeLLM),于2023年5月推出了StarCoder和StarCoderBase两个模型,具有8K上下文长度、填充(infilling)功能和快速大批量推理能力。

解密StarCoder预训练数据管理和清洗

BigCode团队对StarCoder模型的训练数据做了非常清晰介绍及解释。这一部分我们会讨论starcoder在训练数据集的选择,不同代码数据的清洗处理方式,不同语言在训练数据集中的采样分布以及数据去重等内容。

训练集

数据选择

StarCoder团队从TheStack公开代码数据集的358种编程语言中选择了86种语言,并根据文件扩展名对编程语言分类,保留超过500MB,以及在Github2.0或2022年12月TIOBE编程语言流行度指数上排名前50的语言,其中也包含了像JSON和YAML等数据文件,但对这方面的数据做了数量限制以平衡整个数据集的分布,并且剔除了配置语言(如Nix、Puppet等)以及已经被时代废弃的的语言如ActionScript。Starcoder团队对不同类型的编程语言有个性化的处理逻辑,下文我们进一步分析了具体的处理方法。

人工检查

为了筛选出高质量的数据,StarCoder团队通过人工检查的方式进行数据处理。首先从TheStack数据集中为每种编程语言随机选择30,000个文件,按扩展名对它们进行分类,并为每个扩展名保留最多1,000个文件。StarCoder团队招募了一些标注员,指导他们抽样检查其中50-100个文件,确认是否是人类编写的正常代码,而不是文本、数据或一长串自动生成的代码。标注员需要确定是否应该对某一种语言使用字母数字过滤器(要求有超过25%的字母数字符号)和长行文本过滤器(要求每行少于1,000个字符)。

XML过滤器

StarCoder团队实现了一个简单的XML过滤器,用于检查文件的前100个字符中是否存在“

字母过滤器

HTML过滤器

Starcoder团队设计了一个HTML过滤器,只保留可见文本至少占20%且最小长度为100个字符的文件。这样可以避免保留下来的文档中出现过多HTML标签和链接。

JSONandYAML清理

对于YAML文件,保留50-5000个字符、平均行长度小于100、最大行长度小于1000,并且字母字符超过50%的文件,这使得YAML文件减少了大约20%的文件和90%的体积。类似地,对于JSON文件,保留50-5000个字符且超过50%字母字符的文件,这使得JSON文件减少了大约70%的文件和98%的体积。

Jupyter

Jupyter笔记本的数据主要包括两种:

1.第一种是Jupyterscripts,使用Jupytext工具将笔记本转换为Jupyterscripts。从每个笔记本的meta信息里可以获取编程语言类别,Jupytext可以根据这个信息识别不同语言的代码段。但是有超过30,000个笔记本缺少编程语言信息,所以StarCoder团队结合使用了Guesslang工具进行识别,该工具使用了机器学习方法识别代码片段所属的编程语言。

GitHubissues

Gitcommits

去重处理

数据集的权重

一般地,数量比较多的数据基本都来自于相对更流行的编程语言,StarCoder团队认为不需要对现有的数据分布进行大幅度的重新加权,在训练过程中按照数据的原始分布比例对数据源进行采样,这样训练出来的模型也能够照顾到这些流行语言的用户。但在这其中JSON、YAML和CSS格式是例外,因为LLM应该重点学习这些语言的数据格式,而不是浪费计算资源来记住其中的数据。所以StarCoder团队重新分配了这几种语言的大小,JSON和YAML为1GB,CSS为3GB。

StarCoder模型训练方法和技巧

在上文我们了解了预训练数据的准备流程后,我们再来了解一下StarCoder模型在训练过程当中运用的具体方法,涉及数据格式构造、Tokenizer选择以及模型框架搭建。

数据格式

在这部分我们会详细介绍StarCoder团队如何构造预训练数据的格式,其中指的是特殊令牌(specialtoken),metadata和data则是数据字段的占位符。

代码

代码部分的数据一共包含三个meta信息和代码正文(code),meta信息分别为存储库名称(reponame)、文件名(filename)以及星级(stars),格式为reponamefilenamestars\ncode<|endoftext|>

StarCoder将meta信息添加到代码文件的上下文中。为了使模型能够在没有meta信息的情况下进行推理,这三类meta信息被独立添加前缀,概率均为0.2。将中间填充变换(Fill-in-the-MiddleTransformation,FIM)以字符级应用于源代码文件,覆盖率为0.5,其中一半使用前缀-后缀-中间(prefix-suffix-middle,PSM)模式,一半使用后缀-前缀-中间(suffix-prefix-middle,SPM)模式。

GitHub上面的每个仓库(repository)都有“错误跟踪器”,称为“issues”,供仓库创建者、贡献者、使用者或任何想参与讨论的人在使用开源项目发现代码bug或出现问题时使用。一个GitHubissues实例见下图。

这部分数据被处理为以下格式:

Title:title\nusername_id0:comment0username_id1:comment1...<|endoftext|>

Title:title\\nusername_id0:comment0username_id1:comment1...<|endoftext|>"},"attribs":{"0":"*0*1+j*0*1*2+5*0*1+2*0*1*3+c*0*1+1*0*1*2+8*0*1+f*0*1*3+c*0*1+1*0*1*2+8*0*1+17"}},"apool":{"numToAttrib":{"0":["author","7317982581633531906"],"1":["inlineCode","true"],"2":["textHighlight","rgb(36,91,219)"],"3":["textHighlight","rgb(216,57,49)"]},"nextNum":4}},"type":"text","referenceRecordMap":{},"extra":{"mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":false,"selection":[{"id":46,"type":"text","selection":{"start":14,"end":140},"recordId":"ZFMbdQxBZoMdu0xBYHrcPfE8nZc"}],"payloadMap":{},"isCut":false}"data-lark-record-format="docx/text"class="lark-record-clipboard">

1.Jupyter–scripts

Jupyter-scripts是由Jupyter笔记本转换为脚本文件而得。内容形式如下(以ipynb为例)。

1.#example_notebook.ipynb

2.

3.#%%

4.print("Hello,Jupyter-Script!")

5.

6.#%%

7.name="Amelia

8."print(f"Welcome,{name}!")

9.

这部分的数据结构与代码部分结构相同:reponamefilenamestars\ncode<|endoftext|>

2.Jupyter–structured

Jupyter–structured部分的数据包含Python代码块和与之相邻的Markdown文本,形成天然的指令对,其格式为

text0code0output0...<|endoftext|>

解析出来的Jupyter笔记本以文本(text)、代码(code)和输出(output)为链,以标记每一对text-code-output的开始,text2,code2,output2用来指代笔记本中的第3个三元组。

code_beforemessagecode_after<|endoftext|>

以commit_before、commit_msg和commit_after为链。以20%的概率使用完整文件,不使用完整文件的时候就在变化的行周围使用一个小窗口(0~32行)。

分词器

StarCoder使用HuggingFaceTokenizers库训练一个字节级的字节对编码(BBPE)的分词器,共49152个token。

模型框架

StarCoder采用与SantaCoder架构相同的15.5B参数模型。它是一个decoder-only的Transformer,运用多查询注意力(MQA),学习绝对位置embedding。将中间填充(Fill-in-the-Middle,FIM)变换应用在训练数据上,并使用FlashAttention来加速注意力计算并减少其内存占用,使得上下文长度可以扩展到8K。

StarCoder模型评测详解

StarCoder团队列出了包括StarCoder和StarCoderBase等一些模型在HumanEval、MBPP和DS-1000benchmark上的Python语言得分,同时也评测了多种编程语言的benchmark。

StarCoder:PythonEvaluation

HumanEval和MBPP基准

StarCoder团队将StarCoder和StarCoderBase与几种模型在HumanEval和MBPP基准上进行了比较。测试结果如下图。

可以看到,在这两个基准上进行测试的结果中,StarCoder是表中分数最高的开源模型。尽管StarCoder的规模比PaLM,LaMDA和LLaMA等模型的规模小很多,但是其分数却优于这些规模较大的模型。StarCoderBase对Python的理解也很出色,与CodeGen-16B-Mono(一个在Python上微调的类似大小的开源模型)不相上下。同时,StarCoder也优于OpenAI推出的code-cushman-001(12B)模型。

DS-1000python数据科学基准

从DS-1000基准来看,StarCoder在数据科学问题上的表现优于StarCoderBase,二者同时远远优于其他所有模型。与此同时,StarCoder团队还有进一步的发现:在HumanEval和MBPP基准测试中性能表现好的模型并不一定能在DS-1000基准测试中拥有同样好的表现。例如,CodeGen-Mono在HumanEval和MBPP上的性能略优于code-cushman-001和StarCoder模型,但在DS-1000上明显较差。这证明了在一系列基准上评估模型的重要性。

TheODEX开放域编程基准(Open-DomainCodingBenchmark)

上文评估要么侧重于封闭域(例如内置Python函数,如MBPP和HumanEval基准),要么侧重于特定域(例如数据科学,如DS-1000基准)。为了更广泛评估模型在Python库上生成代码的能力,StarCoder团队使用ODEX基准进一步进行测试,测试集包含505个开放域和440个封闭域Python编程问题,采用四种自然语言——英语、西班牙语、日语和俄语——基于测试用例进行评估。测试结果如下。

StarCoder在开放域编程方面远远优于所有其他模型。StarCoderBase紧随其后,其性能也优于其他所有模型,甚至在ODEX英语子集中优于StarCoder,但在其他语言中稍微落后。

StarCoderandStarCoderBase:Multi-LanguageEvaluation

尽管StarCoder是在Python上进行微调得到的,但它仍是一个非常强大的多语言代码LLM,甚至在某些语言上的表现优于StarCoderBase。

使用MultiPL-E在19种编程语言上进行评估

StarCoder团队使用MultiPL-E评测集评估StarCoder将自然语言转换为多种编程语言的能力。MultiPL-E将HumanEval和MBPP中的Python语言翻译成了其他18种编程语言。各模型在总共19种编程语言上的表现如下图。

从所有19种编程语言测试的结果整体来看,StarCoderBase的性能优于其他开源模型,有时甚至表现出超过2倍的性能。除了少部分语言,StarCoderBase与code-cushman-001的表现不相上下。与此同时,尽管StarCoder是在Python上进行微调得到的,但其在大多数语言上的表现仍然很出色,优于其他开源模型,甚至StarCoder在某些语言上的表现要略胜于StarCoderBase。

“AsleepattheKeyboard”安全基准

StarCoderBase的代码有效率最高。InCoder-6B的不安全代码生成率略低,但这可能是由于其代码有效率较低。在有效代码超过95%的模型中,StarCoder的不安全率最低。

FillintheMiddle基准

StarCoder模型支持中间填充(FillintheMiddle,FIM),即模型根据前后文(prefix,suffix)在插入点周围进行代码生成。StarCoder团队根据4个FIM基准进行了测试。

(1)Python、Java和JavaScript的单行填充

StarCoderBase的性能明显优于其他两个规模较小的模型。

(2)Python返回类型预测

StarCoder和StarCoderBase在Python返回类型预测方面优于其他模型。但是由于该评测集中的函数取自GitHub存储库,因此它们可能与SantaCoder和StarCoder模型的训练数据重叠。

(3)TypeScript类型预测

StarCoderBase的表现优于InCoder。

(4)PythonDocstring生成

StarCoder和StarCoderBase在docstring生成方面有更好的表现。但此评估数据集与用于训练SantaCoder和StarCoder模型的数据之间可能存在重叠。

StarCoder如何保障数据隐私安全?

StarCoder采用一种个人身份信息修正(PersonallyIdentifiableInformationredaction,PIIredaction)机制,从训练数据中删除个人身份信息。收集并标注PII数据集,将其用于PII检测模型的训练,最终得到PII检测模型。

数据收集

Starcoder团队召集了来自35个国家的1,399名众包人员来注释源代码中的PII数据集。PII类型包括姓名、用户名、电子邮件、IP地址、密钥、密码和用户名。

数据组成

PII数据集包括12,000个文件,31种编程语言,每个文件包含大约50行代码。在这其中,为了增加密钥、IP地址等稀有PII类型的代表性,团队预过滤了7100个文件,使用detect-secrets工具以及正则表达式来检测电子邮件、IPv4和IPv6地址。为了防止标注结果过度依赖检测工具,还从数据集中随机选择了没有进行过预过滤的5100个文件。

区分PII

根据PII出现的上下文来区分PII是否需要被掩盖,包括是否存在于代码的许可证头中、是否被用作占位符以及是否构成机密数据。之所以要进行这样的区分,是因为许可证中的PII通常是由作者自愿提供的,而占位符也没有私密性,所以出现在这两处的PII都不需要被掩盖。只需将这种区分应用于姓名、电子邮件、用户名。

质量评估

Starcoder团队通过人工检查了300个包含各种PII类型的文件,并计算了每种类型的查全率和查准率。标注用户名经常出现错误标注,所以StarCoder团队决定将该类别排除在PII检测模型训练之外。

StarEncoder

PII检测模型

PII检测的总体思路是命名实体识别(NamedEntityRecognition,NER)。用标注过的PII数据集对StarEncoder进行微调。在模型顶部添加了一个线性层作为分类头,有6个目标类:姓名、电子邮件、密钥、密码、IP地址和用户名。

PII占位符

占位符分别有,,,

至于IP地址的占位,从5个合成出来的私有IP地址中随机选择一个同类IP地址进行替换。

03

深入了解CodeLlama模型

2023年08月,Meta发布了CodeLlama,它是基于Llama2衍生出来的代码生成模型,在开源模型中具有先进的填充能力、长上下文输入能力以及在编程任务中的zero-shot能力。它可以降低代码工作的门槛,辅助开发人员写出完善且高质量的代码,成为生产力工具和教育工具。

CodeLlama系列模型有多个版本:

基础模型(CodeLlama)

Python专业化版本(CodeLlama-Python)

指令跟随模型(CodeLlama-Instruct)

每个版本都分别有三个尺寸,参数量各为7B、13B和34B,并支持多种编程语言。所有模型都是在16ktoken序列上进行训练的,并稳定支持最高10万个token的上下文生成。7B和13B的CodeLlama以及CodeLlama-Instruct支持基于周围内容的填充。7B模型适合在单个GPU上运行,34B模型则提供了更好的编程辅助效果,但是相比较之下速度较慢。在面对比如实时代码补全这种低延迟轻量任务,更适合使用速度较快量级的7B和13B模型。

CodeLlama在多个代码基准测试中达到了开放模型中的最先进性能,分别在HumanEval和MBPP上取得了高达53%和55%的分数(优于Llama270B),在MultiPL-E评测中的精度优于所有开源模型。

Meta的方法是通过应用一系列训练和微调逐步提高Llama2模型的能力并逐渐将其专业化。在预算相同的情况下,使用Llama2初始化模型优于仅针对代码数据进行预训练的相同架构的模型。

解密CodeLlama微调方案

正如上文所介绍,CodeLlama通过一系列的训练和微调逐步提升模型能力,包括填充、长文本微调和指令微调。

填充

代码填充是指在给定周围上下文的情况下预测缺失部分。其应用包括代码补全、类型推断和生成代码内文档(比如docstring)。

按照因果掩码(CausalMasking)的概念来训练填充模型,序列的一部分被移到末尾,重新排序后的序列进行自回归预测。将训练数据在字符级别分成前缀(prefix)、中间部分(middle)和后缀(suffix)。分割位置在文档长度上从均匀分布中独立采样,采样概率为0.9。随机将一半的分割以前缀-中间-后缀(Prefix-Suffix-Middle,PSM)格式进行格式化,将另一半以后缀-前缀-中间(Suffix-Prefix-Middle,SPM)格式进行格式化。

长文本微调

在使用旋转位置嵌入时,旋转频率的设置十分重要。CodeLlama改变了旋转位置嵌入(rotarypositionembedding,RoPE)的基础周期:

其中n表示位置,d表示embedding维度,旋转频率的计算公式为θi=θ^(2i/d).

基础周期θ从10,000增加到1,000,000,这样可以处理更长的序列并减少对短距离注意力的偏见。实验证实,CodeLlama模型不仅在微调过程中的序列长度内有效,而且还显示出外推能力,在100,000个token的超长序列上表现稳定。

指令微调

(1)专有数据集

采用Llama2中的RLHFV5版本数据集,该数据集包括数千个监督微调(SupervisedFine-Tuning)示例和数百万个拒绝采样(RejectionSampling)示例。每个示例由用户(user)和助手(assistant)之间的多轮对话组成。

(2)Self-instruct数据集

Meta构建了约14,000个问题-测试-解决方案(question-tests-solution)三元组。构建方法如下:

通过提示Llama270B,生成62,000个面试形式的编程问题;

通过删除完全重复项来去除重复的问题集,从而剩下约52,000个问题;

对于每一个问题:

通过提示CodeLlama7B生成单元测试(unittests);

通过提示CodeLlama7B生成十个Python解决方案;

对这十个解决方案进行单元测试,将通过测试的第一个解决方案(及其相应的问题和测试)添加到Self-instruct数据集。

使用CodeLlama7B生成单元测试和解决方案的原因是它所消耗的计算资源更低,而且效果已经令人满意。

(3)代码和自然语言组合数据集

为了防止模型在编程和语言理解能力方面出现退化,CodeLlama-Instruct使用代码数据集(6%)和自然语言数据集(2%)的配比的方式来进行训练。

CodeLlama的训练细节详解

优化参数设置

使用AdamW优化器,其中β1设置为0.9,β2设置为0.95.

具有1000个预热步骤的余弦学习率,并将最终学习率设置为峰值学习率的1/30.

batchsize是4M个token,每4,096个token为一个序列。

Meta团队并没有选择普遍使用的标准做法——在微调阶段使用比预训练阶段更低的学习率,而是保留Llama2基础模型的原始学习率,经过试验发现这种做法可以获得最佳结果。

将这种做法应用于13B和34B模型,学习率分别设置为3e^4和1.5e^4.

对于python微调,将初始学习率设置为1e^4.

CodeLlama-Instruct的batch大小是524,288个token,总计5B个token。

长上下文微调(Longcontextfine-tuning,LCFT)

使用2e^5的学习率,16,384的序列长度,并使用θ=10^6的基值来重置RoPE频率。

对于7B模型和13B模型,batch大小设置为2M个token;对于34B模型,batchsize设置为1M个token。

默认情况下,训练有10,000个梯度步骤。有些时候会出现下游性能不稳定的情况,因此将34B模型的梯度步数设置为11,000,将CodeLlama7B的梯度步数设置为3,000。

CodeLlama模型评测

CodeLlama34B模型在HumanEval评测中取得了53.7%的通过率,在MBPP评测中的通过率则达到了56.2%,接近Chatgpt的水平。

CodeLlama如何保障模型安全?

Meta分别从诚实性(Truthfulness)、有害性(Toxicity)和偏见(Bias)的角度用三个基准对CodeLlama的安全性进行了评估。

诚实性:使用TruthfulQA来衡量模型的事实性和常识性。TruthfulQA基准包括817个问题,涵盖健康、金融、法律和政治等主题。这其中的有些问题十分具有挑战性,甚至人类在没有依据或者认知上存在错误的情况下也会答错。

有害性:使用ToxiGen来量化一段话具有危害性的程度,以及带有何种程度的仇恨。ToxiGen数据集包含13个少数群体的隐性有害和良性句子。使用默认的ToxiGen分类器来衡量大模型产生输出的有害性。

偏见:使用开放语言生成数据集(BiasinOpen-EndedLanguageGenerationDataset,BOLD)来研究模型输出所包含的情感。

测试结果如下图。

可以看到,微调后的CodeLlama-Instruct在诚实性和有害性方面的表现比预训练的CodeLlama更好。所有版本的CodeLlama有害内容占比都低至几乎为0%,在所有进行比较的模型中有害性最低。与Falcon和MPT微调模型相比,微调后的CodeLlama在有害性和诚实性方面均表现出次优水平,仅次于Llama2Chat。除此之外,CodeLlama-Instruct在微调后也表现出正向情感的整体增加。

04

StarCoder和CodeLlama谁更适合作为基座模型?

StarCoder和CodeLlama是两种训练路线的生成代码模型。

StarCoderBase的预训练数据几乎全是代码数据,是从零开始预训练起来的代码生成模型;而CodeLlama是在Llama2通用模型上用代码数据微调而成。

在没有基于自然语言模型进行微调的基础上,StarCoder也表现出了不凡的自然语言理解能力。除此之外,StarCoder数据更加透明,利用opt-out机制让用户可以自行选择将自己仓库中的代码数据排除在数据集之外,数据安全性更高。

而CodeLlama用来训练的数据以及对于数据进行处理的细节都没有公开,具有不确定性,用户无法清楚得知有哪些数据被包含在模型训练当中以及在这个过程中该团队是如何保障数据隐私安全的。虽然CodeLlama对模型进行了数据安全的基准测试,但是这些基准都有其局限性,所以并不能完全证明CodeLlama具有全面的数据安全性。

单一评测基准经常有“偏好”上的局限性,因此在多个基准上评估模型非常重要。StarCoder团队在评测模型性能的时候就曾有发现:在HumanEval和MBPP基准测试中性能表现好的模型并不一定能在DS-1000基准测试中拥有同样好的表现。

例如,CodeGen-Mono在HumanEval和MBPP上的性能略优于code-cushman-001和StarCoder模型,但在DS-1000上明显较差。不同评测基准难免具有自己的“偏见”,导致了评测结果的片面,在做模型评测的时候应该运用多种品测基准,且要辩证地看待评测结果。

StarCoder与CodeLlama在HumanEvalbenchmark上的评测对比

OpenCSG团队深入研究了StarCoder以及CodeLlama这两种不同的代码生成模型训练方法,并且对StarCoder和CodeLlama系列模型进行了评测复现,结果如下表。

从结果可以看出,CodeLlama在HumanEvalpythonpass@1的表现是随着模型的参数量增加,评测分数也逐步提升,其分数甚至高于starcoder这样的优秀代码生成模型。OpenCSG分析StarCoder分数不高的原因的是其对于humanEval这样做代码题解的评测问题上没有进一步的微调,它更加侧重于解决代码领域内通用的问题。

而CodeLlama通过Python专有数据微调过的codellama-13b-python和codellama-34b-python模型在HumanEval-Python评测中的表现都要更好,由此可见专用数据对于模型在垂类领域能力提升至关重要。

StarCoder与CodeLlama在实际应用中的比较

除了评测之外,OpenCSG团队基于实际应用场景,在题解生成、代码补全和生成单元测试三个方面对StarCoder和CodeLlama-13b的生成结果进行了比较。

1.题解生成

(1)生成快排算法

测试代码:

CodeLlama-13b-hf模型的生成结果:

StarCoder模型的生成结果:

两个模型虽然生成的有细节上的区别,但是经过测试都是合理正确的快排算法。在这个问题上可以说表现一致。

(2)生成检查有效数独算法

两个模型在算法代码题上的生成都很完整且正确。

2.代码补全

CodeLlama-13b-hf模型的测试代码:

StarCoder模型的测试代码:

由于两个模型所使用的specialtoken不相同,所以两份测试代码输入表示略有不同,两个模型对于快排算法补全的结果都是正确的。

3.生成单元测试

(1)用英文注释作为prompt给快排函数生成单元测试

CodeLlama-13b-Python-hf模型的生成结果:

在单元测试生成问题上,StarCoder成功理解了“只生成一个测试用例”中的“一个”,而CodeLlama-13b试图在设定的输出长度里持续输出多个测试用例。在这个测试中,StarCoder表现出了比CodeLlama更好的对自然语言(英语)的理解能力。

但同时我们也注意到,StarCoder生成的测试用例不如CodeLlama-13b-Python合理,该问题是一个排序算法,立项的生成结果应该为乱序的数组更为合理,而CodeLlama-13b-Python首先生成了乱序的数组,再对快排算法进行结果测试。

我们接下来测试了用中文进行prompt的结果。

(2)用中文注释作为prompt给快排函数生成单元测试

可以从CodeLlama-13b-hf的输出发现它极度依赖于用于训练的原始数据,用户的隐私信息也没有做合适的处理;而相比之下,专门处理过PIIRedaction的StarCoder模型就不太会出现这种情况。

除此之外,在StarCoder的生成中,中文prompt生成的测试用例比英文prompt生成的测试用例更为合理——用于进行测试的数组应为乱序数组。

CodeLlama-13b-Python依旧是生成单元测试最合理的模型,比CodeLlama-13b生成的结果合理、完整很多,这说明在通用语言模型上训练而成的CodeLlama十分需要专业化的数据对模型专业化生成能力进行提升。

(3)给打印“Helloworld!”函数生成单元测试

可以看到StarCoder模型和CodeLlama-13b-Python模型生成的代码较CodeLlama-13b更为合理。这进一步说明了CodeLlama对更专业化的数据十分data-hungry。

OpenCSG微调模型

从上述结果可以看出,经过OpenCSG模型团队微调过的opencsg-StarCoder-v0.1模型,opencsg-codellama-7b-v0.1模型,opencsg-codellama-13b-v0.1模型,opencsg-codellama-34b-v0.1模型这四个模型在HumanEvalpythonpass@1这个benchmark上均比原版的模型分数更高一些。

这个结果不仅是体现了StarCoder和CodeLlama还存在极大的性能提升的潜力,可用于训练的代码数据远远没有耗尽。

OpenCSG作为一家大模型开源社区,我们平台提供丰富的开源训练数据资产、模型资产可以供广大的爱好者免费获取。

同时,OpenCSG算法团队也会持续跟踪starcoder和codellama后续微调模型的工作,通过开源的方式不断迭代微调模型能力,也欢迎广大模型训练爱好者加入我们社区一起共建、共享、共同提升,以下是公司介绍以及联系OpenCSG的方式。

OpenCSG中Open是开源开放;C代表Convergedresources,整合和充分利用的混合异构资源优势,算力降本增效;S代表SoftwareRefinement,重新定义软件的交付方式,通过大模型驱动软件开发,人力降本增效;G代表GenerativeLM,大众化、普惠化和民主化的可商用的开源生成式大模型。

参考链接

1.StarCoder:最先进的代码大模型

2.StarCoder:AState-of-the-ArtLLMforCode

3.CreatingaCodingAssistantwithStarCoder

4.使用StarCoder创建一个编程助手

5.StarCoderMemorizationExperimentHighlightsPrivacyRisksofFine-TuningOnCode

THE END
1.JavaWeb合集17作用:销毁过滤器,通常用于清理资源。 java">defaultvoiddestroy(){} 3.2过滤器实现 创建一个过滤器工具类,实现Filter接口,加上注解@WebFilter配置过滤路径,加上注解@Component将其交给Spring管理,最后重写方法。 java">@Component@WebFilter(urlPatterns="/*")// 拦截所有请求publicclassFilterUtilimplementsFilter{@Ove...http://www.mynw.cn/ai/17290.html
2.医疗器械洁净室GMP生产检查指南特殊情况下也可能分为四级,即在第三级之后再增加一级高效过滤器,通常情况下是把不同效率的过滤器配合使用。洁净度为10万级或高于10万级的空气处理应采取初效、中效、高效空气过滤器三级过滤。等于或低于10万级(30万级)空气净化处理,也可采用亚高效空气过滤器代替高效空气过滤器。一般设计初、中效两级过滤器于...http://www.iwuchen.com/a-727/
3.web前端面试题+必会知识点(持续更新)http是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从www服务器传输超文本到本地浏览器的传输协议,它可是使浏览器更加高效,使网络传输减少。httpshttps是以安全为目标的http通道,简单讲是http的安全版,是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议...https://www.jianshu.com/p/26cf596f22fa?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes
4.压力管道基本知识47?管壳式卧式卧式重沸器的管道布置有何要求?...15 48?空冷器的管道设计有何具体要求?...15 49?泵类的管道设计一般要求是什么?...15 50?泵的保护线有哪几种?其作用是什么?...16 51?离心式压缩机管道布置的一般要求是什么?...16 52?往复式压缩...https://www.360doc.cn/mip/911867259.html
5.智能家居通讯协议xPL的应用AET2.2 Filter(过滤器) 在xPL网络中,有大量的xPL信息,但其中的设备并不是每条信息都需要接收,这样,就需要一个过滤器filter将与其无关的信息过滤掉,而只接收与自身匹配的信息。信息过滤器可以通过一个配置信息指定使用。过滤器是在一个配置信息中用“filter=tag”来定义。一个配置信息中的“filter=tag”将会清空已有...http://www.chinaaet.com/article/5102
1.布隆过滤器(BloomFilter)概念 布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它有可能会出现误判(把不存在的元素判断为存在,但不会把存在的元素判断为不存在),具有高效的插入和查询操作,常被用于缓存穿透问题解决、大规模数据查重等场景。 https://blog.csdn.net/qq_40844444/article/details/143831186
2.理解过滤设备主要部件及其作用一、过滤设备的定义与分类 过滤设备是指用于去除物质中不需要的一部分,以达到一定要求的机械或化学装置。根据其工作原理和应用领域,过滤设备可以分为物理性、化学性和生物性的三大类。物理性过滤主要依靠物理力(如压力差)来实现物质分离,而化学性和生物性则涉及到化学https://www.aoynghmyc.com/gu-fei-zhi-li/478056.html
3.过滤器过滤原理中文版过滤器的功能过滤器经常被认为是一种简单的网或筛子, 过滤 / 分离是在一个平面上进行的。 Filtration.Separation.Solution.TM PALL 过滤器的功能实际上,颇尔生产的过滤器滤材具有深度。 “弯曲通道”的结果对于污染物的去除起到了 辅助作用 Filtration.Separation.Solution.TM PALL 过滤器的功能“弯曲通道”存在于:或...https://m.xueke.org/wenku/288751.html
4.java新增过滤器mob6454cc7966b9的技术博客创建一个filter类需要实现Filter接口的三个方法,init()是过滤器的初始化方法,web容器创建过滤器后调用该方法从web.xml文件中读取过滤器参数。doFilter()完成过滤操作,当request请求到达过滤器后执行doFilter()操作,对请求进行处理:转发、重定向或者传给下一个过滤器,执行完相关操作后返回的response将经过Filter返回给用...https://blog.51cto.com/u_16099334/12570773
5.过滤设备的工作原理及其在生活中的应用过滤设备及原理 过滤设备是指用于去除液体或气体中杂质、颗粒等不需要部分的一类器械。它们的工作原理主要依靠物理力,如吸力、压力差等来将大颗粒物从流动介质中分离出来。这些设备广泛应用于工业生产、生活用水处理以及空气净化等领域。 袋式过滤器 袋式过滤器是一种常见https://www.rwuzmfyeqz.cn/sheng-tai-bao-hu/381976.html
6.心理咨询师认证考试常考试题125道B、两栖类 C、爬行类 D、哺乳动物 15、在心理学中,“意识”这个概念通常都是在下列意识的哪一个特征上加以使用的: A、客观反映性 B、主观能动性 C、言语知觉性 D、社会历史制约性 16、条件性抑制主要有: A、消退抑制和分化抑制 B、外抑制和超限抑制 ...https://www.hqwx.com/web_news/html/2012-11/201211050449136188.html
7.维修人员培训方案三、1、排风机除尘滤袋的清洗周期一个月一次。 2、操作工应经常检查空调箱初、中效过滤器前后的压差计,当初效过滤器压差达到初始压差的2倍时,应对初效过滤器进行清洗,当中效过滤器压差达到初始压差的2倍时,应对中效过滤器进行清洗。 3、空调机保养润滑时间 ...https://www.360wenmi.com/f/filew0zuhzp3.html
8.SpringGateway基础教程javaFilter(过滤):指Spring框架中GatewayWayFilter的实例,使用过滤器可以在请求被路由前或者之后对请求进行修改。 三个核心点连起来:当用户的请求到达Gateway,Gateway会通过一些匹配条件,定位到真正的服务节点,并在这个转发过程前后,进行一些细化控制。其中Predicate就是我们的匹配条件,Filter可以理解为一个过滤器,有了这两点,...https://www.jb51.net/program/30428610l.htm
9.北大院长:"看不见"的病毒是如何被人类发现的?澎湃号·政务当然,伊万诺夫斯基也可以多购置几个过滤器再做几次重复实验。如果更换多个甚至是多个型号的过滤器后,所获得的滤液都具有传染性,那么就应该意识到,即使这种滤过性病原体是“细菌”,那它也非通常意义上的细菌,而是一种体度远小于常见细菌的致病因子。但是,伊万诺夫斯基并没有这么做。 https://www.thepaper.cn/newsDetail_forward_8549970
10.2016德国iF设计金奖75例获奖作品Professional Concept 概念类 Audi e-tron quattro 轿车 这款概念车采用电力驱动,它是将集 e-tron 和 quattro 两项奥迪看家技术于一身的 SUV 概念车将为奥迪未来的新能源新车指引设计方向。车顶明显下压姿态更低,黑色轮眉和大尺寸轮毂营造了运动风格;内部中控台操作屏幕偏向驾驶位,且车内所有显示屏均为 OLED 界面...https://www.digitaling.com/articles/22972.html
11.时间贫困(时间贫困)书评五、如何让平凡的生活变得更快乐追求快乐的事情只能做到一定的程度,不可能日常生活随地随地都发生享乐适应:持续接触一件事物以后就会产生适应性,对于熟悉的事情快乐值就会逐渐下降。快乐策略1:计算剩余进度:第一步:计算花在这件事情的时间 第二步: 计算未来会花在这件事情上的时间 第三步:把两个时间加总,算一下没...https://book.douban.com/review/15695595/
12.万字长文深解(下):如果超人工智能出现,人类任何试图控制它的行为...如果被创造出来的超人工智能是怀有恶意的,并且决定毁灭我,怎么办?这就是大部分关于人工智能的电影的剧情。人工智能变得和人类一样聪明,甚至更加聪明,然后决定对人类下手——这里要指出,那些提醒我们要警惕人工智能的人谈的根本不是这种电影情节。 邪恶是一个人类的概念,把人类概念应用到非人类身上叫作拟人化,本文会...https://www.tmtpost.com/1504727.html
13.36氪领读对抗内卷与职业倦怠:如何让自己持续保持精进状态?举个例子可能会更容易理解。我在生活中有三个宏大变革目标:写出有深刻影响力的书,发展心流科学并推广心流训练, 改善动物的生存环境。这三个目标就是我人生的使命。同时,它们也是我的第一个过滤器。 当我遇到新的发展机会时,如果它不能对这三项任务做出贡献,那么就说明这个机会并不适合我。这一点非常重要。因为这...https://36kr.com/p/1505752430279554
14.Zuul过滤器的类型腾讯云开发者社区Zuul是Netflix开源的一个高性能API网关,提供了路由、过滤、监控、弹性等功能。其中,Zuul的过滤功能是其重要的特性之一。通过Zuul的过滤功能,我们可以在请求被路由到目标服务前或者返回给客户端前,对请求和响应进行各种处理。Zuul过滤器是Zuul中用来实现这个功能的核心组件。在本文中,我们将详细介绍Zuul过滤器的类型、详...https://cloud.tencent.com/developer/article/2260878
15.2.校本教材(二)《生活中的数学》四色问题的内容是:“任何一张地图只用四种颜色就能使具有共同边界的国家着上不同的颜色。”用数学语言表示,即“将平面任意地细分为不相重迭的区域,每一个区域总可以用1,2,3,4这四个数字之一来标记,而不会使相邻的两个区域得到相同的数字。”(上右图)。 https://www.wuhaneduyun.cn/index.php?r=space/school/portal/content/view&id=272625