iSE 团队在基于大语言模型的源代码摘要研究上取得新进展

发布日期:2024-07-05 浏览次数:


(源)代码注释对于增强程序理解和促进软件维护至关重要。然而,虽然编写高质量的注释被认为是良好的编程习惯,但这个过程往往是劳动密集型和耗时的。因此,在软件演化过程中,高质量的注释经常缺失、不匹配或过时,这是软件行业的一个常见问题。源代码摘要(简称代码摘要)一直是一个热门研究课题,它通过开发先进的技术/模型来自动生成代码的自然语言摘要(即注释)。近年来,随着大型语言模型 (LLMs) 在自然语言处理领域中的成功,越来越多的软件工程研究者开始将它们集成到各种软件工程任务的解决过程中,包括代码摘要任务。尽管最近有几项研究调查了 LLMs 在代码摘要任务中的有效性,有助于后续研究人员快速了解 LLMs 时代下代码摘要的哪些方面受到了关注,但它们仍然存在一些局限性。首先,它们中的大多数仅关注一种提示工程技术(简称提示技术),而一些复杂先进的提示技术尚未得到研究和比较(例如,chain-of-thought)。其次,它们忽略了LLMs的模型参数配置对其代码摘要能力的影响。最后,这些研究遵循传统代码摘要研究,通过度量 LLMs 生成的摘要与参考摘要之间的文本相似度(例如,BLEU)或语义相似度(例如,基于 SentenceBERT 的余弦相似度)来评估LLMs生成摘要的质量。然而,我们先前的研究(https://arxiv.org/abs/2305.12865 )表明,相较于传统的代码摘要模型,LLMs 生成的摘要在表达上与参考摘要有明显差异,且倾向于描述更多细节。因此,这些传统的评估方法是否适合评估 LLMs 生成的摘要的质量仍是未知的。


为解决这些问题,我院 iSE 团队博士生孙伟松(2023年6月毕业,现为南洋理工大学博士后)对LLMs时代下的代码摘要进行了系统全面研究。该研究首先刻画了如下图1所示的基于LLMs的代码摘要的一般工作流程及其有效性评估方法。在摘要生成过程中,输入由代码片段和预期的摘要类别组成。输入被传递给配备各种提示技术的提示生成器,根据输入构建提示,指示LLMs为输入的代码生成预期类型的摘要。在摘要评估过程中,常用的自动化评估LLMs生成的摘要质量的方法是度量LLMs生成的摘要与参考摘要之间的文本或语义相似度。


图1: 基于LLM的代码摘要一般工作流程及其有效性评估


考虑到评估方法的选择直接影响评估结果的准确性和可靠性,该研究首先系统地调研了现有的自动化评估方法是否适用于评估LLMs(包括CodeLlama-Instruct、StarChat-��、GPT-3.5和GPT-4)生成的摘要的质量,将多种自动化评估方法(包括基于摘要-摘要文本相似性、摘要-摘要语义相似性和摘要-代码语义相似性的方法)与人工评估进行比较,以揭示它们的相关性。受NLP工作的启发,该研究还探索了使用LLMs本身作为评估方法的可能性。发现在所有自动化评估方法中,基于GPT-4的评估方法总体上与人工评估的相关性最强。


其次,该研究在三种广泛使用的编程语言(Java、Python 和 C)数据集上实验了五种提示技术(包括zero-shot、few-shot、chain-of-thought、critique和expert)在调整LLMs适配代码摘要任务方面的有效性。发现提示技术的最佳选择因不同的LLMs和编程语言而异。令人惊讶的是,预计表现更好的更先进的提示技术并不一定比简单的零样本提示表现更好。


然后,该研究研究了两个关键模型设置/参数(包括top_p和temperature)对LLMs代码摘要性能的影响。这两个参数可能会影响生成摘要的随机性。发现它们对摘要质量的影响因基础LLMs和编程语言而异。作为替代参数,它们对 LLMs生成的摘要质量表现出类似的影响。


此外,与现有仅尝试多种编程语言的研究不同,该研究揭示了LLMs在五类编程语言(包括过程式、面向对象式、脚本式、函数式和逻辑式编程语言)上的代码摘要能力差异,覆盖十种编程语言Java、Python、C、Ruby、PHP、JavaScript、Go、Erlang、Haskell和Prolog。其中,Erlang、Haskell和Prolog数据集是该研究新构建的,已经公开给研究社区。发现在所有五种类型的编程语言中,LLMs在总结用逻辑式编程语言编写的代码方面表现始终最差。


最后,该研究报告了LLMs生成不同类别(包括What、Why、How-to-use-it、How-it-is-done、Property和Others)摘要的能力。发现,四个LLMs在生成不同类别的摘要方面表现良好。CodeLlama-Instruct擅长生成Why和Property摘要,而GPT-4擅长生成What、How-to-use-it和How-it-is-done摘要。


该工作的全面研究成果将帮助后续研究人员快速深入地理解基于LLMs的代码摘要工作流程的各个方面,以及为特定领域设计先进的基于LLMs的代码摘要技术。该研究也有利于利用LLMs提升机器代码理解能力以提高基于LLMs的软件需求分析、软件设计与开发以及软件测试能力具有重要意义。相关成果在腾讯基础支撑部门进行应用,效果良好。同时,该工作为充分利用LLMs提升基于LLMs的智能软件工程技术能力提供了参考示范。


这项工作对于该领域的未来发展具有重要的意义,值得研究人员和工业界的持续关注,后续将实现一个面向全球开发者的基于LLMs的智能化代码注释生成工具。相关研究成果形成的论文《Source Code Summarization in the Era of Large Language Models》已被软件工程领域国际顶级旗舰会议The 47th IEEE/ACM International Conference on Software Engineering(ICSE 2025,CCF-A类)全文录用。该论文是南京大学iSE团队与国际优秀团队(包括Nanyang Technological University、The University of New South Wales和重庆大学)联合攻关的又一成果。iSE团队将与这些国际优秀团队持续深入研究智能软件工程,着力构建代码摘要、生成与修复迭代融合、需求与测试双向监督逼近的系统性学术成果和工业应用。


孙伟松博士读博期间由陈振宇教授和房春荣副教授共同指导,其主要研究方向包括智能软件工程和智能模型安全,其研究成果先后全文发表在ICSE、FSE、ASE、ISSTA、ACL、TSE、TDSC、TOSEM等CCF-A类会议和期刊。孙伟松博士将深入研究可信智能化编程技术研究,形成系统性的学术研究和工业应用。