一句话:从注意力、词嵌入探针与句法树归纳三方面分析,揭示预训练代码模型能捕捉代码句法结构。
该文针对预训练代码语言模型(如 CodeBERT、GraphCodeBERT)可解释性不足的问题,追问这些基于掩码预训练与 Transformer 的模型为何有效、能捕捉何种特征关联。作者从三个视角进行结构分析:(1)注意力分析,考察注意力权重与代码句法结构的关系;(2)词嵌入探针,检验中间表示是否保留句法信息;(3)句法树归纳,评估模型恢复代码句法树的能力。分析发现:注意力与代码句法结构高度对齐;预训练代码语言模型能在各 Transformer 层的中间表示中保留代码句法结构;模型具备归纳代码句法树的能力。这些发现表明,在预训练过程中融入代码句法结构可能有助于获得更好的代码表示,为后续研究提供了启示。
Recently, many pre-trained language models for source code have been proposed to model the context of code and serve as a basis for downstream code intelligence tasks such as code completion, code search, and code summarization. These models leverage masked pre-training and Transformer and have achieved promising results. However, currently there is still little progress regarding interpretability of existing pre-trained code models. It is not clear why these models work and what feature correlations they can capture. In this paper, we conduct a thorough structural analysis aiming to provide an interpretation of pre-trained language models for source code (e.g., CodeBERT, and GraphCodeBERT) from three distinctive perspectives: (1) attention analysis, (2) probing on the word embedding, and (3) syntax tree induction. Through comprehensive analysis, this paper reveals several insightful findings that may inspire future studies: (1) Attention aligns strongly with the syntax structure of code. (2) Pre-training language models of code can preserve the syntax structure of code in the intermediate representations of each Transformer layer. (3) The pre-trained models of code have the ability of inducing syntax trees of code. Theses findings suggest that it may be helpful to incorporate the syntax structure of code into the process of pre-training for better code representations.