Qwen2.5-Coder——专门从事代码生成、完成和数学推理任务的 LLM

1.概述

论文地址:https://arxiv.org/pdf/2409.12186
源码地址:https://github.com/qwenlm/qwen2.5-coder

Qwen2.5-Coder 是其前身 CodeQwen1.5 的重大演进,专门设计用于执行代码生成和代码修改等编程相关任务。该系列包括两个型号,参数分别为 15 亿(15 亿)和 70 亿(70 亿)。

2.算法架构

Qwen2.5-Coder 是一个专门用于代码生成的大型语言模型,它基于 "Qwen2.5 "架构,并在超过 5.5 万亿个词库的大型数据集上进行了预训练。该模型的一个核心特点是能够处理各种与编程相关的任务,如代码生成、推理和编辑。例如,HumanEval 和 MBPP 等基准测试表明,该模型的性能优于其他大规模模型,尤其是在包括 Python 在内的多种编程语言中具有很强的通用性。此外,通过引入一种名为 “**中间填充”(FIM)**的技术,该系统还能在代码部分缺失的情况下生成补语。这样就可以预测和编辑缺失的代码部分。

Qwen2.5-Coder 在逐个文件和逐个版本库的基础上进行了预训练,在处理长代码或整个版本库时工作效率很高。特别是,标记的最大处理长度扩展到 32,768 个标记,以处理整个版本库,从而可以比以前的模型处理更大的上下文。数学数据也被纳入训练中,以处理数学问题,使其在代码生成之外,也能出色地进行数学推理。

3.测试实验

实验旨在验证 Qwen2.5-Coder 的性能,并通过多个基准进行了验证。特别是使用几个关键数据集对其进行了评估,以评估代码生成、代码推理和编辑任务的准确性。

首先,代码生成的性能由 "HumanEval "和 "MBPP "等基准进行评估。HumanEval以Python编程任务为基础,提供了164个问题,每个问题都有函数签名和描述;MBPP则更加多样化,提供了974个问题和多个测试案例,以检查模型的性能。**在这些基准测试中,Qwen2.5-Coder 的准确率高于其他模型,尤其是在 7B 模型上。**例如,Qwen2.5-Coder 在 HumanEval 中的得分率达到了 61.6%,与其他类似规模的模型相比,Qwen2.5-Coder 的表现非常出色。

其次,还考察了代码补全能力。这里使用了一种称为 “中间补全”(FIM)的技术,该技术评估模型在代码缺失时补全缺失代码的能力。在这项评估中,Qwen2.5-Coder 在几种编程语言(Python、Java 和 JavaScript)中都能高精度地预测缺失部分,与其他大型模型相比也毫不逊色。

此外,还对代码推理进行了评估。在这里,"CRUXEval "基准用于测试模型能否准确预测给定代码的输出和输入。特别是在预测代码执行结果的 "输入-CoT "任务和根据输出预测代码输入的 "输出-CoT "任务中,Qwen2.5-Coder 的表现优于其他同等规模的模型。

最后,还对数学推理能力进行了评估。在此,我们使用了包含数学问题(如 MATH 和 GSM8K)的数据集来证实Qwen2.5-Coder 不仅在代码生成方面**功能强大,在解决数学问题方面也是如此:**7B 模型在 GSM8K 方面显示出了非常高的准确率,达到 83.9%,比 7B 模型有了显著提高。

这些结果表明,Qwen2.5-Coder 不仅在代码生成、补全和推理方面具有出色的能力,而且在数学问题求解方面也具有出色的能力,在各种任务中都有很高的表现。

4.图表说明

在这里插入图片描述

该图显示了 Qwen2.5-Coder 模型在不同评估基准上的性能。Qwen2.5-Coder 位于图表中央,周围是以圆圈排列的不同测试结果。每个测试将 Qwen2.5-Coder 的性能与其他型号进行比较。

具体而言,Qwen2.5-Coder 7B-Instruct 显示为蓝紫色,其他评估包括 DeepSeek-Coder 和 CodeStral 等不同模型。测量的基准包括 HumanEval、MBPP、CRUXEval、MultiPL-E 和 LiveCodeBench,每个基准都测量编程任务的各种能力。

这些数字显示了每个模型在每个基准测试中取得的分数,证明 Qwen2.5-Coder 7B-Instruct 在许多测试中都表现出色。例如,它在 HumanEval 中获得了 84.1 的高分,这表明它的整体能力出众。

在这里插入图片描述
本表显示 Qwen2.5-Coder 型号的配置。比较了同属 Qwen2.5-Coder 系列的两个型号,即 1.5B 和 7B。

  • 隐藏层的大小(Hidden Size),1.5B 模型为 1 536,7B 模型为 3 584。这个数字越大,学习到的模式就越复杂。
  • 两个模型的层数(# 层)都是 28。一般来说,层数越多,模型的表现力就越强,但同时也会增加计算复杂度。
  • 7B 模型的查询头(# 查询头)为 28 个,而 1.5B 模型为 12 个。1.5B 模型的关键值头(# KV 头)为 2 个,7B 模型为 4 个,与变压器模型的注意机制有关。
  • 机头尺寸(Head Size)为 128,两种型号相同。
  • 中间层的大小(Intermediate Size)也显示出来:1.5 B 模型为 8 960,7 B 模型为 18 944。这一差异出现在模型处理信息的过程中。
  • 1.5B 模型的 "嵌入绑定 "为 “真”,7B 模型的 "嵌入绑定 "为 “假”。这表明单词的嵌入层和输出层是否共享同一个矩阵。
  • 两个模型的词汇量(Vocabulary Size)均标准化为 151 646 个单词。
  • 两个模型用于训练的标记数(# Trained Tokens)都是 5.5 万亿个,这表明它们是在海量数据的基础上进行训练的。

在这里插入图片描述

本图显示了 Qwen2.5-Coder 模型处理的特殊标记的信息。该模型使用特殊标记使代码更容易理解。

在这里插入图片描述

该图显示了 Qwen2.5-Coder 中每个数据过滤阶段的标记数量与模型平均性能之间的关系。

首先,在代币数量的增减方面,第一阶段使用了 582 亿枚代币。另一方面,在第二阶段,代币数量减少到了 370 亿枚,第三和第四阶段又分别减少到了 147 亿枚和 118 亿枚,这表明数据已经得到了完善。

接下来,我们看看性能的变化。从第一阶段到第四阶段,模型的平均性能从 41.6 提高到 46.8。这说明,随着数据的筛选和更高质量数据的使用,模型的性能得到了提高。

在这里插入图片描述

该图显示了 Qwen 2.5 模型的开发过程,以及模型最终成型所经历的各个阶段。

首先,Qwen2.5 模型在一个大型数据集上进行预训练。这一步称为 “文件级预训练”,使用 5.2 万亿 (5.2T) 个标记。在这里,基本知识是通过学习单个代码文件获得的。

接下来是 "存储库级预训练 "阶段。在这一阶段,将使用另外 3,000 亿(3,000B)个标记来学习整个代码库中的信息。这一过程增强了理解更大、更复杂代码上下文的能力。

然后进入 "Qwen2.5-Code-Base "阶段。在这一阶段,模型将以所学知识为基础,并在代码生成能力方面变得更加复杂。

最后,在 "代码 SFT "步骤中对模型进行微调,并以 "Qwen2.5-Code-Instruct "的最终形式发布。在这一阶段,模型需要针对特定的代码任务进行灵活调整,并以实际应用为目标。

在这里插入图片描述

该图表显示了不同模型在多个评估标准上的表现。每个模型都在 "HumanEval "和 "MBPP "以及名为 "BigCodeBench "的基准测试中进行了评估。

首先,"模型 "一栏列出了所评估模型的类型。例如,有 "Qwen2.5-Coder-1.5B "和 “StarCoder2-7B”。这些模型有不同的参数大小变量。

然后,"大小 "一栏列出了模型中的参数数量,这与模型的 "智能 "或处理能力有关。例如,"3B "表示有 30 亿个参数。

还有 "HumanEval "和 “MBPP”,它们是评估编程任务生成能力的基准。HE "和 "HE+"是其具体评分标准的名称,"MBPP+ 3-shot "也是如此。

而 "BigCodeBench "则根据不同的标准进行评级,尤其是两种难度级别:"完全 "和 “困难”。

在这里插入图片描述

该图比较了 Qwen2.5-Coder 代码生成模型与其他模型的性能。每个模型都显示了其在不同编程语言中的性能。

首先,模型的 "大小 "表示模型的参数数量,例如 "1.5B "表示有 15 亿个参数。表格左侧是模型名称,右侧是每种语言(Python、C++、Java 等)的得分。分数反映了模型在相应语言中的性能。

Qwen2.5-Coder-1.5B 的表现优于其他 1B 大小的机型,平均得分为 41.1。它在 Python 和 C# 等语言上的表现尤为出色。此外,Qwen2.5-Coder-7B-Base 是得分最高的 7B 大小模型,得分高达 57.5,在各种语言中均表现出色。
在这里插入图片描述

该图显示了不同模型在 CRUXEval 中的性能,这是衡量模型在接收代码作为输入(Input-CoT)和将代码作为输出(Output-CoT)时执行推理的情况。首先,有一列显示了模型的大小,其中列出了参数范围从 1B(10 亿)到 20B(200 亿)或更多的模型。

1B+ 型号包括 StarCoder2-3B、DS-Coder-1.3B-Base 和 Qwen2.5-Coder-1.5B,其中 Qwen2.5-Coder-1.5B 表现尤为突出,分别获得了 43.8 分和 34.6 分。

Qwen2.5-Coder-7B-Base 在 6B+ 模型中表现出很高的性能,得分分别为 56.5 和 56.0。与其他模型相比,这些数字都很高。

20B+ 型号列出了更大的型号,但在本表中没有进行直接比较。

在这里插入图片描述

下表显示了不同模型在代码完成任务中的表现。具体来说,它描述了在 Python、Java 和 JavaScript 三种编程语言的 HumanEval-Infilling 任务中的评估结果。评估结果表明了模型填补代码空白的准确程度。

不同的模型大小类别,如 1B+ 和 6B+ 以及 20B+ 被分开,每个类别中都给出了模型名称、大小、每种语言的得分和平均得分:1B+ 模型包括 StarCoder2-3B、DS-Coder-1.3B-Base、1B+ 模型包括 StarCoder2-3B、DS-Coder-1.3B-Base 和 Qwen2.5-Coder-1.5B,而 6B+ 模型包括 StarCoder2-7B 和 CodeQwen1.5-7B-Base。

Qwen2.5-Coder-7B-Base 在 6B+ 模型中得分最高。它在 Java 中获得了 88.5 的高分,在其他语言中也取得了优异的成绩。

在这里插入图片描述

本表比较了不同代码生成模型在两个标准上的性能:MMLU Base 和 MMLU Redux。评估结果针对不同规模的模型。

首先,在 1B+ 模型部分,Qwen2.5-Coder-1.5B 的得分高于其他模型。该模型的 MMLU Base 得分为 53.6,Redux 得分为 50.9。这一表现优于其他 1B+ 模型。

接下来,在 6B+ 模型类别中,Qwen2.5-Coder-7B-Base 脱颖而出,在 MMLU Base 和 Redux 方面分别获得 68.0 和 66.6 的高分。这与其他 6B+ 型号相比毫不逊色。

另一方面,DS-Coder-33B-Base 作为一个 20B 以上的模型,尽管有 33B 的大容量,其结果却相对一般,分别为 39.4(Base)和 38.7(Redux)。

在这里插入图片描述

该表比较了不同模型在四个数学相关基准中的表现。具体基准是 MATH、GSM8K、MMLU STEM 和 TheoremQA,并显示了每个模型在每个基准上的准确度(得分)。

首先,让我们来看看表格顶部的 1B 型号。Qwen2.5-Coder-1.5B "优于其他 "StarCoder2-3B "和 "DS-Coder-1.3B-Base "型号。特别是,它在 "GSM8K "基准测试中取得了 65.8 的高分。

其次是 6B 范围内的模型,"Qwen2.5-Coder-7B-Base "与其他类似大小的模型相比表现出更优越的性能。特别是,它的表现优于其他模型,"GSM8K "达到 83.9,"MMLU STEM "达到 67.6。

最后,我们可以看到,与 DS-Coder-33B-Base 这个 20B 范围内的机型相比,Qwen2.5-Coder-7B-Base 在许多基准测试中都表现出了极具竞争力的性能。

在这里插入图片描述

该图显示了机器学习模型的比较。具体来说,它评估了 Qwen2.5-Coder 系列和其他模型在各种基准测试中的表现。这些基准包括 ARC-Challenge、TruthfulQA、WinoGrande 和 HellaSwag。

尽管 Qwen2.5-Coder-1.5B 的模型大小为 1.5B,但它在 "ARC-Challenge "和 "TruthfulQA "中的得分却特别高。在 "ARC-Challenge "中获得 45.2 分,在 "TruthfulQA "中获得 44.0 分。

此外,大小为 7B 的 Qwen2.5-Coder-7B-Base 也很突出。它在 ARC-Challenge 中的得分高达 60.9,在 TruthfulQA 中的得分高达 50.6,在 WinoGrande 中的得分高达 72.9,在 HellaSwag 中的得分高达 76.8。在与其他更大的 20B+ 型号(如 DS-Coder-33B-Base)的比较中,它的性能也很有竞争力。

在这里插入图片描述

此图显示了 "CodeQwen2.5-7B "模型的性能。如您所见,纵轴表示 “正确答案百分比”,横轴是表示 "上下文长度 "的米。

在此,在 10k 到 128k 不等的上下文长度范围内,对模型在某些任务中的准确性进行了评定。图中绿色表示 “正确”,红色表示 “不正确”。

总的来说,图表的所有部分都是绿色的,完全看不到红色。这表明,CodeQwen2.5-7B 在这项特定任务中的准确度很高,而且适用于各种语境长度。

在这里插入图片描述

本图表比较了不同型号在与不同代码生成相关的基准测试中的表现。具体而言,Qwen2.5-Coder 系列的性能表现突出。在表格列中,给出了模型名称和大小(模型中包含的参数数)。

HumanEval 和 MBPP 是测试代码生成能力的指标;Qwen2.5-Coder-7B-Instruct 模型在这些测试中的得分高于其他模型。具体来说,它在 HumanEval 和 MBPP,特别是在 HumanEval+ 和 MBPP+ 中的得分高于 80%,优于其他同规模的模型。

BigCodeBench 评估的是处理更复杂代码生成任务的能力。Qwen2.5-Coder-7B-Instruct 模型的表现再次优于其他 6B 级模型。

LiveCodeBench 衡量处理最新编码问题的能力。同样,Qwen2.5-Coder-7B-Instruct 在这一基准测试中表现出色,达到了 37.6% 的 Pass@1。这意味着模型在首次尝试特定任务时的成功率。

在这里插入图片描述

下表显示了不同编程语言下模型的性能。这些模型大小不一,性能也各不相同。例如,1.5B 大小的 Qwen2.5-Coder-1.5B-Instruct 在某些语言(包括 Python、Java 和 C++)上的得分要高得多。

模型分为 1B+ 组、6B+ 组和 20B+ 组。每组包含不同大小的模型,并对它们在不同语言中的表现进行比较。

Qwen2.5-Coder-7B-Instruct模型在几种语言中都显示出优异的成绩,尤其是在Python、Java和C++等主要编程语言中的准确率很高。该模型的平均得分高达 76.5 分,超过了许多其他模型,这表明该模型非常强大。

在这里插入图片描述

该图根据 McEval 指标对编程语言的性能进行了比较。具体来说,不同编程语言的各种代码模型的性能都得到了衡量,并以柱状图的形式直观地表示出来。

图中显示了每种语言不同模型的性能,特别是 Qwen2.5-Coder-7B-Chat、CodeStral-20B 和 DS-Coder-V2-Lite-Instruct 模型的比较。图表的纵轴表示性能得分,数字越大表示性能越好。

所显示的编程语言包括 Python、JavaScript、C# 和 Java 等主要语言,以及 Perl 和 Fortran 等稍为小众的语言。图例中显示了每个模型的颜色编码,因此您可以一目了然地看到每个模型在每种语言中的表现。
在这里插入图片描述

该图显示了 CRUXEval-O (CoT) 分数与模型中参数数量之间的关系。纵轴表示 CRUXEval-O (CoT) 分数,即代码推理能力等级,分数越高表示性能越好。横轴表示模型中的参数数,右侧表示模型越大。

在图的左侧,Qwen2.5-Coder 系列是性能与尺寸比最好的模型。特别是,与其他模型相比,Qwen2.5-Coder-7B-Instruct 模型虽然参数较少,但却获得了很高的分数。这表明它比其他参数较多的大型模型更有效。

蓝色背景区域是实现最高效性能/尺寸比的区域。Qwen2.5-Coder 系列就位于这一区域,因此是一种高效的模型设计。
在这里插入图片描述
本图表比较了一个模型 Qwen2.5-Coder-7B-Instruct 和另一个模型 DS-Coder-V2-Lite-Instruct 的性能。它显示了每个模型在不同基准上的表现。

表格分为两部分,上半部分显示了数学和数理任务(如 MATH 和 GSM8K)的评估得分;Qwen2.5-Coder-7B-Instruct 在几乎所有任务中得分都较高。

下部显示的是 AMC23 和 MMLU 等常识理解基准的得分。除少数项目外,Qwen2.5-Coder-7B-Instruct 在其他所有项目上的表现都更好。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/491126cbee2e4b31949cf5fce6aabad0.png

图中的表格显示了测量不同机型代码编辑能力的结果。其中使用了基准 Aider。每个模型的 "Pass@1 "和 "Pass@2 "分数表示第一次和第二次尝试成功编辑代码的百分比。

1. 关于型号和尺寸

每个模型分为 “1B+”、"6B+"和 "20B+"三个类别。这表示基于模型参数数量的规模(1B 超过 1 亿)。

与其他模型相比,Qwen2.5-Coder-1.5B-Instruct 和 Qwen2.5-Coder-7B-Instruct 的大小分别为 1.5B 和 7B。

2. 性能比较

Qwen2.5-Coder-1.5B-Instruct "的 "Pass@1 "得分 30.1,"Pass@2 "得分 33.1,与同组的 "DS-Coder-1.3B-Instruct "相比,性能有所提高。

Qwen2.5-Coder-7B-Instruct 在 Pass@1 和 Pass@2 中分别获得了 50.4 和 57.1 的高分,表现优于同类模型。

3. 特别提及

与超过 20B 的大组模型(如 CodeStral-22B 和 DS-Coder-33B-Instruct)相比,Qwen2.5-Coder-7B-Instruct 的得分更胜一筹,在参数较少的情况下表现出高效和高性能。结果表明,Qwen2.5-Coder-7B-Instruct 在参数较少的情况下性能更高。

在这里插入图片描述

该图比较了多个语言模型在 Bird 和 Spider 这两个基准测试中的表现。具体来说,它显示了 Qwen2.5-Coder-7B-Instruct 与其他模型相比的表现。

左侧列出了每款机型的名称。图表为水平条形图,显示每款机型在 "鸟 "和 "蜘蛛 "基准测试中的得分情况。

鸟 "基准采用黄色柱形图,分数从左到右依次排列。数值从 "51.1 "到 "22.0 "不等,其中 Qwen2.5-Coder-7B-Instruct 的性能最高。

在 "蜘蛛 "基准测试中,Qwen2.5-Coder-7B-Instruct 获得了 82.0 的最高分(紫色条),表现优于其他机型。

在这里插入图片描述

该图显示了 Qwen2.5-Coder 在文本到 SQL 任务中使用的提示模板,为生成 SQL 语句提供了一个框架,帮助用户了解如何使用自然语言为特定数据库创建 SQL 查询。

首先,通过 CREATE TABLE 语句定义了一个名为 "list "的表。该表有 LastName、FirstName、Grade 和 Classroom 等属性。每个属性都有一个数据类型,LastName 和 FirstName 被指定为 PRIMARY KEY。在设计时,每个学生都可以通过此键唯一标识。

接下来,表格中以三个学生为例,列出了他们的数据。例如,有一个学生姓 “CAR”,名 “MAUDE”。这样用户就能清楚地了解表格的结构和内容。

然后,提示模板会引导用户构建 SQL 查询,同时在操作中利用外部知识。问题是 “有多少学生?”,SQL 语句中的答案是 SELECT count(*) FROM list。这样就计算出了表中的学生人数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值