您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。 [DeepSeek]:大型语言模型遇到编程时的编码器 - 代码智能的兴起 - 发现报告

大型语言模型遇到编程时的编码器 - 代码智能的兴起

信息技术 2025-02-06 - DeepSeek 章嘉艺
报告封面

郭大雅 *1, 朱启浩∗1,2、杨德建1, 谢振达1、启东1, 张文涛1陈官厅1、小碧1, Y. Wu 1, Y.K. Li 1、罗富力1, 熊英飞2, 梁文峰1 1DeepSeek - AI2HCST (PKU) 教育部重点实验室 ; 北京大学 SCS{zhuqh, guodaya} @ deepseek. com https: / / github. com / deepseek - ai / DeepSeek - Coder Abstract 大型语言模型的快速发展已彻底革新了软件开发中的代码智能。然而,主要依赖闭源模型限制了广泛的研究与开发。为解决这一问题,我们推出了DeepSeek-Coder系列开源代码模型,其规模从13亿到330亿不等,并从2万亿个标记中从头开始训练。这些模型预先在高质量的项目级代码语料库上进行训练,并采用16K窗口的填空任务来增强代码生成和填补。我们的广泛评估表明,DeepSeek-Coder不仅在多个基准测试中实现了开源代码模型的最佳性能,还超越了现有的闭源模型如Codex和GPT-3.5。此外,DeepSeek-Coder模型处于宽松的许可之下,允许同时进行研究和无限制的商业使用。 1. Introduction 软件开发领域因大型语言模型的迅速进步(OpenAI, 2023;Touvron et al., 2023)而得到了显著转型,这些模型带来了代码智能的新时代。这些模型有可能自动化和简化许多编码方面的工作,从错误检测到代码生成,从而提高生产力并减少人为错误的可能性。然而,该领域的重大挑战之一是在开源模型(Li et al., 2023;Nijkamp et al., 2022;Rozier et al., 2023;Wang etal., 2021)与闭源模型(Gemini Team, 2023;OpenAI, 2023)之间的性能差距。尽管巨型闭源模型非常强大,但由于其专有性质,许多研究人员和开发者仍然难以访问这些模型。 为了应对这一挑战,我们推出了DeepSeek-Coder系列。该系列包括一系列开源代码模型,规模从13亿到33亿不等,涵盖每个规模的基版本和指令版本。每个系列中的模型均从87种编程语言中提取的2万亿个标记重新训练,确保对编程语言和语法有全面的理解。此外,我们尝试在仓库级别组织预训练数据,以增强模型在仓库内部跨文件上下文中的理解能力。除了在预训练过程中使用下一个标记预测损失外,我们还引入了Fill-In-Middle(FIM)方法(Bavarian etal., 2022;Li et al., 2023)。这种方法旨在进一步提升模型的代码完成能力。为满足处理更长代码输入的要求,我们将上下文长度扩展到16K。这一调整使我们的模型能够处理更加复杂和广泛的编码任务,从而增强了其在各种编码场景中的适用性和灵活性。 我们使用多种公开的代码相关基准进行了全面的实验。研究发现,在开源模型中,DeepSeek-Coder-Base 33B 在所有基准测试中均表现出优越的性能。此外,OpenAI GPT - 3.5 TurboCoder - Instruct 33B 超越在大多数评估基准中 ,OpenAI GPT - 4显著缩小两者之间的性能差距并且采用了开源模型。令人惊讶的是,尽管参数量较少,DeepSeek-Coder-Base 7B 在与参数量大五倍的模型(如 CodeLlama-33B)相比时仍能展现出竞争力的表现(Roziere et al., 2023)。总结来说,我们的主要贡献是: • 我们引入了DeepSeek-Coder-Base和DeepSeek-Coder-Instruct,这两种先进的代码集中型大型语言模型(LLMs)。通过广泛训练于庞大的代码语料库,这些模型展示了对87种编程语言的理解能力。此外,它们还提供了多种模型规模以满足不同计算和应用需求。我们首次尝试在模型构建过程中纳入仓库级别的数据。 • 我们的模型预训练阶段。我们发现这可以显著提升跨文件代码生成的能力。• 我们的研究严格分析了FIM训练策略对代码模型预训练阶段的影响。这些全面的研究结果揭示了FIM配置的一些有趣方面,提供了宝贵的见解,极大地促进了代码预训练模型的改进和发展。• 我们对我们的代码LLM进行了广泛的评估,涵盖了多种代码相关任务的广泛基准。研究发现表明,DeepSeek-Coder-Base 在这些基准上超越了所有现有的开源代码LLM。此外, 通过使用教学数据进行细致的微调 , DeepSeek - Coder - Instruct 实现了OpenAI GPT - 3.5 Turbo更好的性能相比与代码相关的任务中的模型。 2. 数据收集 DeepSeek-Coder 的训练数据集由87%的源代码、10%的英语代码相关自然语言语料库和3%的代码无关的中文自然语言语料库组成。英语语料库来自GitHub的Markdown和StackExchange材料。1,这些数据用于增强模型对代码相关概念的理解,并提高其处理库使用和错误修复等任务的能力。与此同时,中文语料库由高质量的文章组成,旨在提高模型理解中文语言的能力。在本节中,我们将概述我们构建代码训练数据的过程。这一过程包括数据爬取、基于规则的过滤、依赖解析、仓库级别去重以及质量筛选,如图2所示。接下来,我们将逐步描述数据创建流程。 2.1. GitHub 数据抓取和过滤 我们在GitHub上收集了截至2023年2月之前创建的公共仓库,并仅保留了87种编程语言(如表1所示)。为了减少处理的数据量,我们应用了与StarCoder项目(Li等,2023)中使用的规则类似的过滤规则,初步筛选掉质量较低的代码。通过应用这些过滤规则,我们将数据总量减少了至原始大小的32.8%。为了使论文更加自包含,我们简要描述了StarCoder Data项目中使用的过滤规则: 首先,我们过滤掉平均行长度超过100字符或最大行长度超过1000字符的文件。此外,我们去除包含少于25%字母字符的文件。除了XSLT编程语言外,我们进一步过滤掉其他类型的文件。 "