大型语言模型(LLMs)通常在包括文本和代码的广泛数据集上进行预训练。尽管代码对于专注于编程任务的模型至关重要,但其在非编程应用的LLMs中也变得越来越普遍。
在最近的一项研究中,Cohere的研究人员探讨了代码数据在LLM预训练中对各种非编码任务整体性能的影响。研究人员指出:“尽管从业者一致认为代码数据对LLM性能至关重要,但关于其对非代码任务确切影响的研究仍然有限。”
研究结果证实,代码显著提升了LLM在多种非编码任务上的表现,这对现实训练应用有重要意义。
研究代码的影响
研究人员通过一系列实验评估了代码对LLM整体性能的影响。关键因素包括训练数据中代码的数量、代码引入时机、代码的质量以及模型规模。他们采用两阶段训练方法,对预训练模型进行了“继续预训练”,在固定的词元数量下,结合不同比例的文本和代码,之后进入“冷却”阶段,强调高质量数据集在最终训练阶段的重要性。
基线模型仅在文本上进行训练。其他模型则在平衡的文本和代码数据集上预训练,或在仅代码数据上预训练后再过渡到文本。他们评估了参数范围从4.7亿到28亿的模型,涉及世界知识、自然语言推理和代码性能等多个基准测试。
代码在非编码任务中的优势
实验证实,代码显著提高了LLM在非编码任务上的表现。在自然语言推理任务中,使用代码训练的模型始终优于仅文本的模型。值得注意的是,专门在代码上进行的预训练在这些基准测试中表现最佳。研究人员解释道:“这表明,从混合代码的预训练模型初始化对自然语言推理任务有积极影响。”
在世界知识任务中,使用文本和代码的平衡数据集进行预训练产生的效果最佳。研究人员建议,“在世界知识任务上实现最佳性能依赖于在初始化阶段的平衡数据混合以及在持续预训练阶段更高比例的文本。”
在生成任务中,代码只模型和平衡模型的表现均超过了文本模型,表明融入代码不仅增强了推理能力,还提升了生成质量。此外,研究人员注意到,随着模型规模的增加,加入代码的好处也随之增加,其中世界知识和代码性能的提升最为显著,自然语言推理方面的改善则相对较小。
研究员们表示:“这些结果表明,随着模型规模的扩大,自然语言任务与代码生成之间的权衡加剧。”尽管LLMs在较大规模上通常展现出新兴行为,但由于成本限制,研究人员无法测试非常大的模型,然而他们对结果适用于更大规模的模型仍持乐观态度。“鉴于我们的结果适用于从4.7亿到28亿参数的模型,我们相信这会适用于更大的模型和词元预算。”
研究还显示,将高质量的合成代码纳入预训练数据显著提高了性能,弥补了可用人类生成代码的局限。“我们的合成代码是根据问题陈述生成的,以产生经过验证的Python解决方案,”Cohere的主作者和研究学者Viraat Aryabumi表示。“这为未来潜力打开了大门,因为利用高性能教师模型对于生成有效的合成代码至关重要。”
此外,他们发现,整合代码相关数据(如GitHub的拉取请求和提交)可以增强推理能力。在冷却阶段中引入代码进一步提升了非编码任务的表现,为希望通过特定数据对模型进行微调而非从零训练的企业提供了宝贵见解。“冷却阶段在成本、数据质量和资源需求上与微调密切相关,能带来实质性提升。我们建议在整个训练过程中都包含代码,”Aryabumi强调说。“利用高质量的代码,例如内部代码库和代码相关数据,也可以在冷却阶段提升效果。”
由于Cohere专注于为企业应用开发LLMs,这些发现可能会影响未来模型和产品的部署,提供多种针对特定任务定制的不同文本和代码混合的预训练模型,企业可以利用专有数据对此类模型进行微调以实现最佳性能。“我们的发现对开发者来说非常重要,这将带来更高效的模型发布,”Aryabumi表示。“令人惊讶的是,代码如何超越编码相关任务提高性能,这也为我们开发尖端模型的方法提供了指导。”