中文

关于持续学习在代码预训练语言模型分布外泛化中的应用

软件工程 2024-01-05 v2 机器学习

摘要

预训练语言模型(PLMs)已成为代码深度学习的普遍技术,采用两阶段预训练与微调流程以获取代码的通用知识并专精于各类下游任务。然而,软件代码库动态变化的特性对 PLMs 的有效性与鲁棒性构成挑战。特别是,真实世界场景可能导致预训练与测试数据分布之间的显著差异,即分布偏移,致使 PLM 在下游任务上的性能下降。本文中,我们强调需将代码 PLMs 适配于分布随时间变化的软件数据,这是以往工作忽视的关键问题。本工作的动机是将 PLM 置于非平稳环境中,其中微调数据随软件演化场景随时间演进。具体而言,我们设计了一种场景,模型需从随时间包含新的、未见过的 API 的程序流中学习。我们研究了两种广泛使用的 PLM 架构,即 GPT2 解码器与 RoBERTa 编码器,在两个下游任务(API 调用与 API 使用预测)上的表现。我们证明,先前工作中最常用的微调技术不足以应对 API 的动态特性,导致已学知识的丧失,即灾难性遗忘。为解决这些问题,我们实现了五种持续学习方法,包括基于回放与基于正则化的方法。我们的发现表明,利用这些直接的方法可有效缓解两个下游任务中 PLMs 的灾难性遗忘,同时取得相当或更优的性能。

关键词

引用

@article{arxiv.2305.04106,
  title  = {On the Usage of Continual Learning for Out-of-Distribution Generalization in Pre-trained Language Models of Code},
  author = {Martin Weyssow and Xin Zhou and Kisub Kim and David Lo and Houari Sahraoui},
  journal= {arXiv preprint arXiv:2305.04106},
  year   = {2024}
}