本翻译来自大模型翻译,如有不对的地方,敬请谅解
引言
开源社区通过开发诸如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个字符中出现"<?xml version="字符串的文件。对于HTML文件,我们考虑可见文本与HTML代码的比例。我们保留可见文本至少占代码的20%且不少于100个字符的文件。对于通常包含更多数据的JSON和YAML文件,我们只保留字符计数在50到5000个字符范围内的文件。这有效地去除了大多数数据密集型文件。通过应用这些过滤规则和近重复数据删除,我们获得了821亿代码,涵盖338种编程语言,以及185亿与代码相关的文本,如markdown和问题。支持的编程语言列表可以在附录A中找到。我们使用与DeepSeekV2相同的分词器,详见(DeepSeek-AI, 2024)。
为了从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|>
标签:代码,Coder,Barrier,Models,Intelligence,DeepSeek,2024,V2,模型
From: https://blog.csdn.net/shippingxing/article/details/139769818