How Does Code Pretraining Affect Language Model Task Performance?
作者: Jackson Petty, Sjoerd van Steenkiste, Tal Linzen
分类: cs.CL, cs.LG
发布日期: 2024-09-06 (更新: 2025-02-25)
期刊: Transactions on Machine Learning Research (January 2025)
💡 一句话要点
研究代码预训练对语言模型任务性能的影响,揭示代码比例与任务表现的关联。
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码预训练 语言模型 任务性能 组合性 预训练数据 自然语言处理 因果关系
📋 核心要点
- 现有研究缺乏对代码预训练与语言模型在不同任务上表现之间因果关系的深入分析。
- 本文通过控制预训练数据中自然语言和代码的比例,研究其对模型性能的影响。
- 实验表明,代码比例影响模型在组合性、数学、语言结构和现实世界知识等任务上的表现。
📝 摘要(中文)
大型语言模型越来越多地在包含自然语言和非语言数据(如源代码)的语料库上进行训练。除了辅助编程相关任务外,有传闻证据表明,在预训练语料库中包含代码可能会提高其他不相关任务的性能。然而,到目前为止,还没有工作能够通过控制语言和代码数据之间的关系来建立因果联系。本文旨在填补这一空白。我们通过两种不同的设置,在交错自然语言和代码的数据集上预训练语言模型:加性设置,其中预训练期间看到的数据总量保持不变;竞争性设置,其中语言数据的量保持不变。我们研究了预训练混合比例如何影响(a)BigBench 基准测试中包含的各种任务的性能,以及(b)组合性,通过语义解析和句法转换的泛化准确率来衡量。我们发现,在较高比例的代码上进行预训练可以提高涉及结构化输出(如语义解析)和数学的组合任务的性能。相反,增加代码混合比例可能会损害其他任务的性能,包括需要对语言结构(如句法或形态)敏感的任务,以及衡量现实世界知识的任务。
🔬 方法详解
问题定义:现有的大型语言模型通常在包含自然语言和代码的混合语料库上进行预训练。虽然经验表明代码预训练可能提升某些任务的性能,但缺乏系统性的研究来量化代码比例对不同类型任务的影响,以及建立明确的因果关系。现有方法无法有效区分代码预训练带来的增益,以及可能造成的负面影响。
核心思路:本文的核心思路是通过控制预训练数据中代码和自然语言的比例,来研究其对下游任务性能的影响。通过构建不同的预训练数据集,并采用加性和竞争性两种设置,来分析代码比例对模型在不同任务上的表现。
技术框架:本文采用预训练-微调的范式。首先,在包含不同比例代码和自然语言的混合数据集上预训练语言模型。然后,在BigBench基准测试和组合性测试任务上对预训练模型进行微调。通过比较不同预训练模型的性能,来评估代码比例的影响。主要模块包括:数据构建模块(生成不同代码比例的预训练数据集),预训练模块(训练语言模型),微调模块(在下游任务上微调模型),评估模块(评估模型性能)。
关键创新:本文的关键创新在于系统性地研究了代码预训练对语言模型在不同任务上的影响,并建立了代码比例与任务性能之间的因果关系。通过加性和竞争性两种设置,更全面地分析了代码比例的影响。此外,本文还关注了组合性这一重要的语言能力,并设计了相应的评估任务。
关键设计:本文采用了两种预训练设置:加性设置,保持预训练数据总量不变,改变代码比例;竞争性设置,保持自然语言数据量不变,改变代码比例。实验中使用了标准的Transformer架构的语言模型。评估指标包括BigBench基准测试中的各项指标,以及语义解析和句法转换的泛化准确率。具体的代码比例设置和超参数设置在论文中有详细描述。
🖼️ 关键图片
📊 实验亮点
实验结果表明,增加代码预训练比例可以提高模型在组合性任务(如语义解析)和数学任务上的性能。例如,在语义解析任务上,使用更高比例的代码预训练的模型获得了显著的性能提升。然而,过高的代码比例可能会损害模型在需要对语言结构敏感的任务(如句法分析)和需要现实世界知识的任务上的性能。这些发现为优化语言模型的预训练策略提供了重要的指导。
🎯 应用场景
该研究成果可应用于指导大型语言模型的预训练数据选择,优化模型在特定任务上的性能。例如,对于需要处理结构化数据的任务(如代码生成、数据库查询),可以增加代码预训练的比例。对于需要更强语言理解能力的任务,则应适当减少代码比例。该研究有助于开发更高效、更专业的语言模型。
📄 摘要(原文)
Large language models are increasingly trained on corpora containing both natural language and non-linguistic data like source code. Aside from aiding programming-related tasks, anecdotal evidence suggests that including code in pretraining corpora may improve performance on other, unrelated tasks, yet to date no work has been able to establish a causal connection by controlling between language and code data. Here we do just this. We pretrain language models on datasets which interleave natural language and code in two different settings: additive, in which the total volume of data seen during pretraining is held constant; and competitive, in which the volume of language data is held constant. We study how the pretraining mixture affects performance on (a) a diverse collection of tasks included in the BigBench benchmark, and (b) compositionality, measured by generalization accuracy on semantic parsing and syntactic transformations. We find that pretraining on higher proportions of code improves performance on compositional tasks involving structured output (like semantic parsing), and mathematics. Conversely, increase code mixture can harm performance on other tasks, including on tasks that requires sensitivity to linguistic structure such as syntax or morphology, and tasks measuring real-world knowledge.