通过概念级干预提升代码补全的可解释性

《Information and Software Technology》:Improving code completion interpretability with concept-level intervention

【字体: 大 中 小 】 时间:2026年09月05日 来源:Information and Software Technology 4.6

编辑推荐:

   # 摘要 **背景:** 代码预训练模型已被广泛应用于自动代码补全任务。然而,传统的补全方法主要依赖于序列建模,往往忽略了源代码中固有的丰富语法和结构信息。 **目标:** 为解决上述局限,本研究旨在增强代码预训练模型的结构感知能力和可解释性。主要目标是开发一个框架,不仅

  

# 摘要

**背景:** 代码预训练模型已被广泛应用于自动代码补全任务。然而,传统的补全方法主要依赖于序列建模,往往忽略了源代码中固有的丰富语法和结构信息。

**目标:** 为解决上述局限,本研究旨在增强代码预训练模型的结构感知能力和可解释性。主要目标是开发一个框架,不仅能编码语法特征,还能允许开发者在概念层面对生成过程进行干预。

**方法:** 我们提出了代码概念干预(CCI),一个基于概念瓶颈模型(CBM)的框架。我们利用抽象语法树(AST)表示来构建结构化概念空间,将语法特征编码为可解释的概念。通过基于探针的分析,我们检验模型注意力与AST结构之间的对齐情况。CBM将高维潜在表示映射到该概念空间,从而在自回归生成过程中实现显式干预。这使得开发者可以手动调整结构概念激活,例如强制施加循环结构或条件块,以引导模型的输出。

**结果:** 使用CodeGen、PolyCoder和CodeBERT在标准基准上进行了全面评估。结果表明,引入结构解析和CBM将补全准确率提高了6%至8%。此外,通过主动的概念干预,在特定场景下准确率额外提高了6%至10%,总体上提高了5%至8%。值得注意的是,实证分析表明,模型对关键结构概念的注意力提升了超过10%,表明与代码预期结构语义的对齐显著改善。

**结论:** 所提出的CCI框架有效地弥合了基于深度学习的代码补全与结构化程序语义之间的鸿沟。通过将隐式潜在特征转化为显式的、可操作的结构概念,CCI不仅提高了预训练模型的预测性能,还为人在回路中的代码生成提供了透明机制。

# 引言

代码补全已成为现代软件开发的关键组成部分,通过帮助开发者生成语法正确且语义连贯的代码,显著提升了编程生产力。代码预训练模型的最新进展使系统能够从大规模代码语料库中捕获复杂的编程语法和语义模式,从而以惊人的准确率预测后续令牌或代码行[1]。这些模型不仅加速了开发周期,还提升了代码质量并降低了语法或逻辑错误的可能性。最先进的方案主要基于大型预训练模型,可大致分为两种范式:自回归生成模型(如GPT[2]、CodeGen[3]、InCoder[4])和双向上下文模型(如CodeBERT[5]、GraphCodeBERT[6])。尽管这些模型在实证上取得了成功,但由于源代码固有的结构化特性——具有严格的语法约束和层级语义关系——它们在真实场景中仍面临重大挑战。

如表1所总结,先前的方法仅在编码阶段引入结构特征。为增强结构理解,先前的研究探索了将语法和语义结构(如AST[9])通过结构感知编码器[10]和图神经网络[11]整合到模型架构中。然而,结构信息通常仅限于输入编码,仅作为辅助表示而非引导令牌生成。因此,生成阶段仍然是一个黑箱,对结构知识如何影响输出提供了有限的透明度。这种缺乏可解释性使开发者无法理解、验证或影响在复杂或深度嵌套上下文中的预测,往往导致语法无效或结构不一致的代码。现有方法还提供了有限的人为干预机制,难以纠正错误或执行编码标准。强大但不透明的生成能力与对透明、可控辅助需求之间的差距,激发了我们的研究工作。

为解决这一问题,我们提出了一个基于CBM和结构概念干预的新型代码补全框架,通过一个可解释的中间层显式建模结构知识,该层将潜在表示映射到高级编程构造的概念空间(例如,循环、条件、函数定义)。该框架包含两个主要阶段:(1)分析与编码阶段,通过AST解析和特征工程提取结构概念特征;(2)干预预测阶段,使用CBM将深层隐藏表示与概念空间对齐。这使得显式的结构语义成为可能,并支持推理过程中的干预。关键在于,集成发生在生成阶段,使结构概念能够直接约束输出,不同于先前仅限于编码阶段的方法。我们进一步设计了一个统一的CBM以增强可解释性。开发者可以通过调整概念激活进行有针对性的干预(例如,增加"循环"概念),直接引导模型朝向期望的结构结果。

我们通过基于CodeGen[3]、PolyCoder[12]和CodeBERT[5]的实验证明有效性,使用Py150[13]和JavaCorpus[14]等基准。实验包括对复杂、多层嵌套结构的细粒度分析。结果表明,概念瓶颈层将各模型的代码补全平均准确率提高了6%~18%,针对性干预在Py150上额外带来6%~10%的提升,在JavaCorpus上额外带来5%~18%的提升。较大的模型从结构引导中获益更多,特别是自回归模型,其结构连贯性显著增强。

主要贡献如下:
- 我们提出了一个基于概念瓶颈的代码补全框架,将可解释的结构概念层集成到生成管线中,实现程序结构的显式表示和概念级别的可控干预。
- 跨多个模型和编程语言(Python、Java、C++、Go)的大量实验表明,结构概念和干预一致地提高了代码补全性能和可控性。
- 对概念预测准确率、注意力-AST对齐和结构一致性的分析表明,该框架增强了模型对程序结构的理解,表明结构概念有效地在表示与程序语义之间起到了中介作用。

# 章节片段

## 代码补全

智能代码补全已成为软件开发的关键工具,从早期的基于规则和统计方法发展到深度学习模型,再到近期的代码预训练模型。早期系统主要依赖于嵌入开发环境的规则引擎和简单的n-gram语言模型,根据历史频率预测后续令牌。虽然这些方法提供了适度的效率提升,但其缺乏深层上下文和结构理解

## 基于概念特征的干预补全方法

我们提出了一个干预式代码补全框架,将概念瓶颈层与代码预训练大语言模型相结合。图2中的整体框架由两个核心阶段组成:分析与编码阶段,以及干预预测阶段。

## 研究问题

为了更好地评估我们所提出的框架,我们设计了以下三个研究问题:

**RQ1:** 通过将概念瓶颈表示与代码预训练模型相结合的干预式框架,可以在多大程度上提升代码补全性能?

**动机:** 预训练代码模型在代码补全方面优于传统方法,但往往缺乏显式的结构建模。引入概念瓶颈层提供了可解释的

## RQ1的结果

首先,我们分析基线方法的表现。我们在多个数据集上评估了传统方法(n-gram模型、检索器)在无需额外模块时的准确率;结构感知基线(Code2Seq、Tree-Transformer);以及大型语言模型(StarCoder-3B、GPT-4),如表4所总结。结构感知基线一致优于传统方法,凸显了引入结构知识的优势。我们的框架不仅增强了

## 实用性与开销分析

CBM在序列表示之上引入单个概念预测头和一个浅层任务头,相对于基础语言模型的前向传播仅产生小的常数时间开销。我们考虑两种部署策略:(a)对常见上下文的隐藏状态和概念向量进行离线蒸馏和缓存;以及(b)在线轻量推理,配合节流和超时机制。IDE集成采用分级触发器(例如,仅在结构编辑时触发),并且

## 结论与未来工作

代码预训练模型的最新进展大幅提升了代码补全性能;然而,大多数现有方法仅在输入或编码阶段集成结构信息,使生成过程在很大程度上是不透明的,难以控制。现有机制在建模和操作结构知识方面的局限性,限制了当前代码补全系统的可解释性和实用性。为解决这一局限性,我们提出了概念

# CRediT作者贡献声明

**樊康怡:** 写作——审阅与编辑,写作——原稿撰写,验证,方法论,调查,形式化分析,数据整理,概念化。

**沈宗文:** 写作——审阅与编辑,写作——原稿撰写,可视化,验证,监督,软件,资源,项目管理,方法论,调查,资金获取,形式化分析,数据整理,概念化。

**李宇宁:** 写作——审阅与编辑,写作——原稿撰写,可视化,

# 利益冲突声明

作者声明不存在已知的竞争经济利益或个人关系可能影响本文所报告的工作。

# 致谢

本研究得到国家自然科学基金资助(项目编号92582204)和江苏省第六期"333工程"领军人才团队项目资助。

**樊康怡 | 沈宗文 | 李宇宁 | 陈翔 | 庄玉林 | 葛继东 | 罗滨**

南京大学新型软件技术国家重点实验室,南京 210093,中国
相关新闻
生物通微信公众号
微信
新浪微博
  • 搜索
  • 国际
  • 国内
  • 人物
  • 产业
  • 热点
  • 科普

热点排行

    今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

    版权所有 生物通

    Copyright© eBiotrade.com, All Rights Reserved

    联系信箱:

    粤ICP备09063491号