预训练代码模型了解代码的什么知识
软件工程
2021-08-26 v1 机器学习
摘要
基于 Transformer 架构构建的预训练代码模型在预测式代码生成、代码摘要等软件工程(SE)任务中表现良好。然而,这些预训练模型的向量表示是否充分编码了源代码的特征,从而能够适用于广泛的下游任务,仍是一个悬而未决的问题。研究这一问题的一种方法是使用被称为探针的诊断任务。本文为预训练代码模型构建了四个探针任务(探测表层、语法、结构和语义信息)。我们展示了如何使用探针来识别模型在(理解)某些代码属性方面的缺陷,表征不同的模型层,并深入了解模型的样本效率。我们探测了四个在代码属性预期知识上有所不同的模型:BERT(在英语上预训练)、CodeBERT 和 CodeBERTa(在源代码和自然语言文档上预训练)以及 GraphCodeBERT(在带有数据流的源代码上预训练)。虽然 GraphCodeBERT 整体表现更为稳定,但我们发现 BERT 在某些代码任务上表现得出奇地好,这有待进一步研究。
引用
@article{arxiv.2108.11308,
title = {What do pre-trained code models know about code?},
author = {Anjan Karmakar and Romain Robbes},
journal= {arXiv preprint arXiv:2108.11308},
year = {2021}
}