当前位置: 首页 > news >正文

Leveraging Context-Aware Prompting for Commit Message Generation 论文笔记

介绍

(1) 发表:EMNLP'24

(2) 背景

现有方法通常存在一些缺点,例如只关注变化的行是不够的,或者在变化周围包含不相关的行会带来噪声。如图 1 所示,添加和删除的代码实际上是相同的,只是位置不同,导致代码更改定义不明确。此外,由于缺乏程序依赖关系分析,更改的行和程序的未更改部分之间的关联尚不清楚

(3) 贡献

基于代码属性图(CPG)理论的许多静态分析工具,本文提出了一个上下文感知的 Prompt。同时构建了一个上下文增强的的代码数据集 CODEC 用于提交信息生成

工作

(1) CODEC 数据集

由于现有数据集缺乏对代码更改上下文的监督信号,因此我们为本文所研究的任务构建了自己的数据集

  • 收集:使用 PyDriller 在 Github 上手机至少 1000 Star 的 Java 存储库,除了源代码更改外,还记录了更改部分的上下文

  • 过滤:使用了四种过滤规则

    ① 当更改的行数较多时,大多数自动生成的注释都是不可靠的,因此超过 20 行的更改将被忽略
    ② 提交信息应有长度限制,少于 5 个单词的消息没有信息,而大于 150 个单词的消息可能会令人困惑
    ③ 仅更改 Java 文件
    ④ 删除不相关的信息,例如 issueID、commitID 和 URL

  • 优化:根据之前的研究,仅考虑提交信息的第一句话。本文还给构建了一个 Bi-LSTM 模型以进保留 Why/What 的信息

(2) COMMIT 模型

image-20250921105822773

  • 构建 Added-Deleted Context Graph:使用静态代码分析工具 Joern3 为更改前后的代码构建两个 CPG,分别用于删除的行和添加的行,保留删除或添加部分的依赖节点。通过组合两个 CPG 得到 ADCG,然后可以通过程序切片从 Diffs 中提取 ADCG 节点指示的有用上下文语句

  • 依赖提取算法:考虑到过度平滑和平衡模型复杂性和效率之间的负面影响,我们将依赖关系的范围限制在一定深度。构建的算法可以在特定深度内从 ADCG 访问更改的语句

    ADCG 中每个节点对应一条语句(或行),边表示语句之间的数据依赖或控制依赖。算法首先将变化的代码行作为初始节点集合,并基于它们构建初始的切片,然后以代码切片为工作队列,迭代地取出依赖关系:如果某个依赖片段的深度未超过预设的依赖深度,就检查其源节点或目标节点;一旦发现新的相关节点(即在依赖映射中能连接到尚未加入的节点),就将其加入依赖节点集合,并把新的依赖边加入切片中,等待后续处理。这样,依赖图会像“向外扩散”一样逐步更新。最后,算法收集所有相关节点的代码行作为结果,并将最初的变化行去除,只保留通过依赖传播得到的受影响行

(3) Prompt 设计

将每个提示扩展成四个特定的模版,每个模板都由任务提示、代码差异和基本事实提交消息组成,在实验阶段分别对 T1~T4 进行实验来验证对于提示变化方面的鲁棒性

最终的优化函数如下:

\[P(S|X,f_{prompt})=\sum_{x\in x,z\in [Z]}(\max\prod_{j=1}^zP_\theta(z_j|x,f_{prompt},z<j)) \]

实验

总而言之就是取得了 SOTA,然后验证了 Context-Rich 信息的正面提升

总结

解决了现有提交信息生成未考虑上下文依赖关系变化的问题,并且基于此提出了一个方法和数据集

http://www.hskmm.com/?act=detail&tid=13438

相关文章:

  • P4951 [USACO01OPEN] Earthquake 题解
  • 用ida插件快速审计函数调用
  • 【ACM独立出版|往届已EI、Scopus检索|合作SSCI】第二届数字经济与计算机科学国际学术会议(DECS 2025)
  • schematool -initSchema -dbType mysql
  • PostgreSQL 全表 count 优化实践:从 SeqScan 痛点分析到 heapam 改进与性能突破
  • 第二章习题
  • Lightroom Classic 2025:精细调控,呈现完美画质,专业级数字照片管理与后期处理全解析
  • langfuse从v2.70.1升级到V3.110(异机升级+数据迁移)
  • 20250518_信安一把梭_医院抓取流量
  • tsx 图论选讲
  • OTP绕过漏洞:当后端过度信任前端时的安全灾难
  • 2MHz 8-bit 微控制器 with 64 Pins,M38049FFLKP ADR5040ARTZ TMS320F28062PZT K4AAG165WA-BCTD存储器
  • 实用指南:【Kubernetes】(六)Service
  • 校u圈校园外卖众包任务课表交友CPS社区:一站式校园生态服务系统
  • .NET Polly 全面指南:从5W2H维度深度解析
  • 撒钱岛小游戏管理系统:私域流量变现新选择,趣味与收益双赢
  • Day19构造器详解
  • 多商户的在线客服系统,直接在小程序的商家中嵌入我们的商家聊天链接
  • 【院士报告|EI检索稳定|大连理工大学主办】第四届能源与动力工程国际学术会议(EPE 2025)
  • 多客云 Ai 短视频批量剪辑矩阵系统:高效创作与智能管理的一体化解决方案
  • [ABC077D] Small Multiple 同余最短路
  • 20250509_信安一把梭_黑客
  • c# 保存文件 - 先保存到临时文件,保存成功后修改文件名
  • 达芬奇标记测量线文字标题动画预设(Tracked Measuring Lines)使用指南
  • 20250427_信安一把梭_No11
  • 运营商数据分类分级:最佳实践、典型案例与智能化方案
  • AT_abc413_g [ABC413G] Big Banned Grid
  • .NET性能优化-使用RecyclableBuffer取代RecyclableMemoryStream
  • css样式:button边框贪吃蛇加载效果
  • 什么是NIC(网络接口卡)?