Skip to main content
QUICK REVIEW

[论文解读] Deep Learning Meets Software Engineering: A Survey on Pre-Trained Models of Source Code

Changan Niu, Chuanyi Li|arXiv (Cornell University)|May 24, 2022
Software Engineering Research被引用 10
一句话总结

本综述全面概述了用于源代码的预训练模型(CodePTMs),详细介绍了其架构、预训练方法以及在18项软件工程任务中的应用。它指出了将NLP预训练模型适配到代码时的局限性,并倡导在分词、预训练任务和模型适配方面采用代码特定的设计,以提升代码理解与生成任务的性能与效率。

ABSTRACT

Recent years have seen the successful application of deep learning to software engineering (SE). In particular, the development and use of pre-trained models of source code has enabled state-of-the-art results to be achieved on a wide variety of SE tasks. This paper provides an overview of this rapidly advancing field of research and reflects on future research directions.

研究动机与目标

  • 提高AI研究人员对预训练模型在软件工程中日益增长的影响的认识。
  • 系统性地调查现有的源代码预训练模型(CodePTMs)及其在多样化SE任务中的应用。
  • 识别将通用NLP预训练方法应用于代码时的关键挑战,包括分词、结构感知以及预训练任务设计。
  • 提出未来研究方向,以改进CodePTMs,例如采用代码特定设计、联合学习代码形式与功能,以及任务特定的适配方法。
  • 倡导建立统一的评估框架,以实现在基准数据集上对CodePTMs进行公平且全面的比较。

提出的方法

  • 从2016年至2022年期间,调研185项以上关于CodePTMs的近期研究,重点关注模型架构、预训练目标以及下游任务性能。
  • 根据架构设计对CodePTMs进行分类:基于标记的(如BERT风格)、基于树的(如AST感知)以及序列到序列的(如T5风格)。
  • 分析预训练任务,如掩码语言建模(MLM)、标识符掩码(IMLM),以及代码特定目标,如克隆检测与控制流重建。
  • 在18项SE任务中评估CodePTMs,包括代码分类、缺陷检测、代码搜索、代码摘要生成以及代码生成。
  • 提出方法论改进,如代码特定的分词、结构感知的预训练,以及通过提示调优或适配器模块实现的高效适配。
  • 推荐采用统一的评估协议,包括标准化基准和定性错误分析,以提升模型的可解释性与可比性。

实验结果

研究问题

  • RQ1源代码的预训练模型与NLP对应模型在架构和预训练目标上有哪些差异?
  • RQ2将通用NLP预训练模型应用于软件工程任务时存在哪些关键局限性?
  • RQ3哪些预训练任务和架构设计在代码理解与生成任务中表现最佳?
  • RQ4如何在不重新训练所有参数的情况下,高效地微调或适配CodePTMs以应用于下游SE任务?
  • RQ5在多样化SE基准上,评估和比较CodePTMs的最有效策略是什么?

主要发现

  • 现有CodePTMs主要从代码形式(即词法标记)中学习表征,而非代码功能,限制了其语义理解能力。
  • 在某些情况下,标识符掩码(IMLM)的预训练效果劣于标准掩码语言建模(MLM),表明其对代码特定特征的设计不够优化。
  • 需要采用代码特定的分词与嵌入方法,因为标准NLP技术无法充分捕捉代码的语法与语义结构。
  • 通过提示调优或适配器模块进行模型适配,可提升效率并减少微调过程中的参数更新,是一种优于全量微调的有前景替代方案。
  • 针对特定任务类别(如理解 vs. 生成)定制的专用CodePTMs,由于与下游任务目标更契合,可优于通用模型。
  • 在全部18项SE任务上建立统一的评估框架,并采用标准化基准,对于实现公平比较并深入洞察模型优势与劣势至关重要。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。