从代码到语言:CoreGen 助力自动化提交信息生成

1.概述

        源代码与自然语言之间的语义鸿沟是生成高质量代码提交信息的一个重大挑战。代码提交信息对于开发者来说非常重要,因为它们简明扼要地描述了代码更改的高层次意图,帮助开发人员无需深入了解具体实现即可掌握软件的演变过程。手动编写高质量的提交信息对开发者来说是额外的负担,特别是在大型项目中,这种负担尤为明显。

        目前,已有多种方法尝试解决这一问题。早期的研究通常采用预定义的模板来生成提交信息,但这种方法需要人工定义模板,且对无法匹配这些模板的提交可能无法生成有意义的信息。随后,基于信息检索的技术开始被应用于从现有提交信息中检索合适的信息。然而,这些方法在变量和函数名不一致的情况下效果有限。

        近年来,随着神经机器翻译(NMT)技术的进步,研究人员开始将提交信息生成视为一种代码到文本的翻译任务,使用深度神经网络来建模代码提交与提交信息之间的关系。然而,现有的研究存在一些局限性,如采用静态嵌入方式,不关注代码的上下文信息,无法准确捕捉代码变化的语义。

        CoreGen 提出了一个两阶段的框架,通过上下文代码表示学习来生成提交信息。其主要贡献包括:

  • 第一个阶段,CoreGen 学习上下文化的代码表示,区分代码提交中的显式和隐式变化,并根据不同的提交类型预测代码变化或掩码的代码片段。
  • 第二个阶段,CoreGen 在上下文化代码表示的基础上微调模型,用于提交信息的生成。

        在实验中,CoreGen 在 BLEU-4 评分上比现有模型至少提升了 28.18%,并且在低资源情况下表现出色,展示了其强大的泛化能力。

2. 方法 (Approach)

        CoreGen 提出了一个用于提交信息生成的两阶段框架,主要通过上下文代码表示学习来实现。这个方法通过对代码提交信息进行上下文化处理,提出了两种针对不同类型代码提交的表示学习策略,以有效利用代码的上下文信息。

2.1 阶段 I:上下文代码表示学习 (Stage I: Contextualized Code Representation Learning)

        CoreGen 将代码提交分为两类:

  • 显式代码更改(explicit code changes):包括代码的添加、删除或修改。
  • 隐式二进制文件更改(implicit binary file changes):无法直接查看更改细节的文件变更。

        针对这两类不同的代码提交,CoreGen 提出了不同的上下文代码表示学习策略:

  • 代码变化预测(Code Changes Prediction):对于显式的代码更改,CoreGen 通过训练 Transformer 模型来预测代码的变化。具体步骤包括:

    • 将源代码分割为更改前和更改后的子序列。
    • 根据代码提交中的特殊标记(如 "+" 和 "-")定位更改。
    • Transformer 模型通过上下文信息来预测代码变化,重点关注代码片段的变化,而不是整个代码片段。
  • 掩码代码片段预测(Masked Code Fragment Prediction):对于隐式的二进制文件更改,无法直接查看内容,因此,CoreGen 通过掩码策略进行上下文表示学习。具体步骤包括:

    • 随机掩盖代码序列的某个片段,然后预测被掩盖的部分。
    • Transformer 模型通过上下文中的其他代码片段预测被掩盖的片段,从而捕捉上下文信息。

        在阶段 I 的学习过程中,CoreGen 通过这两种策略对代码的上下文信息进行了充分的利用。学习到的上下文化代码表示将被应用于阶段 II 的提交信息生成任务。

2.2 阶段 II:提交信息生成 (Stage II: Downstream Commit Message Generation)

        在阶段 II 中,CoreGen 将从阶段 I 中学习到的上下文化代码表示与 Transformer 模型参数一起,进一步微调模型用于提交信息的生成。具体步骤包括:

  • 给定一个代码提交序列,模型通过微调预测相应的提交信息。
  • 微调过程中的所有层都通过反向传播进行优化,以确保模型能够生成高质量的提交信息。

        通过这种两阶段的策略,CoreGen 实现了更加精确的提交信息生成。

3. 实验设置 (Experimental Setup)

这一部分描述了 CoreGen 的基准数据集、评价指标、基线模型以及实验中使用的参数设置。

3.1 数据集 (Dataset)

实验基于 Liu 等人发布的清理后的基准数据集,最初的数据集来自 Jiang 等人的工作,包含大约 200 万对代码提交和对应的提交信息。清理后的数据集包含约 2.7 万对代码提交和提交信息,并按 8:1:1 的比例划分为训练集、验证集和测试集。清理过程包括去除无信息的符号(如问题 ID 和提交 ID)以及删除质量较差的提交信息。

3.2 评价指标 (Evaluation Metrics)

CoreGen 的有效性通过自然语言生成任务中常用的自动评价指标来验证,包括 BLEU-4、ROUGE 和 METEOR。

  • BLEU-4 衡量候选文本与参考文本之间的 4 元组精度,适用于评价生成句子的质量。
  • ROUGE 是一种面向召回的指标,尤其适用于总结任务,本文计算了 ROUGE-1(单字词)、ROUGE-2(双字词)和 ROUGE-L(最长公共子序列)。
  • METEOR 通过惩罚功能和 F-分数的加权计算,评价句子生成的顺序准确性。

3.3 基线模型 (Baseline Models)

为了验证 CoreGen 的有效性,本文与几种基线模型进行了比较:

  • NMT:该模型使用 RNN 编码器-解码器架构,使用 TensorFlow 工具包 Nematus 实现,用于将代码提交翻译为提交信息。
  • NNGen:一种基于检索的模型,使用最近邻算法从现有提交信息中重用提交信息。
  • PtrGNCMsg:另一种基于 RNN 的编码器-解码器模型,采用指针生成网络来解决 OOV(词汇外)问题。

3.4 参数设置 (Parameter Setting)

在验证集上,实验测试了不同的超参数组合,以优化 CoreGen 的端到端性能。具体设置如下:

  • 代码提交和提交信息使用 55,732 个唯一词汇的共享词汇表。
  • 词向量的输入维度设置为 512,初始时随机初始化,并在上下文代码表示学习过程中进行训练。
  • 使用 Adam 优化器进行训练,批量大小设置为 64,学习率动态调整,阶段 I 的掩码比例设置为 0.5。

4. 实验结果 (Experimental Results)

        这一部分展示了 CoreGen 模型及其基线模型的实验结果,包括结果分析、消融研究和参数敏感性分析。

4.1 结果分析 (Result Analysis)

        实验结果表明,CoreGen 在 BLEU-4、ROUGE-L 和 METEOR 评分上分别提高了 28.18%、26.12% 和 17.82%。这种改进归因于 CoreGen 对代码片段的关键部分(如代码更改)的关注。此外,与 PtrGNCMsg 模型相比,CoreGen 在处理 OOV(词汇外)问题上表现出色,能够通过上下文信息更准确地建模上下文特定的标记。

        CoreGen 的上下文代码表示学习还加快了模型的收敛速度。在与传统 Transformer 模型的对比实验中,CoreGen 仅需 25 个训练周期就能达到相同的生成质量,表明其在模型训练效率上的优势。

        为了模拟实际使用场景,实验还验证了 CoreGen 在低资源设置下的泛化能力。即使只使用 50% 的标注数据进行监督微调,CoreGen 仍能显著超过基线模型。这表明 CoreGen 的上下文代码表示学习策略具有很强的泛化能力,特别是在低资源的情况下。

4.2 消融研究 (Ablation Study)

        为了验证上下文代码表示学习的有效性,实验比较了去除表示学习阶段(Stage I)的 CoreGen 变体(CoreGen II)。结果表明,大约一半的性能提升来自于上下文代码表示学习,其余提升可以归因于 Transformer 的自注意力模型架构。尽管 CoreGen II 相对于基线模型有显著改进,但与完整的 CoreGen 仍存在明显差距,进一步证明了上下文代码表示学习的重要性。

4.3 参数敏感性 (Parameter Sensitivity)

        实验分析了掩码率、层数和头数等关键参数对 CoreGen 性能的影响。结果表明,当掩码率增加到 0.5 时,生成质量提升;但当掩码率继续增加时,性能反而下降,这是由于上下文信息的不足导致的。在 CoreGen 中,掩码率被设定为 0.5,意味着代码序列中最长行的 50% 的标记会被随机掩盖,用于表示学习阶段。

        此外,实验还表明,层数和头数过多会对模型的生成质量产生负面影响。因此,CoreGen 中的 Transformer 模型的层数和头数分别设定为 2 和 6,以优化计算成本。

代码地址:

https://pan.baidu.com/s/1BQL5y2OBf2wQc18Jg75JKg?pwd=tbfx 
提取码:tbfx 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555862.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

融资、投流、造血,大模型「新星」开启变现竞速

被称为“AI大模型应用元年”的2024年已过半,行业变化太快,充斥着各种声音。 原本漫长的技术发展周期,在大模型身上被装上了加速键。从卷参数、到卷应用,短短两年时间,玩家“百模大战”、资本烈火烹油,都在…

模型 SECI(知识的创造)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。知识创造的螺旋转化模型。 1 SECI的应用 1.1 Tech Innovations移动应用创新 Tech Innovations是一家软件开发公司,致力于开发创新的移动应用程序。为了提升团队的知识共享和创新能力&…

论文选题没思路?用这7个GPT提示词10分钟确定论文选题

选题是论文写作的第一步,也是至关重要的一步。毕业论文选题都是让大学生头疼的大事。没有灵感、方向不清、信息太多,常常让人无从下手。现在有了ChatGPT这样的AI写作辅助工具,它可以帮你快速生成丰富的选题思路,轻松解决选题难题。…

fiddler抓包18-2_导出jmeter、postman脚本(带请求头)

课程大纲 1. Fiddler导出请求为curl脚本 选中请求,“文件” - “导出会话” - “选中的会话” - “cURL Script”。 2. 导入jmeter ① 复制curl脚本。 ② 打开jmeter,“工具” - “import from cURL”,粘贴脚本,勾选“Add cooki…

【百度文心智能体】想开发爆款智能体?来看看 万圣节之夜探秘者 智能体开发流程大揭秘

目录 前言 一. 创作灵感 二. 智能体中Prompt如何设计 2.1 头像 && 聊天背景 2.2 智能体简介 && 角色定位与目标 2.3 思考路径 && 个性化 2.4 开场白 && 自动追问 2.5 插件选择 三. 总结 前言 从2022年11月底ChatGPT …

Github优质项目推荐-第四期

文章目录 Github优质项目推荐 - 第四期一、【Umi-OCR】,26.1k stars - 文字识别工具二、【AFFiNE】,41k stars - 知识库平台三、【NocoBase】,12k stars - 无代码/低代码平台四、【neovim】,82.3k stars - 改良版VIM五、【generat…

构建llama.cpp并在linux上使用gpu

使用gpu构建llama.cpp 更多详情参见https://github.com/abetlen/llama-cpp-python,官网网站会随着版本迭代更新。 下载并进入llama.cpp 地址:https://github.com/ggerganov/llama.cpp 可以下载到本地再传到服务器上 git clone https://github.com/gg…

linux安装mysql显示公钥尚未安装 :mysql-community-libs-8.0.39-1.el7.x86_64.rpm 的公钥尚未安装

linux安装mysql显示公钥尚未安装 mysql-community-libs-8.0.39-1.el7.x86_64.rpm 的公钥尚未安装 如题,当执行 yum install -y mysql-community-server 报错 解决办法 命令行执行 yum install -y mysql-community-server --nogpgcheck 也就是在原来的命令后面…

【星汇极客】手把手教学STM32 HAL库+FreeRTOS之创建工程(0)

前言 本人是一名嵌入式学习者,在大学期间也参加了不少的竞赛并获奖,包括但不限于:江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三。 后面会经常写一下博客&…

程序设计语言基础错题解析【软考】

目录 前言1.编译与解释2.编译器工作过程2.1编译过程概述2.2对语句的处理2.3源程序数据类型目的 3.中间代码4.正规式5.错误管理6.后缀表达式7.传值与传址7.1基础7.2实际计算 8.多种程序语言特点 前言 本文专门用来记录本人在做软考中有关程序设计语言基础的错题,我始…

【C/C++】错题记录(四)

题目一 一个函数可以有很多个返回值(有很多个return语句),但是最终只能有一个return语句执行。 题目二 题目三 题目四 题目五 程序数据结构算法 题目六 题目七 题目八 题目九 D选项是语句……

【进程间通信(二)】【命名管道】

目录 1. 命名管道1.1 现象1.2 理解1.3 编码通信 2. 了解日志2.1 了解可变参数2.2 在通信中加入日志信息 【进程间通信(一)】【管道通信(上)】 【进程间通信(一)】【管道通信(下)】 这…

深入解析DPU:AI时代的芯片分工与超级网卡

引言 在当今AI时代,计算需求的爆炸性增长使得传统数据中心的架构面临着巨大的挑战。数据处理任务越来越复杂,尤其是在大型AI模型如GPT和BERT的应用中,如何提高数据中心的计算和传输效率成为关键问题。传统的CPU(中央处理器&#…

希捷8T硬盘exfat变0字节的恢复方法

最近流行的3.5寸大容量台式硬盘移动盒子是一种性价比较高的组合,为了方便如涉及到跨平台(win和mac),大多数此类组合选择了exfat文件系统。下边这个案例就是我们经常遇到的exfat变0字节。 故障存储: ST8000HKVS002 8T/exfat 文件…

第十三章 Redis短信登录实战(基于Redis)

目录 一、概述 1.1. Session复制 1.2. 使用Redis 二、基于Redis实现共享Session登录 2.1. 实现思路 2.2. 功能实现的主要代码 2.2.1. 用户业务接口 2.2.2. 用户业务接口实现类 2.2.3. 用户控制层 2.2.4. 登录拦截器 2.2.5. 拦截器配置类 2.3. 优化登录拦截器 完…

Git基本操作与分支

一、操作入门 先看大屏幕:先背过 再来操作 初始化 刚入门的小朋友可能出现这种问题: 原因是:需要自己创建一个记事本文件 add的作用是添加指定文件到暂存区。 commit是提交暂存区到仓库区,此处的仓库是本地仓库,本…

选择最佳HR系统_6款产品评测与推荐

本文盘点了ZohoPeople、SAPSuccessFactors等六款主流HRMS,各系统各具特色,如ZohoPeople的全球化云管理、SAP的高定制化、Workday的实时数据分析等,适合不同规模企业需求,建议企业试用后决策。 一、Zoho People Zoho People 是一个…

如何使用ssm实现基于bootstrap的课程辅助教学网站的设计与实现+vue

TOC ssm782基于bootstrap的课程辅助教学网站的设计与实现vue 第1章 绪论 1.1研究背景与意义 在科学技术水平还比较低下的时期,学校通常采用人工登记的方式对相关的课程信息进行记录,而后对这些信息记录进行管理和控制。这种采用纸质存储信息的管理模…

第十五周周报

目录 摘要Abstract1 LSTM模型实战1.1 数据处理1.2 LSTM模型的搭建1.3 数据的预测和可视化 2 transformer(上)2.1 Transformer 结构2.2 Transformer 编码器 总结 摘要 本周的工作内容主要分为两个部分,第一部分是使用LSTM模型预测股票市场数据…

固态硬盘数据丢失?别急,这4款恢复神器帮你找回“丢失的记忆”!

数据啊,对咱工作和生活那可老重要了。不过呢,固态硬盘里的数据说不定啥时候就因为不小心误操作啦,或者被病毒攻击啦,再或者硬件出毛病就丢了,这可真让人上火。还好哈,市场上有不少专门的数据恢复软件呢&…