【论文翻译】DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence

本翻译来自大模型翻译,如有不对的地方,敬请谅解

引言

开源社区通过开发诸如StarCoder(Li等人,2023b;Lozhkov等人,2024)、CodeLlama(Roziere等人,2023)、DeepSeek-Coder(Guo等人,2024)和Codestral(MistralAI,2024)等开源代码模型,在推进代码智能方面取得了显著进展。这些模型的性能已稳步接近闭源同类产品,为代码智能的进步做出了贡献。然而,当与像GPT4-Turbo(OpenAI,2023)、Claude 3 Opus(Anthropic,2024)和Gemini 1.5 Pro(Reid等人,2024)这样的最先进闭源模型相比时,仍然存在明显的差距。为了弥补这一差距并进一步推动开源代码模型的发展,我们引入了DeepSeek-Coder-V2系列。这些模型基于DeepSeek-V2(DeepSeek-AI,2024)的基础构建,并使用额外的6万亿个token的语料库进行了进一步预训练。

在预训练阶段,DeepSeek-Coder-V2的数据集由60%的源代码、10%的数学语料库和30%的自然语言语料库组成。源代码包括来自GitHub和CommonCrawl的1,170亿个与代码相关的token,使用的是与DeepSeekMath(Shao等人,2024)相同的流程。这个语料库与用于训练DeepSeek-Coder的代码语料库相比,从86种编程语言扩展到了338种。为了展示新代码语料库的有效性,我们使用1亿参数模型进行了消融研究,并观察到在HumanEval(从30.5%提高到37.2%)和MBPP(从44.6%提高到54.0%)基准测试中的准确率分别提高了6.7%和9.4%(Austin等人,2021a;Chen等人,2021)。对于数学语料库,我们使用相同的流程从CommonCrawl收集了2210亿个与数学相关的token,这大约是120亿DeepSeekMath语料库(Shao等人,2024)的两倍大小,而对于自然语言语料库,我们直接从DeepSeek-V2的训练语料库中进行采样。总的来说,DeepSeek-Coder-V2在10.2万亿个训练token中得到了曝光,其中4.2万亿个token来自DeepSeek V2数据集,其余6万亿个token来自DeepSeek-Coder-V2数据集。

为了适应更长的代码输入,并增强在各种编程场景中的适用性,我们把上下文长度从16K扩展到了128K个token,使我们的模型能够处理更复杂和广泛的编码任务。在对DeepSeekV2进行持续预训练后,我们发现DeepSeek-Coder-V2在编码和数学推理方面显著增强了模型的能力,同时保持了与DeepSeek-V2相当的一般语言性能。

在对齐阶段,我们首先构建了一个指令训练数据集,其中包含来自DeepSeek-Coder(Guo等人,2024)和DeepSeek-Math(Shao等人,2024)的代码和数学数据,以及来自DeepSeek-V2(DeepSeek-AI,2024)的一般指令数据。该数据集用于微调基础模型。然后,在强化学习阶段,我们采用群体相对策略优化(GRPO)算法使其行为与人类偏好对齐。偏好数据是通过编译器反馈和测试用例在编码领域收集的,并开发了一个奖励模型来指导策略模型的训练。这种方法确保了模型的响应针对编码任务的正确性和人类偏好进行了优化。为了使模型在对齐后能够支持代码补全,我们还在使用16B参数的基于模型的微调期间采用了Fill-In-Middle方法(Guo等人,2024)。


1.1. 贡献

总结来说,我们的主要贡献包括:

  • 我们引入了基于DeepSeek MoE框架的DeepSeek-Coder-V2,具有16B和236B参数,其激活参数分别仅为2.4B和21B,有效支持多样化的计算和应用需求。此外,DeepSeek-Coder-V2支持338种编程语言和最大128K个token的上下文长度。
  • 我们首次尝试开发一个开源的千亿参数代码模型,以推进代码智能领域。实验结果表明,DeepSeek-Coder-V2 236B在编码和数学任务中的性能超越了GPT4-Turbo、Claude 3 Opus和Gemini 1.5 Pro等最先进的闭源模型。
  • DeepSeek-Coder-V2模型在宽松的许可证下公开发布,允许进行研究和不受限制的商业使用。

1.2. 评估和指标摘要

  • 代码:在代码生成基准评估方面,DeepSeek-Coder-V2在所有开源模型中展现出显著的优越性,并与GPT4-Turbo、Claude 3 Opus和Gemini 1.5 Pro等领先的闭源模型表现相当。值得注意的是,我们在HumanEval上取得了90.2%的分数,在MBPP上取得了76.2%的分数(使用EvalPlus评估流程建立了新的最先进结果),并在LiveCodeBench上取得了43.4%的分数(问题来自2023年12月至2024年6月)。此外,DeepSeek-Coder-V2是首个在SWEBench上得分超过10%的开源模型。

  • 数学:DeepSeek-Coder-V2展现出强大的数学推理能力,在GSM8K等基础基准和包括MATH、AIME 2024和Math Odyssey在内的高级竞赛级基准上,与GPT-4o、Gemini 1.5 Pro和Claude 3 Opus等顶级闭源模型相媲美。值得注意的是,DeepSeek-Coder-V2在MATH基准上达到了75.7%的准确率,几乎与GPT-4o实现的最先进准确率76.6%相匹配。此外,它在2024年的AIME竞赛中的性能超越了这些闭源模型。

  • 自然语言:DeepSeek-Coder-V2保持了与DeepSeek-V2相当的一般语言性能。例如,在MMLU上,DeepSeek-Coder-V2使用OpenAI simple-eval流程达到了79.2%的准确率。在以GPT-4为评判的主观评估中,DeepSeek-Coder-V2在arena-hard上达到了65.0分,在MT-bench上达到了8.77分,在alignbench上达到了7.84分。这些分数明显优于其他特定于代码的模型,甚至与一般开源模型相当。


基准 (指标) DeepSeek-V2-Lite DeepSeek-Coder-V2-Lite DeepSeek-V2 DeepSeek-Coder-V2
# 激活参数 2.4B 2.4B 21B 21B
# 总参数 16B 16B 236B 236B
# 训练token 5.7T 10.2T 8.1T 10.2T

英语

BBH (EM) 3-shot 48.1 61.2 79.7 83.9
MMLU (Acc.) 5-shot 55.7 60.1 78.1 79.2
ARC-Easy (Acc.) 25-shot 86.1 88.9 98.1 97.4
ARC-Challenge (Acc.) 25-shot 73.4 77.4 92.3 92.8
TriviaQA (EM) 5-shot 65.2 59.5 86.7 82.3
NaturalQuestions (EM) 5-shot 35.5 30.8 53.4 47.5
AGIEval (Acc.) 0-shot 42.8 28.7 61.4 60.0

中文

CLUEWSC (EM) 5-shot 80.0 76.5 89.9 85.9
C-Eval (Acc.) 5-shot 60.1 61.6 78.0 79.4
CMMLU (Acc.) 5-shot 62.5 62.7 81.6 80.9

开放式

Arena-Hard 11.40 38.10 41.60 65.00
AlpacaEval 2.0 16.85 17.74 38.90 36.92
MT-Bench 7.37 7.81 8.97 8.77
Alignbench 6.02 6.83 7.91 7.84

请注意,表格中的“#TP”和“#AP”分别代表“# Total Parameters(总参数数)”和“# Active Parameters(激活参数数)”,而“# Shots”表示评估时使用的样本数量。其他缩写如“Acc.”代表“Accuracy(准确率)”,“EM”代表“Exact Match(精确匹配)”。

2. 数据收集

DeepSeek-Coder-V2的预训练数据主要由60%的源代码、10%的数学语料库和30%的自然语言语料库组成。由于自然语言语料库直接从DeepSeek-V2的训练数据集中采样,本节重点介绍代码和数学数据的收集、清洗和过滤过程。同时,我们通过比较分析实验进一步验证了这些数据的质量。

我们收集了2023年11月之前在GitHub上创建的公共仓库。首先,我们应用与DeepSeek-Coder (Guo et al., 2024)中使用的相同的过滤规则和近重复数据删除,以筛选出低质量和重复的源代码。为了使论文自包含,我们简要描述了过滤规则。首先,我们过滤掉平均行长度超过100个字符或最大行长度超过1000个字符的文件。此外,我们移除了字母字符少于25%的文件。除了XSLT编程语言外,我们还进一步过滤掉在前100个字符中出现"

为了从Common Crawl中收集与代码和数学相关的网页文本,我们遵循了DeepSeekMath (Shao et al., 2024)中相同的流程。具体来说,我们选择编码论坛如StackOverflow1、库站点如PyTorch文档2,以及数学网站如StackExchange3作为我们最初的种子语料库。使用这个种子语料库,我们训练了一个fastText模型 (Joulin et al., 2016)来回忆更多与编码和数学相关的网页。由于像中文这样的语言不能通过空格进行分词,我们使用了DeepSeek-V2中的Byte Pair Encoding (BPE)分词器,这显著提高了fastText的召回准确率。对于每个领域,我们计算了第一次迭代中收集的网页百分比。收集超过10%网页的领域被分类为与代码或数学相关。然后我们注释了与这些已识别领域中代码或数学相关内容相关联的URL。将链接到这些URL的未收集网页添加到种子语料库中。经过三次迭代的数据收集,我们从网页中收集了70亿与代码相关的token和221亿与数学相关的token。为了从GitHub进一步收集高质量的源代码,我们也在GitHub上应用了相同的流程,进行了两次迭代的数据收集,并收集了94亿源代码。最初的种子语料库是通过手动收集高质量的源代码构建的,例如包含详细描述的那些。最后,新的代码语料库包括来自GitHub和CommonCrawl的1170亿与代码相关的token。

为了展示新代码语料库的有效性,我们使用1亿参数模型进行了消融研究(见表1),将其与用于训练DeepSeek-Coder的语料库进行了比较。使用1T个token在新代码语料库上预训练1B模型,在HumanEval(从30.5%提高到36.0%)和MBPP(从44.6%提高到49.0%)基准上分别提高了5.5%和4.4%的准确率。进一步使用2T个token训练1B模型,HumanEval和MBPP的分数分别提高到37.2%和54.0%。因此,新代码语料库优于用于训练DeepSeek-Coder的语料库。


3. 训练策略

3.1. 训练策略

我们为DeepSeek-Coder-V2 16B使用了两种训练目标:Next-Token-Prediction(下一个词元预测)和Fill-In-Middle(FIM)(Bavarian等人,2022;Guo等人,2024;Li等人,2023b)。对于DeepSeek-Coder-V2 236B,我们仅使用Next-Token-Prediction目标。这里简要介绍FIM训练策略。我们采用FIM训练方法开发DeepSeekCoder-V2-16B,利用PSM(前缀,后缀,中间)模式。这种方法将内容重建结构化为序列:前缀,后缀和中间,如下所示:

<|fim_begin|> ????<|fim_hole|> ??? ?<|fim_end|> ??????
<|eos_token|>

这种结构作为预打包过程的一部分在文档级别上应用。FIM以0.5的比率使用,与PSM框架一致,以提高训练效率和模型性能。

3.2. 模型架构

我们的架构与DeepSeekV2 (DeepSeek-AI, 2024) 保持一致。超参数设置,16B和236B,分别对应于DeepSeek-V2-Lite和DeepSeek-V2中使用的设置。值得注意的是,在训练过程中我们遇到了不稳定性以及梯度值的尖峰,我们将其归因于指数归一化技术。为了解决这个问题,我们恢复使用了传统的归一化方法。

3.3. 训练超参数

与DeepSeek V2方法 (DeepSeek-AI, 2024) 一致,我们使用AdamW优化器 (Loshchilov和Hutter, 2019),配置为1 = 0.9, 2 = 0.95,并使用0.1的权重衰减。批量大小和学习率根据DeepSeek-V2的规格进行调整。对于学习率调度,我们采用余弦衰减策略,从2000个预热步骤开始,逐渐将学习率降低到初始值的10%。

DeepSeek-Coder-V2和DeepSeek-Coder-V2-Lite都使用相同的方法进行训练。为了保持DeepSeek-Coder-V2在自然语言理解方面的稳健能力,我们从DeepSeek-V2的中间检查点继续预训练过程。最初的中间检查点是在4.2T个token上训练的。因此,在预训练阶段,DeepSeek-Coder-V2总共接触了10.2T个高质量token。

模型 DeepSeek-Coder-V2-Lite DeepSeek-Coder-V2
# 总参数 (#TP) 16B 236B
# 激活参数 (#AP) 2.4B 21B
预训练token 4.2T+6T 4.2T+6T
LR调度器 余弦 余弦
FIM启用 启用 禁用

表 2 | DeepSeek-Coder-V2的训练设置。

3.4. 长上下文扩展

遵循DeepSeek-V2,我们使用Yarn (Peng等人,2023)将DeepSeek-Coder-V2的上下文长度扩展到128K。YARN的超参数与DeepSeek-V2相同:比例? 到40, ? 到1, 到32。我们进一步通过两个阶段继续训练模型,以增强其处理长上下文的能力。在第一阶段,我们使用32K的序列长度和1152的批量大小进行1000步训练。在第二阶段,我们再训练模型1000步,采用128K的序列长度和288序列的批量大小。


3.5. 对齐
3.5.1. 监督微调
为了构建DeepSeek-Coder-V2 Chat,我们构建了一个包含代码和数学数据的指令训练数据集。我们首先收集了20k与代码相关的指令数据和30k与数学相关的数据,这些数据来自DeepSeek-Coder和DeepSeek-Math。为了保持通用能力,我们还从DeepSeek-V2的指令数据中采样了一些数据。最后,我们使用了总共300M个token的指令数据集。在训练中,我们使用了一个余弦计划,预热步骤为100,初始学习率为5?−6。我们还使用了1M个token的批量大小,总共1B个token。

3.5.2. 强化学习
我们进一步采用强化学习技术来充分模拟DeepSeek-Coder-V2的能力,这已被证明是非常有效的。

提示
我们花费了相当的努力从各种来源收集与代码和数学相关的提示,每个代码提示都配有相应的测试用例。在筛选提示后,总共大约有40k条数据。

奖励建模
奖励模型在RL训练中扮演着至关重要的角色。在数学偏好数据方面,我们使用真实标签来获取它们。在代码偏好数据方面,尽管代码编译器本身已经可以提供0-1反馈(无论代码是否通过了所有测试用例),但一些代码提示可能只有有限数量的测试用例,并没有提供全面覆盖,因此直接使用编译器的0-1反馈可能是嘈杂和次优的。因此,我们决定在编译器提供的数据上训练一个奖励模型,并在RL训练中使用奖励模型来提供信号,这比原始编译器信号更具鲁棒性和更好的泛化能力。如图3所示,在我们的内部测试集(Leetcode和Leetcode-zh)中,使用奖励模型提供RL训练信号的表现明显优于使用原始编译器信号。因此,在所有后续实验中,我们使用奖励模型信号而不是编译器信号。

强化学习算法
我们采用Group Relative Policy Optimization (GRPO)算法作为我们的RL算法,这与DeepSeek-V2使用的相同。值得注意的是,GRPO已被证明是非常有效的,并且与PPO相比成本更低,因为没有必要维护一个额外的评论家模型。


第四部分:实验结果

在本节中,我们评估了DeepSeek-Coder-V2在三种类型的任务上的表现,包括编码、数学和一般自然语言。我们将DeepSeek-Coder-V2与以前的最先进大型语言模型进行了比较。

  • CodeLlama (Roziere等人,2023)包括一系列基于Llama2 (Touvron等人,2023)的代码语言模型,并在500到1000亿代码令牌的数据集上继续预训练。这些模型有四种大小:7B、13B、34B和70B。

  • StarCoder (Lozhkov等人,2024)是一个公开访问的模型,有15亿参数。它专门在Stack数据集 (Kocetkov等人,2022)的一个精心策划的子集上进行训练,涵盖了86种编程语言。

  • StarCoder2 (Lozhkov等人,2024)包括3B、7B和15B参数模型,在Stack2数据集 (Lozhkov等人,2024)的3.3到4.3万亿令牌上进行训练,涵盖了619种编程语言。

  • DeepSeek-Coder (Guo等人,2024)包括一系列代码语言模型,参数从10亿到33亿不等。每个模型都是从头开始在2万亿令牌上训练的,其中87%是代码,13%是中英文混合的自然语言。这些模型是在项目级代码语料库上使用16K窗口大小和额外的填空任务进行预训练的,使其支持项目级代码补全和填充。

  • Codestral (MistralAI,2024)是由Mistral开发的22B参数模型。它在一个超过80种编程语言的多样化数据集上进行训练,包括Python、Java和JavaScript等流行语言,以及像Swift和Fortran这样的更专业的语言。

  • 我们比较的通用语言模型包括Llama3 70B (Meta,2024)、GPT-4 (OpenAI,2023)、Claude 3 Opus (Anthropic,2024)和Gemini 1.5 Pro (Reid等人,2024)。虽然它们不是专门在大型代码语料库上训练的,但它们在编码方面达到了最先进的性能。

4.1. 代码生成
HumanEval和MBPP基准测试。HumanEval (Chen等人,2021) 4和MBPP (Austin等人,2021b)基准测试通常用于评估生成代码的大型语言模型(LLMs)的性能。HumanEval包含164个Python任务,这些任务通过测试用例在零样本情况下验证了代码LLMs的性能。对于MBPP,我们使用MBPP-Plus版本 (Liu等人,2023a)来评估模型。为了测试模型的多语言能力,我们将HumanEval基准问题扩展到七种额外的语言:C++、Java、PHP、TypeScript、C#、Bash、JavaScript、Swift、R、Julia、D、Rust和Racket。对于两个基准测试,我们采用了贪婪搜索策略,并使用相同的脚本和环境重新创建了基线结果,以确保公平比较。

以下是各种模型在HumanEval和MBPP+基准测试上的性能指标的详细概述。DeepSeek-Coder-V2-Instruct展示了卓越的性能,以75.3%的平均分排名第二,这一表现值得注意的是,它打破了封闭源模型通常的主导地位,成为领先的开源竞争者。它仅次于GPT-4o,后者以76.4%的平均分领先。DeepSeek-Coder-V2-Instruct在包括Java和PHP在内的各种语言上都取得了最高分,并在Python、C++、C#、TypeScript和JavaScript上表现强劲,突显了其处理多样化编码挑战的稳健性和多功能性。

此外,DeepSeek-Coder-V2-Lite-Instruct也表现出色,超过了更大的33B模型。在平均性能上有很大的优势(65.6%对61.9%),这突出了16B模型在提供竞争性结果方面的有效性,尽管其尺寸较小。这突显了模型的效率以及模型架构和训练方法的进步,使其能够超越更大的对手。

竞争性编程。为了进一步验证模型在现实世界竞争性编程问题中的能力,我们使用LiveCodeBench (Jain等人,2024)和USACO基准测试 (Shi等人,2024)来评估DeepSeek-Coder-V2的有效性。LiveCodeBench是对大型语言模型(LLMs)进行代码生成评估的细致且无污染的评估,系统地从LeetCode、AtCoder和CodeForces三个著名竞争性编程平台收集随时间变化的新挑战。由于训练数据的截止日期是2023年11月之前,我们使用了Livecodebench的子集(1201-0601)。USACO基准测试包含307个来自美国计算机奥林匹克的问题,以及每个问题的高质量单元测试、参考代码和官方分析。

以下是各种语言模型在两个基准测试上的性能。值得注意的是,DeepSeek-Coder-V2-Instruct提供了出色的表现,与大型模型中得分最高的GPT-4o并列,达到了43.4%,这将其排在第二位,仅次于以45.7%的整体表现领先的GPT-4-Turbo-0409。DeepSeek-Coder-V2-Instruct处理复杂编码挑战的印象深刻的能力,牢固地确立了它作为顶级竞争者的地位,紧随领先的GPT-4-Turbo变体之后。

4.2. 代码补全
4.2.1. 仓库级代码补全评估
我们使用RepoBench (Liu等人,2023b)来评估当前可用的开源代码模型在仓库级代码补全任务中的能力,这些模型的大小在35B以下。这个数据集是由两种流行的编程语言Python和Java的多样化真实世界、开源、许可宽松的仓库构建的。值得注意的是,RepoBench的最新版本(v1.1)的数据来自2023年10月6日至12月31日之间在GitHub上创建的仓库,而我们的预训练数据包括2023年11月之前创建的代码。为确保此数据集不在我们的预训练数据中并避免数据泄露,我们只使用2023年12月的数据。

我们的评估包括五个上下文长度级别—2k、4k、8k、12k和16k令牌—在三个设置中:跨文件首、跨文件随机和文件内。我们对所有评估中的模型使用贪婪搜索。模型被限制在每个提示下最多生成64个新令牌,并将输出中的第一行非空非注释行选为预测。通过截断多余的跨文件上下文,将提示的最大令牌长度设置为15,800。我们报告不同上下文长度级别的平均完全匹配。

以下是不同模型在RepoBench v1.1的12月子集上的性能。

尽管DeepSeek-Coder-V2-Lite-Base模型只有24亿个活跃参数,但其在Python上的代码补全能力与33B的DeepSeek-Coder-Base模型相当,在Java上与7B的DeepSeek-Coder-Base模型相当。与CodeStral相比,DeepSeek-Coder-V2-Lite-Base模型的活跃参数数量只有CodeStral的十分之一,因此在代码补全任务中的性能较低。然而,我们认为DeepSeek-Coder-V2的较小活跃参数数量使其在代码补全场景中更快。

4.2.2. 填充中间的代码补全
DeepSeek-Coder-V2-Lite采用了一种独特的方法,包括在预训练阶段使用0.5的填充中间(FIM)率。这种方法允许模型利用周围的上下文,包括前面的和后面的代码段,来填补空白,从而熟练地完成代码。这对于代码补全工具特别有利。几个开源模型,如SantaCoder (Allal等人,2023)、StarCoder (Li等人,2023b)和CodeLlama (Roziere等人,2023),也利用类似的能力,在代码生成和补全领域树立了高标准。

为了评估DeepSeek-Coder-V2模型的性能,我们对领先模型进行了比较分析。评估基于Single-Line Infilling基准测试,涵盖了由Allal等人(2023)描述的三种不同的编程语言。此次评估的主要指标是行精确匹配准确率。

以下是各种编码模型在FIM任务上的性能,涵盖三种编程语言:Python、Java和JavaScript,平均得分表明整体有效性。在比较的模型中,配置有24亿活跃参数的DeepSeek-Coder-V2-Lite-Base取得了杰出的结果。它在Python中得分80.0%,在Java中得分89.1%,在JavaScript中得分87.2%,导致平均得分最高为86.4%。这表明DeepSeek-Coder-V2-Lite-Base在处理不同编程语言的FIM任务方面的卓越有效性,与其他在评估中更大的模型实现了相当的性能。

4.3. 代码修复
为了评估模型的错误修复能力,我们使用了Defects4J 7、SWE-bench (Jimenez等人,2023)和Aider 8数据集进行测试。Defects4J是软件工程领域中广泛使用的数据集,专门设计用于评估和测试程序修复技术。它包括来自各种开源项目的现实世界软件错误集合,包括但不限于Apache Commons、JFreeChart和Closure Compiler。数据集中的每个错误都伴随着可以用来验证程序修复工具有效性的测试套件。由于Defec4J中的原始错误可能需要修改存储库中的多个文件,导致上下文较长,我们收集了238个只需要修改此基准中的一个方法的错误。

SWE-bench是一个全面基准,旨在评估大型语言模型解决来自GitHub的现实世界软件问题的性能。基准测试提供了一个代码库以及一个特定的问题,挑战语言模型生成一个补丁,有效地解决所描述的问题。这一严格的评估框架确保了语言模型理解和修复现实世界软件问题的能力得到了彻底的测试,为其在软件开发任务中的实用性和有效性提供了清晰的衡量。

Aider的代码编辑基准测试评估了LLM修改Python源文件、完成133个不同编码任务的能力。这个基准测试不仅测试了LLM的编码技能,还检查了它根据提示中的规范一致性地生成代码编辑的能力。

对于DeepSeek-Coder-V2模型,我们使用整体格式进行评估。

以下是不同语言模型在软件修复基准测试上的性能,包括Defects4J、SWE-bench和Aider。在开源模型中,DeepSeekCoder-Instruct脱颖而出,成为开源模型中的佼佼者。它在Defects4J中得分21%,在SWE-bench中得分12.7%,接近领先的封闭源模型的结果,并展示了处理较长代码序列的显著能力。值得注意的是,DeepSeek-Coder-V2-Instruct在Aider中得分最高,为73.7%,超过了所有其他列出的模型,包括封闭源的竞争对手。这一卓越的性能突出了其在自动化代码修复任务中的效率和鲁棒性,使DeepSeek-Coder-V2-Instruct成为顶级开源模型,也是封闭源替代品在该领域中的有力竞争者。

4.4. 代码理解和推理
为了评估我们的模型的代码推理能力,我们使用了CRUXEval基准测试。该基准测试包括800个Python函数,配以相应的输入输出示例。它分为两个不同的任务:CRUXEval-I,要求大型语言模型(LLM)根据给定的输入预测输出;CRUXEval-O,模型必须根据已知的输出预测输入。这种结构挑战了模型理解和推理Python代码的能力,无论是正向还是反向。表8显示了各种语言模型在CruxEval基准测试上的性能,该基准测试根据两个指标对模型进行评估:CruxEval-I-COT和CruxEval-O-COT。在开源模型中,DeepSeek-Coder-V2-Instruct显著突出。它在CruxEval-I-COT上得分70.0%,在CruxEval-O-COT上得分75.1%,展示了其在开源领域内的卓越能力。然而,与更大的封闭源模型相比,存在性能差距。这种性能差距可能在很大程度上归因于DeepSeek-Coder-V2-Instruct仅使用210亿个激活参数,这比像GPT-4o这样的更大、更先进的封闭源模型中的参数要少得多。模型复杂性的限制可能限制了其学习和解决问题的能力。

以下是不同模型在CruxEval基准测试上的性能。

4.5. 数学推理
为了评估DeepSeekCoder-V2的数学推理能力,我们使用了流行的小学基准测试GSM8K (Cobbe等人,2021),以及包括MATH (Hendrycks等人,2021)、2024年美国邀请数学考试(AIME) (MAA,2024)和数学奥德赛(Math Odyssey) (Netmind.AI,2024)在内的高级竞赛级基准测试。

以下是不同模型在数学推理上的性能。DeepSeek-Coder-V2在MATH基准测试上达到了75.7%的准确率,在数学奥德赛上达到了53.7%,与最先进的GPT-4o相当。此外,DeepSeek-Coder-V2比其他模型解决了更多的2024年AIME问题,展示了其强大的数学推理能力。

4.6. 一般自然语言
由于DeepSeek-Coder-V2是建立在DeepSeek-V2的基础上的,它继承了强大的自然语言能力,甚至在与推理相关的基准测试上超过了DeepSeek-V2。我们在标准基准测试上将DeepSeek-Coder-V2 Instruct与DeepSeek-V2 Chat进行了比较,这些基准测试涵盖了包括BigBench Hard (BBH) (Suzgun等人,2022)、MMLU (Hendrycks等人,2020)、ARC (Clark等人,2018)、TriviaQA (Joshi等人,2017)、NaturalQuestions (Kwiatkowski等人,2019)、AGIEval (Zhong等人,2023)、CLUEWSC (Xu等人,2020)、C-Eval (Huang等人,2023)和CMMLU (Li等人,2023a)在内的中英文基准测试。此外,我们还评估了模型的开放式生成能力,包括Arena-Hard (Li等人,2024)、AlpacaEval2.0 (Dubois等人,2024)、MT-Bench (Zheng等人,2023)和Alignbench (Liu等人,2023c)。评估流程和指标与DeepSeek-V2相同,其中MMLU使用OpenAI simple-eval包进行评估。

以下是DeepSeek-Coder-V2 Instruct与DeepSeek-V2 Chat的比较。

当比较16B模型时,很明显DeepSeek-Coder-V2-Lite-Instruct在BBH和Arena-Hard等基准测试中优于DeepSeek-V2-Lite-Chat。这些基准测试对模型的推理能力要求很高,DeepSeek-Coder-V2-Lite-Instruct在这方面表现出色。然而,DeepSeek-Coder-V2-Lite Instruct在像TriviaQA这样的知识密集型基准测试中落后,这主要是因为预训练期间使用的网络数据量相对较少。

对于236B模型,DeepSeek-Coder-V2 Instruct在推理基准测试中表现出更大的优势,特别是在Arena-Hard中,它包含了大量的代码、数学和推理问题。另一方面,DeepSeek-V2 Chat在MT-bench (Zheng等人,2023)、AlpacaEval 2.0 (Dubois等人,2024)和AlignBench (Liu等人,2023c)等基准测试中表现略好。这种优势可以归因于DeepSeek-V2 Chat的通用对齐阶段。

  1. 结论
    在本文中,我们介绍了DeepSeek-Coder-V2,以进一步推进代码智能领域,这是从DeepSeek-V2继续预训练,使用了来自高质量和多源语料库的6万亿令牌。通过这种持续的预训练,我们发现DeepSeek-Coder-V2显著增强了模型在编码和数学推理方面的能力,同时保持了与DeepSeek-V2相当的一般语言性能。与DeepSeek-Coder相比,DeepSeek-Coder-V2支持的编程语言数量显著增加,从86种增加到338种,并将最大上下文长度从16K扩展到128K令牌。实验结果表明,DeepSeek-Coder-V2在代码和数学特定任务上实现了与最先进的封闭源模型如GPT-4 Turbo、Claude 3 Opus和Gemini 1.5 Pro相当的性能。

尽管DeepSeek-Coder-V2在标准基准测试上取得了令人印象深刻的性能,但我们发现与当前最先进模型如GPT-4 Turbo相比,在遵循指令的能力上仍存在显著差距。这一差距导致在SWEbench等复杂场景和任务中表现不佳。因此,我们认为,代码模型不仅需要强大的编码能力,还需要出色的遵循指令的能力,以更好地处理现实世界的复杂编程场景。在未来,我们将更多地专注于提高模型的遵循指令的能力,以更好地处理现实世界的复杂编程场景,并提高开发过程的生产力。

你可能感兴趣的:(代码大模型,deepseek)