IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 阅读笔记|Retrieve and Refine: Exemplar-based Neural Comment Generation -> 正文阅读

[人工智能]阅读笔记|Retrieve and Refine: Exemplar-based Neural Comment Generation

原文链接: Retrieve and Refine: Exemplar-based Neural Comment Generation
在这里插入图片描述

Abstract

代码注释生成是软件自动化开发领域的一项重要任务,它旨在为源代码自动生成一种自然的语言描述。传统的注释生成方法使用手工制作的模板或信息检索(IR)技术为源代码生成摘要。近年来,基于神经网络的方法利用著名的编码器-解码器深度学习框架,从大规模的并行代码语料库中学习评论生成模式,取得了令人印象深刻的结果。但是,这些新出现的方法只接受与代码相关的信息作为输入。软件重用在软件开发过程中是常见的,这意味着类似代码片段的注释有助于注释的生成。在本文中,受基于IR和基于模板的方法的启发,我们提出了一种神经网络注释生成方法,使用类似代码片段的现有注释作为范例来指导注释生成。具体来说,给定一段代码,我们首先使用IR技术检索类似的代码片段,并将其注释作为范例。然后,我们设计了一个新颖的seq2seq神经网络,该网络以给定的代码、其AST、类似的代码及其范例作为输入,并利用来自范例的信息,根据源代码和类似代码之间的语义相似性来协助生成目标注释。我们在一个包含约2M个样本的大规模Java语料库上评估了我们的方法,实验结果表明,我们的模型在很大程度上超过了SOTA。

Introduction

做代码注释生成的三种方法:

  1. manually-craft template method:为不同类型的程序定义不同的模板,以生成可读性文本描述,优点是生成的摘要fluent and informative。
  2. IR-based method:抽取关键信息或借助相似代码段的摘要信息,优点就是能利用相似代码段的摘要信息。
  3. neural-based method:神经机器翻译,seq2seq架构。优点是能学习到NL和PL之间的semantic connection。

虽然基于神经网络的方法取得了最好的性能[14,16,25],但它往往会在评论中倾向于产生高频词,或者有时会“失控”。例如,根据LeClair等人的研究[25],测试集中21%的评论包含频率低于100的标记。相反,他们提出的方法预测的评论只有7%包含频率低于100的符号。此外,超过两千条生成的评论甚至没有正常的序列结束标记。具体地说,由神经模型生成的注释在可读性和信息性方面是有损失的。这种现象也在其他领域的NMT模型中出现,因此如果只用source code作为生成摘要的信息源是有损失的。

受方法(1)和(2)的启发,我们假设相似代码段的摘要可以提供生成注释的参考示例,还可能包含与源码有关的低频词信息以增强模型输出低频词的能力。同时由于神经网络具有很强的模式识别能力[2],我们认为编解码器神经网络可以与传统的基于模板的方法和基于IR的方法相结合。所以作者提出了一个名为Re2Com的模型,具有Retrieve模块和Refine模块。Retrieve模块使用IR技术抽取最相似的代码段,将其摘要作为exemplar。Refine模块使用seq2seq神经网络学习生成摘要的patterns。

Motivation

鉴于近年来软件工程领域对深度学习方法有效性的许多讨论[17,27],我们认为我们的研究可能是一个很好的起点,将传统的具体任务方法与深度学习方法相结合。以往的方法是将神经网络应用于软件工程中的任务求解。虽然已经提出了针对特定任务的具体输入,如AST和控制流程图,但以前的研究人员没有分析深度学习方法存在的问题,如过拟合(往往会产生高频项)。因此,我们认为可以将传统方法建模为神经网络来提高性能。

Proposed Approach

在这里插入图片描述
数据预处理:从代码仓库中抽取<java method, comment>,然后把它们按项目划分为训练、测试和验证集(即相同项目的代码段一定全分在一个集合里)。
training and test:
在这里插入图片描述

Experiment

使用每个段代码的配套文档的第一句话作为对应的摘要。考虑到自动生成和重复的代码(由于名称更改、代码克隆等)为了避免对神经模型评估产生负面影响,作者使用启发式规则[36]移除了这些样本,并向训练集添加了唯一的、自动生成的代码,以确保没有对这些样本执行任何测试。在拆分camel case和下划线符号、去掉非字母字符并设置为小写字符之后,作者按项目将数据集分为训练集、验证集和测试集,这意味着一个项目中的所有方法都归为一类。他们认为,为了评估神经模型的性能,数据集的预处理是必要的。** 如果没有这些预处理,神经模型的评价结果会被夸大。 **例如,在ICPC‘18论文[14]中,DeepCom报告的BLEU得分约为38分,而在该数据集上的结果仅为约19分。

数据集用的是LeClair等人在《A neural model for generating natural language summaries of program subroutines》文中提供的数据集,基本信息如下:
在这里插入图片描述
本文作者将数据集划分为标准数据集和挑战数据集:

  • 标准数据集包括Java method(source code), an SBT-AO sequence of Java method, and a comment
  • 挑战数据集仅有SBT-AO sequence and comment
    SBT-AO把SBT序列里的每个token都用<Other>替换了,仅保留了结构信息。

Result

Re2Com vs neural baseline

在这里插入图片描述

Re2Com vs IR baseline

在这里插入图片描述

Exemplar信息源的有效性证明

在这里插入图片描述

在低频词生成上的表现

在这里插入图片描述
Tab 5相当于Recall,Fig 6相当于Precision。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:03:28  更:2022-01-16 13:05:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:40:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码