📖标题:To Code, or Not To Code? Exploring Impact of Code in Pre-training
🌐来源:arXiv, 2408.10914
摘要
🔸将代码包含在预训练数据混合中,即使对于不专门设计用于代码的模型,也已成为LLMs预训练中的常见做法。虽然从业者之间有轶闻式的共识,即代码数据对一般LLMs的性能起到至关重要的作用,但只有少量的工作分析了代码对非代码任务的确切影响。
🔸在这项工作中,我们系统地研究了代码数据对一般性能的影响。我们提出了一个问题:“预训练中使用的代码数据对代码生成以外的各种下游任务的影响是什么?”我们进行了广泛的消融实验,并对广泛的自然语言推理任务、世界知识任务、代码基准和LLM作为裁判的获胜率进行了评估,模型的参数大小范围从470M到2.8B。
🔸在各种设置下,我们发现一个一致的结果,即代码是超越编码任务的关键构建块,提高代码质量对所有任务的影响都是超常的。特别是,与仅使用文本预训练相比,添加代码可使自然语言推理的相对增长率高达8.2%,世界知识增长率为4.2%,生成获胜率提高6.6%,代码性能提高12倍。我们的工作表明,投资于代码质量和在预训练过程中保留代码具有积极的影响。
🛎️文章简介
🔸研究问题:预训练中代码数据对非代码任务性能的具体影响是什么?
🔸主要贡献:论文系统地研究了代码数据在预训练中的作用,并进行多个实验来评估其对非代码任务的影响。
📝重点思路
🔺相关工作
🔸预训练混合的影响:研究方向包括预训练数据的数据年龄、质量、毒性和领域的影响,以及数据过滤、去重 和修剪的影响,还有合成数据能否提高性能。
🔸代码的作用:即使不是专门为代码设计的模型,在预训练数据中包含代码常见做法,研究表明可以提高LLM在各种NLP任务上的性能,如实体链接、常识推理和数学推理。
🔺论文方案
🔸实验流程:包括持续预训练和冷却两阶段。
🔸数据准备:使用SlimPajama作为数据源,过滤掉代码文档后只保留自然语言文本,再准备了包括StarCoder在内的多个代码源,覆盖世界知识、语言推理和代码生成。
🔸消融实验:进行了一系列大规模的控制预训练实验,考虑了代码数据在训练过程中的添加时机、代码比例、模型规模、代码质量和属性等因素。
🔸模型评估:评估了高质量合成代码数据对性能的影响,特别是在自然语言推理和代码生成任务上的表现。
🔎分析总结
🔸代码数据在预训练中的冷却阶段对所有任务都有进一步的改进,特别是在自然语言推理、世界知识和代码性能上。
🔸代码数据的比例增加几乎线性地提高了代码性能,从25%增加到100%时,代码性能提升了2.6倍。
🔸高质量的合成代码数据,即使在较小比例下,也对自然语言推理和代码性能有显著提升,分别提高了9%和44.9%。
💡个人观点
论文系统地研究了预训练中代码数据对广泛下游任务的影响,特别是在非代码任务上的性能提升。
附录