昨天的我:开源LLM将在几个月后在代码生成方面击败GPT-4。现在我:其实就是今天。
昨天,Meta开放了源代码Llama,这是一个专门用于代码生成的基础模型,可以免费用于研究和商业目的。
Code Llama系列车型有三个参数版本,参数数量分别为7B、13B、34B。并且支持多种编程语言,包括Python、C++、Java、PHP、Typescript (Javascript)、C#和Bash。
Meta提供的代码Llama版本包括:
代码Llama,基本代码模型;
代码Llama-Python,Python微调版;
Codellama-instruction,自然语言指令的微调版本。
就其效果而言,不同版本的Code Llama在HumanEval和MBPP数据集上的通过率(pass@1)超过了GPT-3.5。
此外,在HumanEval数据集上,“自然”34b版本的Code Llama的pass@1接近GPT-4(62.2%对67.0%)。但是Meta并没有发布这个版本,但是通过少量高质量编码数据的训练,取得了明显的效果提升。

来源:https://ai . meta . com/research/publications/code-llama-open-foundation-models-for-code/
一天后,一些研究人员对GPT 4号提出了质疑。他们来自Phind(一个旨在为开发者构建AI搜索引擎的组织),这项研究在HumanEval的评测中以微调代码Llama-34B击败了GPT-4。
Phind的联合创始人迈克尔·罗伊岑(Michael Royzen)说:“这只是为了重现(并超越)Meta论文中“自然代码羊驼”的结果而进行的早期实验。在未来,我们将有不同的CodeLlama模型的专家组合,我认为这些模型在现实世界的工作流中具有竞争力。」

这两种模型都是开源的:

研究人员在Huggingface上发布了这两个模型,所以你可以检查一下。
phind-code llama-34B-v1:https://huggingface.co/Phind/Phind-CodeLlama-34B-v1
phind-CodeLlama-34 b-Python-v1:https://huggingface.co/Phind/Phind-CodeLlama-34B-Python-v1
接下来我们来看看这个研究是如何实现的。
微调代码美洲驼-34B击败GPT-4。
先看结果吧。本研究用Phind内部数据集对Code Llama-34B和Code Llama-34B-Python进行微调,分别得到Phind-CodeLlama-34B-v1和Phind-CodeLlama-34B-Python-v1两个模型。
新获得的两个模型在HumanEval上分别取得了67.6%和69.5%的pass@1。
作为对比,CodeLlama-34B pass@1为48.8%;CodeLlama-34B-Python pass@1为53.7%。
另一方面,GPT-4在HumanEval上的pass@1为67%(open ai在今年3月发布的GPT-4技术报告中公布的数据)。

来源:https://ai . meta . com/blog/code-llama-large-language-model-coding/

说到微调,数据集是不可或缺的。在这项研究中,Code Llama-34B和Code Llama-34B-Python在包含约80,000个高质量编程问题和解决方案的专有数据集上进行了微调。
这个数据集不使用代码完成示例,而是使用指令-答案对,与HumanEval的数据结构不同。之后,研究通过两个历元对Phind模型进行训练,样本总数约为16万个。研究人员表示,训练中没有使用LoRA技术,而是采用了局部微调。
此外,本研究还采用了DeepSpeed ZeRO 3和Flash Attention 2技术。他们在32个A100-80GB的GPU上对这些模型进行了三个小时的训练,序列长度为4096 token。
此外,研究还将OpenAI的去污染方法应用于数据集,使得模型结果更加有效。
众所周知,即使是非常强大的GPT 4号也会面临数据污染的困境。一般来说,已训练的模型可能已被训练来评估数据。
这个问题对LLM来说很难。例如,在评估模型性能的过程中,为了做出科学可信的评估,研究人员必须检查用于评估的问题是否在模型的训练数据中。如果是这样,模型就能记住这些问题,在评估模型时,它显然会在这些具体问题上表现得更好。
就好像一个人在考试前就知道考题一样。
为了解决这个问题,OpenAI在公布的GPT-4技术报告中披露了GPT-4如何评估数据污染。他们披露了量化和评估这种数据污染的策略。
具体来说,OpenAI使用子串匹配来测量评估数据集和预训练数据之间的交叉污染。通过删除所有空格和符号,仅保留字符(包括数字)来处理评估和训练数据。
对于每个评估示例,OpenAI随机选择三个50个字符的子字符串(如果少于50个字符,则使用整个示例)。如果三个样本的任何评估子串是已处理的训练样本的子串,则确定匹配。
这将产生一个被污染的例子列表,OpenAI丢弃这些例子并重新运行以获得未被污染的分数。然而,这种过滤方法有一些限制。子串匹配可能会导致假阴性(如果评估数据和训练数据之间存在细微差异)和假阳性。因此,OpenAI仅使用评估示例中的部分信息,仅使用问题、上下文或等效数据,忽略答案、响应或等效数据。在某些情况下,多选题也被排除在外。这些排除可能会导致假阳性的增加。
对于这一部分,有兴趣的读者可以参考论文了解更多。
地址:https://cdn.openai.com/papers/gpt-4.pdf.
然而,关于Phind在基准GPT-4中使用的HumanEval分数存在一些争议。有人说,GPT-4的最新评估分数已经达到85%。但Phind回复称,达到这个分数的相关研究并没有进行污染研究,无法确定GPT-4在新一轮测试中是否看到了HumanEval的测试数据。考虑到最近一些关于“GPT-4变笨”的研究,使用原始技术报告中的数据更安全。

然而,考虑到大规模模型评估的复杂性,这些评估结果是否能够反映模型的真实能力仍然是一个有争议的问题。可以下载模型亲自体验。
剧终
授权请联系本微信官方账号。
投稿或寻求报道:content@jiqizhixin.com。
微信扫码
QQ扫码
您的IP:10.8.251.137,2025-12-17 16:34:22,Processed in 0.50826 second(s).