news 2026/4/3 2:59:43

Code vs Serialized AST Inputs for LLM-Based CodeSummarization: An Empirical Study

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Code vs Serialized AST Inputs for LLM-Based CodeSummarization: An Empirical Study

文档核心要点提炼

1. 研究背景与问题

代码摘要(将源码生成自然语言描述)对程序理解、软件维护至关重要。传统编码器-解码器模型中,抽象语法树(AST)因能编码代码结构,显著提升摘要质量;但大语言模型(LLM)的 code summarization 方法多依赖原始代码或仅用部分AST信号(如数据/控制流边标记标识符),完整AST的潜力未被充分探索

核心研究问题(RQ):LLM微调时,序列化AST能否达到与代码序列相当或更好的方法级摘要质量?

2. 关键定义
  • 序列化AST:通过树节点遍历AST转为线性序列(LLM兼容);

  • 代码序列:无显式结构信息的tokenized源码

  • 方法级摘要:为单个函数/方法生成单句自然语言描述

3. 方法:AST(NIT)

提出AST增强与序列化方法AST(NIT),解决传统AST的两大缺陷(丢失词汇细节、结构不匹配LLM),流程分两步:

(1)AST增强
  • 词汇注入:将标识符(如变量名balance)、字面量(如0)注入终端节点,并细化节点类型(如函数定义中的identifierfunction_name,赋值中的identifiervariable);

  • 结构归一化:移除无语义的未命名节点(如逗号、括号),将操作符(如+)嵌入节点值(如binary_operator:+),减少树规模(如Listing 1的AST节点从41→27)。

(2)AST序列化:Node-Index Traversal (NIT)

通过深度优先(DFS)前序遍历将增强后的AST转为线性序列,每个节点记录为固定字段元组(用分号分隔):

  • 字段:ID(全局唯一索引)、Type(节点类型)、Value(可选,词汇内容)、Children(可选,子节点ID列表)。

  • 优势:显式编码结构(父子/嵌套关系),兼容LLM的序列处理。

4. 实验设计
  • 数据集:CodeXGLUE Python子集(清洗后:30227训练、2771验证、3097测试);

  • 模型:LLaMA-3.1-8B(4-bit量化,LoRA微调,参数高效);

  • 输入表示对比:Code(原始代码)、AST(Preorder)(未增强的前序遍历)、AST(SBT)(经典结构遍历)、AST(NIT)(本文方法);

  • 评估指标:BLEU-4(n-gram精度)、METEOR(语义匹配)、ROUGE-L(最长公共子序列)、BERTScore(语义嵌入相似度);

  • 效率指标:平均输入长度、总训练token数、训练时间、峰值内存。

5. 实验结果
(1)摘要质量:AST(NIT)与Code相当,远优于AST(Preorder)
  • Code与AST(NIT)的所有指标几乎一致(如BLEU-4:23.48 vs 23.07;BERTScore F1:0.92 vs 0.92);

  • AST(Preorder)因丢失词汇细节(如balanceidentifier0integer),性能骤降(BLEU-4仅11.75,BERTScore F1 0.89);

  • AST(SBT)与AST(NIT)质量相当,但效率更低。

(2)效率:AST(NIT)优于AST(SBT)
  • AST(NIT)比AST(SBT)平均输入长度短28.6%(470.92 vs 659.17 tokens)、训练时间少11.3%(11.81 vs 13.32小时),峰值内存相同(11.50GB);

  • 原因:AST(NIT)的紧凑元组设计避免了SBT的重复类型标记和括号嵌套。

(3)定性分析
  • 保留词汇的表示(Code、AST(NIT)、AST(SBT))生成的摘要更准确(如Listing 2的“删除临时文件” vs AST(Preorder)的“删除目录”);

  • AST(NIT)的摘要与Code的准确性和细节相当。

6. 讨论与结论
  • 核心发现:LLM微调时,序列化AST(如AST(NIT))的摘要质量与代码序列相当;且AST(NIT)比经典SBT更高效。

  • 原因解释:LLM的大规模预训练可能已内化代码的结构/语义信息,或预训练数据包含基准数据,导致AST的额外结构信号未显式提升性能。

  • 结论:AST(NIT)是一种高效的AST序列化方法,为LLM的code summarization提供了结构化的替代输入,且质量不逊于原始代码。

7. 未来工作
  • 验证AST(NIT)在其他编程语言、数据集、LLM变体上的通用性;

  • 探索AST(NIT)在语义代码聚类、软件模块化等任务中的应用;

  • 补充人类评估以 complement 自动指标。

关键贡献

  1. 提出AST(NIT):保留词汇细节、编码结构的LLM兼容AST序列化方法;

  2. 系统评估完整序列化AST作为LLM输入的效果,证明其与代码序列的等价性;

  3. 验证AST(NIT)比经典SBT更高效(更短输入、更少训练时间)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/28 23:28:46

C# 变量详解

C# 变量详解 引言 在C#编程语言中,变量是存储数据的基础。理解变量及其在C#中的作用对于成为一名优秀的程序员至关重要。本文将详细介绍C#中的变量,包括其定义、类型、作用域和生命周期等。 一、什么是变量 变量是内存中的一个位置,用于存储数据。在C#中,变量通过声明和…

作者头像 李华
网站建设 2026/4/1 23:45:42

Java毕设项目:基于springboot的工厂精密设备销售管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/17 3:42:20

论文降aigc实战:手把手教你如何利用降ai工具【建议收藏】

💡作为新世纪大学生,不用AI辅助写初稿是不可能的 !但最怕的是,在DDL之前疯狂赶出了初稿,用知网一检测,坏了!AI率78% !为了顺利毕业,必须得把AI率降下去 。 于是乎开始纯…

作者头像 李华
网站建设 2026/4/3 2:45:39

MoonBit 0.8 版本正式发布

MoonBit 0.8.0发布 我们很高兴正式发布 MoonBit 0.8.0。MoonBit是一门易读 、高效,可扩展和 AI Agent 友好的通用型编程 语言。这是 MoonBit 迈向稳定、可用于生产环境的重要里程碑版本。 这次发布并非一系列零散改动的简单集合。MoonBit 0.8 标志着项目从实验性语…

作者头像 李华
网站建设 2026/3/30 18:22:29

Redis 简介

Redis 简介 概述 Redis(Remote Dictionary Server)是一款开源的高性能键值存储数据库,由意大利工程师Salvatore Sanfilippo于2009年发布。Redis以其高性能、支持多种数据结构、丰富的功能以及简单的部署和管理而广受欢迎。本文将对Redis的简介、特点、应用场景等方面进行详…

作者头像 李华