[论文解读] Explainable AI for Pre-Trained Code Models: What Do They Learn? When They Do Not Work?
本文利用CodeBERT和GraphCodeBERT中的注意力机制,解释预训练代码模型在代码生成与转换任务中学习的内容及其失败时机。研究发现,模型在代码摘要任务中聚焦于方法签名,在代码翻译任务中关注语法结构,而在代码精炼任务中则平衡两者;性能下降与复杂输入下注意力分布不佳密切相关。
In recent years, there has been a wide interest in designing deep neural network-based models that automate downstream software engineering tasks on source code, such as code document generation, code search, and program repair. Although the main objective of these studies is to improve the effectiveness of the downstream task, many studies only attempt to employ the next best neural network model, without a proper in-depth analysis of why a particular solution works or does not, on particular tasks or scenarios. In this paper, using an example eXplainable AI (XAI) method (attention mechanism), we study two recent large language models (LLMs) for code (CodeBERT and GraphCodeBERT) on a set of software engineering downstream tasks: code document generation (CDG), code refinement (CR), and code translation (CT). Through quantitative and qualitative studies, we identify what CodeBERT and GraphCodeBERT learn (put the highest attention on, in terms of source code token types), on these tasks. We also show some of the common patterns when the model does not work as expected (performs poorly even on easy problems) and suggest recommendations that may alleviate the observed challenges.
研究动机与目标
- 理解CodeBERT和GraphCodeBERT等预训练代码模型在代码生成与转换任务中关注的标记类型。
- 通过分析注意力分布识别模型预测中的失败模式,尤其是低性能案例。
- 为提升软件工程应用中模型的鲁棒性与可解释性提供可操作的改进建议。
- 通过诊断模型做出正确或错误预测的原因,弥合高准确率与可信度之间的差距。
- 通过发布可复现的复制包支持开放科学,以促进可复现性与未来研究。
提出的方法
- 本研究采用Transformer架构的内在注意力机制作为可解释人工智能(XAI)方法,用于解释模型预测结果。
- 提取并归一化模型所有六层的注意力分数,以分析对三类标记类型(命名、结构、其他)的关注程度。
- 通过比较高性能与低性能样本(如Easy-Low与全部样本)之间的注意力分布,识别失败模式。
- 使用BLEU等定量指标评估模型性能,同时通过定性检查验证注意力模式。
- 研究评估了三个下游任务:Java和Python代码的代码文档生成(CDG)、代码精炼(CR)和代码翻译(CT)。
- 基于观察到的注意力失败现象,提出改进建议,包括使用标记类型标注、主观评估指标以及注意力分数增强。
实验结果
研究问题
- RQ1在下游任务中,CodeBERT和GraphCodeBERT在源代码标记类型上学习了什么?
- RQ2高性能与低性能预测之间的注意力分布有何差异?
- RQ3模型预测中的常见失败模式是什么?它们在注意力行为中如何体现?
- RQ4基于注意力的解释能否揭示模型在长或复杂代码样本上表现不佳的原因?
- RQ5基于注意力分析,有哪些改进建议可提升模型的可靠性与可解释性?
主要发现
- 在代码文档生成(CDG)任务中,两个模型均最关注命名标记(如方法名和参数),其中GraphCodeBERT在Python CDG任务中对命名标记的注意力达到73.68%。
- 在代码翻译(CT)任务中,模型优先关注结构标记(如语法关键字),CodeXGLUE和GraphCodeBERT分别将48.85%和49.51%的注意力分配给结构标记。
- 在代码精炼(CR)任务中,注意力分布更均衡,CodeXGLUE和GraphCodeBERT分别将56.64%和55.82%的注意力分配给命名标记,46.29%和48.35%分配给结构标记。
- 模型在长或复杂输入上失败更频繁,且这些失败在注意力分布中表现一致:对任务关键标记类型的注意力被低估。
- 从Easy-Low样本到全部样本的注意力变化显示,性能下降与对相关标记类型的注意力减少相关——例如,CodeXGLUE在CT任务中结构注意力下降了7.92%。
- GraphCodeBERT对结构元素的关注强于CodeBERT,这可能是由于其集成了代码流图,增强了对结构的感知能力。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。