中文

如何借助代码预训练模型获得更优嵌入?一项实证研究

软件工程 2023-11-15 v1

摘要

预训练语言模型已在自然语言处理(NLP)领域展现出强大能力。近来,借鉴NLP领域经验的代码预训练模型(PTM)也在诸多软件工程(SE)下游任务中取得了最先进的结果。这些代码PTM在预训练期间考虑了编程语言与自然语言之间的差异,并对预训练任务和输入数据作出调整。然而,SE领域的研究人员在使用这些代码PTM为SE下游分类任务生成嵌入时,仍沿袭NLP领域的习惯,例如通过特殊token为代码片段生成语义嵌入,以及以与PTM预训练相同的方式输入代码与文本信息。本文针对前述两个方面,在四个SE下游分类任务(即代码漏洞检测、代码克隆检测、即时缺陷预测和函数文档字符串不匹配检测)上,对具有三种不同架构(即仅编码器、仅解码器和编码器-解码器)的五种不同PTM(即CodeBERT、CodeT5、PLBART、CodeGPT和CodeGen)进行实证研究。实验结果表明:(1) 无论所用代码PTM的架构如何,通过特殊token获得的嵌入都不足以聚合整个代码片段的语义信息;(2) 以与PTM预训练相同的方式组合代码数据与文本数据所获得的代码嵌入质量较差,无法保证更丰富的语义信息;(3) 使用聚合所有代码token的向量表示的方法,仅解码器PTM可获得的代码嵌入语义与仅编码器和编码器-解码器PTM所得相当甚至更优。

关键词

引用

@article{arxiv.2311.08066,
  title  = {How to get better embeddings with code pre-trained models? An empirical study},
  author = {Yu Zhao and Lina Gong and Haoxiang Zhang and Yaoshen Yu and Zhiqiu Huang},
  journal= {arXiv preprint arXiv:2311.08066},
  year   = {2023}
}