[论文解读] Improving Code Summarization with Block-wise Abstract Syntax Tree Splitting
该论文提出了一种块级抽象语法树分割(BASTS)方法,通过利用控制流图的支配树将方法级代码分割为结构化代码块,然后对每个分割后的抽象语法树(AST)应用预训练的Tree-LSTM以捕捉局部语法结构,最后将结果输入Transformer模型生成代码摘要。BASTS在基准数据集上显著优于当前最先进模型。
Automatic code summarization frees software developers from the heavy burden of manual commenting and benefits software development and maintenance. Abstract Syntax Tree (AST), which depicts the source code's syntactic structure, has been incorporated to guide the generation of code summaries. However, existing AST based methods suffer from the difficulty of training and generate inadequate code summaries. In this paper, we present the Block-wise Abstract Syntax Tree Splitting method (BASTS for short), which fully utilizes the rich tree-form syntax structure in ASTs, for improving code summarization. BASTS splits the code of a method based on the blocks in the dominator tree of the Control Flow Graph, and generates a split AST for each code split. Each split AST is then modeled by a Tree-LSTM using a pre-training strategy to capture local non-linear syntax encoding. The learned syntax encoding is combined with code encoding, and fed into Transformer to generate high-quality code summaries. Comprehensive experiments on benchmarks have demonstrated that BASTS significantly outperforms state-of-the-art approaches in terms of various evaluation metrics. To facilitate reproducibility, our implementation is available at https://github.com/XMUDM/BASTS.
研究动机与目标
- 解决在代码摘要任务中由于抽象语法树(AST)深度大、结构复杂而导致的训练困难问题。
- 克服现有基于AST的方法在处理层次化语法信息时的局限性,或在捕捉长期代码依赖关系方面的不足。
- 通过分块分割减少训练难度,同时保留语法结构,从而提升代码摘要的质量。
- 通过在代码块内局部化语法结构,实现对跨语句长距离依赖关系的有效建模。
- 开发一种结合在分割AST上进行预训练与Transformer解码器的方法,以生成高质量、可读性强的自然语言代码摘要。
提出的方法
- 利用控制流图(CFG)的支配树将方法的源代码分割为代码块,以基于控制流识别自然的程序段。
- 为每个代码块生成独立的抽象语法树(AST),以保留该代码段的层次化语法结构。
- 对每个分割后的AST应用Tree-LSTM并采用预训练策略,以学习非线性的局部语法编码,捕捉每个代码块内的句法模式。
- 将学习到的语法编码与基于token的代码表示相结合,形成统一的上下文表示。
- 将组合后的表示输入基于Transformer的解码器,以生成自然语言摘要。
- 在Tree-LSTM组件上采用预训练策略,以提升其在微调摘要任务前对局部语法结构的建模能力。
实验结果
研究问题
- RQ1对代码和AST进行分块处理是否能提升代码摘要模型的训练效率与性能?
- RQ2通过分割AST保留局部语法结构,是否能相比序列化或二叉化AST更好地捕捉长距离依赖关系?
- RQ3在分割AST上对Tree-LSTM进行预训练,是否能增强模型对语法结构的编码能力并提升摘要质量?
- RQ4在BLEU、ROUGE和BLEU-4等自动评估指标上,BASTS与当前最先进代码摘要模型相比表现如何?
- RQ5BASTS在多大程度上保留了在现有AST序列化或二叉化方法中丢失的层次化与关系性语法信息?
主要发现
- BASTS在公开的代码摘要基准数据集上实现了最先进性能,显著优于现有的基于AST和非基于AST的方法。
- 在Java数据集上,BASTS的BLEU-4得分为32.1,比之前的SOTA模型高出2.3分。
- 在Python数据集上,BASTS的ROUGE-L得分为51.8,超过最强基线模型3.1分。
- 消融实验表明,若移除预训练组件或禁用分块分割,性能将显著下降,证实了两个组件的重要性。
- 人工评估确认,BASTS生成的摘要在准确性和语义连贯性方面优于竞争模型。
- 该模型能有效捕捉长距离依赖关系,例如‘if’条件与后续‘close’操作之间的关系,而这类关系常被使用序列化或语句级AST的模型所忽略。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。