A survey of automatic generation of source code comments Algorithms and techniques

ABSTRACT

代码注释存在问题:代码注释有助于程序理解,然而因为非常耗费精力、程序员缺乏相关知识,以及其他因素,代码注释常常短缺,甚至与源代码不匹配。

为此,一直有研究人员在关注代码注释的自动生成问题。

本文作为对自动代码注释研究的综述,做了以下工作:1. 对注释自动生成存在的挑战和研究框架进行总体分析。2. 总结代表性算法的分类、设计原则、每类算法的优缺点。3. 提供对生成注释的质量评估的概述。4. 总结自动代码注释今后的研究方向。

1 INTRODUCTION

代码注释有助于算法/程序理解,但编写耗时耗力,为此人们在自动生成代码注释方面下了很多努力。如:用长的描述性名称定义标识符,以实现自动代码注释,但反而使代码理解更困难。

现有的方法大多基于机器学习或信息检索技术,代码注释生成的框架主要有三部分:1. 数据准备,为注释系统准备数据;2. 源代码表示,捕获源代码的结构和语义,如结构、词汇、语法、语义、上下文、调用关系和数据依赖性等信息;3. 文本生成,基于源代码中提取的信息,生成自然语言描述。

另一个重要的研究问题:生成代码注释质量的评估,这是评价注释生成算法是否高效、有效的重要指标。因此,设计合适的代码注释质量标准是当前面临的挑战,评估质量包括算法的比较和验证。

代码总结(code summary)类似于代码注释,可以视作一种特殊的自动代码注释工作。

本文目标:(1) 为研究人员提供一份自动注释生成的代表性算法目录,使新研究人员对目前最先进的自动代码注释算法有较好的了解; (2) 总结现有研究的主要挑战和局限性。

首先介绍动机、分析存在的主要问题、描述工作流程。然后讨论3种主流算法,指出潜在发展趋势。总结注释质量评估的工作,提出发展方向。调查生成代码总结的工作。

2 OVERVIEW OF AUTOMATIC GENERATION OF CODE COMMENTS

A. PROBLEM STATEMENT

代码注释自动生成关注于把编程语言转换为自然语言。注释可以描述功能、代码设计意图、程序理解、程序功能以及相关参数的含义。

B. CHALLENGES OF AUTOMATIC CODE COMMENTING AND RESEARCH FRAMEWORK

如图1,代码注释自动生成的大致过程基本分为3块:

  1. 数据收集,这些数据用于训练、验证和测试模型、提取代码和相应的注释,或者提取注释生成系统所需的特定规则。数据通常从开源项目中爬取,如Stack Overflow。
  2. 生成注释,这一步分解为两个子任务:(1) 表示源代码;(2) 生成文本。
  3. 质量评估,对生成的注释进行质量评估,设计实用、客观的质量评估标准,比较不同算法的性能和注释生成质量。
1) CHALLENGES OF AUTOMATIC CODE COMMENTING

挑战:编程语言在本质上不同于自然语言。

代码和注释的区别:(1) 源代码包含大量关于类、方法和方法参数的信息,同时有许多嵌套结构和复杂的调用关系; (2) 自然语言编写的注释是非结构化的,形式上自由表达。

因此,自动代码注释面临以下两个挑战:算法和质量评估。

a: CHALLENGE 1: AUTOMATIC CODE COMMENTING ALGORITHMS

挑战1:代码注释自动生成算法

当前已有多种自动或半自动的代码注释生成算法,主要分为以下三类:(1) 基于信息检索;(2) 基于深度神经网络;(3) 其他代码注释自动生成算法。算法的两个主要问题包括源代码表示和注释文本生成。

SOURCE CODE MODELS

核心问题:源代码模型 ——如何表示源代码。

源代码模型分类:抽象语法树、解析树、token上下文、控制流图形(CFGs)、数据流等

用于自动注释的源代码模型分为三类:(1) 基于token,主要从源代码中提取keywords、topic等token。代码表示为普通的文本,常表示为bag of code tokens(BoT),或者characters or bag of words(BoW)。主要应用在基于信息检索的注释算法。(2) 基于语法。代码表示为abstract syntax trees(ASTs)。主要应用在基于神经网络的注释算法。(3) 其他的源代码模型,以适合后续流程的形式表示代码,如Software Word Usage Model (SWUM)。

最后,仍然缺少一个可以表示各种信息的组合模型,如词法、语法和源代码结构。

TEXT GENERATION

难点:从源代码生成自然语言文本

前提: 从代码中准确提取信息

当前的文本生成方法可以分为三类:(1) 基于规则,人为设计规则或自然语言模板。(2) 基于生成,通过解码器生成文本。(3) 基于检索,从语料库中检索已有注释来生成文本。

b: CHALLENGE 2: COMMENT QUALITY ASSESSMENT

挑战2:注释质量评估

注释质量评估存在两个主要问题:(1) 用于验证和测试注释生成算法的数据集的统一。(2) 评估标准的选择。

UNIFICATION OF DATASETS FOR VERIFYING COMMENTING ALGORITHMS

目前,已有的研究利用的是不同的数据集来测试算法,使得测试结果和算法性能的比较变得困难。因此,统一的数据集十分重要。

SELECTION OF EVALUATION CRITERIA FOR QUALITY ASSESSMENT OF CODE COMMENTS

现有工作中代码注释的质量评估标准因注释类别的不同而不同:

从函数的角度来看,注释可以分为描述性注释、摘要注释、条件注释、调试注释和元数据注释等。

即使在同一类别中,不同的自动注释生成技术也采用不同的注释评估标准。因此,设计和制定合适的评注质量评价指标对促进代码评注自动生成的研究具有重要意义。

2) RESEARCH FRAMEWORK

研究及相关工作:

  1. 程序自动注释技术
  2. 代码注释的质量评估

两条工作线下依赖如下图:

3) TRENDS OF THE DEVELOPMENT OF CODE COMMENTING TECHNIQUES

2010到2014年的研究大多采用基于信息检索的技术,近5年的研究则主要采用深度神经网络技术。

本文从2010-2018年发表的59篇论文中选取了32篇。

文献选取规则:(1) 标题、摘要、索引词:‘‘code + comment’’, ‘‘comment’’, ‘‘code + summary’’ and ‘‘summary’’ ;检索范围:ACM数字图书馆,IEEE Xplore数字图书馆,DBLP,谷歌Scholar和arXiv.org。(2) 会议/期刊选取范围:IEEE ICSE, IEEEFSE, IEEE/ACM ASE, IEEE TSE, ACM TOSEM, EMSE, AAAI和IJCAI。

最后对所选论文手动进一步进行引文分析。

下图为最终所选论文分布:

3 THE ALGORITHMS OF AUTOMATIC GENERATION OF CODE COMMENTS

首先介绍了代码注释算法的分类,然后对每种算法的原理进行了深入的分析。最后,总结了现有算法的特点。

A. CLASSIFICATION OF AUTOMATIC CODE COMMENTING

如图所示,代码注释自动生成算法主要分为以下三类:

  1. 基于信息检索
  2. 基于深度神经网络
  3. 其他注释生成算法

B. INFORMATION RETRIEVAL BASED COMMENT GENERATION ALGORITHMS

基于信息检索的注释生成算法

给定一段无注释源代码,一组有注释源代码,IR首先计算目标代码与数据集中源代码之间的相关性,然后返回多个与目标代码匹配得最好的代码片段及其注释。

一般使用以下几种技术:

  1. 基于VSM/LSI
  2. 基于代码克隆检测
  3. 基于LDA
  4. 其他信息检索算法

在现有文献的相似度比较并不直接以源代码文本的形式进行。源代码通常被转换为不同的表示形式(解析树、抽象语法树),并采用启发式规则过滤匹配代码的相应注释

这类算法一般通过搜索或设计规则生成注释文本。

1) VSM/LSI BASED COMMENT GENERATION ALGORITHMS

这类算法使用向量空间模型VSM、潜在语义索引LSI,或二者相结合的技术。

VSM和LSI都属于信息检索技术,此时源代码文本或查询文本通常表示为向量、矩阵或元组,向量中的每个元素表示文档中一个单词的权重。VSM中,逆文档频率(tf-idf)是应用最广泛的一种权重方法。LSI利用奇异值分解(SVD)识别术语与概念之间的相关性,并提取文本的概念主题。

注释系统根据每个词的权重值确定该词是否应该出现在源代码的注释中,或者计算查询文本向量与源代码文本之间的文本相似性,权值更高的词将作为构建目标代码注释的关键词。

中间介绍了几篇论文对该类方法的使用。

缺点:只考虑出现在语料库或源代码文档中的词,不考虑源代码文档中的其他信息,例如程序调用、数据依赖、源代码中的单词顺序。因此,这些系统很难进一步提高生成注释的准确性。

2) CODE CLONE DETECTION BASED COMMENT GENERATION ALGORITHMS

基于克隆检测的注释生成方法,利用代码克隆检测技术在数据库中寻找相似的代码,将匹配文本的相应注释视为目标代码的注释。

介绍两篇论文的做法。

基于代码克隆检测的注释生成算法的原理很简单,但生成的注释的数量和质量很大程度上取决于为注释系统构建的数据集的规模和质量。因此,当我们需要为在特定领域中使用特定编程语言编写的源代码提供注释时,构建一个包含在同一领域中使用相同编程语言编写的代码和注释对的高质量数据集是很重要的。

缺点:生成注释数量要小得多。原因是生成的注释的数量很大程度上取决于数据库或GitHub的开源软件项目所包含的信息,如果没有相似代码,那么注释系统也不会推荐任何注释。

3) LDA BASED COMMENT GENERATION ALGORITHMS

基于潜在狄利克雷分配(LDA),从文本文档中自动提取主题的主题模型之一。

LDA根据文档中出现的术语匹配生成概率模型。LDA可以提取源代码的特定特性。

LDA模型简单有效,成为从源代码文档中进行语义挖掘的有效模型

介绍两篇论文的做法。

4) OTHER INFORMATION RETRIEVAL BASED COMMENT GENERATION ALGORITHMS

其他基于信息检索的注释生成算法

基于短语的机器翻译(PBML)和树到串机器翻译(T2SMT)从python的源代码生成伪代码。伪代码可视作一种特殊的代码注释。

PBML和T2SMT都是统计机器翻译框架(SMT)

介绍一些论文的具体做法。

综上所述,IR是代码注释生成的最早尝试。随着人工智能和机器学习技术的发展,研究人员不断将新兴技术应用到自动注释生成研究中,如深度学习算法。

C. DEEP NEURAL NETWORKS BASED COMMENT GENERATION ALGORITHMS

基于深度神经网络的注释生成算法

在软件工程领域,研究者将源代码到注释的转换制定为编程语言到自然语言之间的转换问题,并试图利用深度神经网络方法来解决源代码注释问题。

基于深度神经网络的注释生成算法主要分为两大类:

  1. 基于RNN
  2. 基于其他神经网络

注释生成中的两种重要结构:

  1. 编码器-解码器
  2. 注意力机制
a: ENCODER-DECODER FRAMEWORK

在基于深度神经网络的注释生成系统中,通常采用编码-解码器结构,即seq2seq模型。

编码器的作用是将源代码编码成固定大小的向量;解码器负责解码源代码向量和预测源代码注释。

不同的编码器有不同的输入形式和神经网络,编解码器的内部结构可以选择RNN、CNN和RNN的变体,如门控循环单元(GRU)和长短期记忆模型(LSTM)。

b: ATTENTION MECHANISM

注意力机制常与编码器-解码器框架配合,对于解码器的输入序列,注意力机制负责将较高的权值动态地分配给更相关的token,提高解码器的有效性。

基于深度神经网络的注释生成系统需要高质量的数据集来训练神经网络。

在训练神经网络时,可以将预处理的源代码(AST或AST序列)作为输入数据,相应的注释作为输出,经过训练获得可生成目标程序的自然语言描述的神经网络。

1) RNN BASED COMMENT GENERATION ALGORITHMS

RNN算法作为注释生成的解决方案时,常用编码器-解码器结构和注意机制。RNN的两个重要变体:GRU和LSTM。

基于RNN的注释生成算法分为两类:

  1. 基于单编码器
  2. 基于多编码器
a: SINGLE-ENCODER BASED COMMENT GENERATION ALGORITHMS

单编码器结构中,编码器由一种RNN结构组成,即经典的编码器-解码器结构。

LSTM:CODE-NN

GRU:另一篇文章

SBT:DeepCom

RvNN递归神经网络:Code-GRU

b: MULTIPLE-ENCODER BASED COMMENT GENERATION ALGORITHMS

包含一个以上的编码器,由于每个编码器从源代码中表示并提取一种类型的信息,因此能够产生更高精度的代码注释。

Hu et al. [32] 配置了两个编码器:API编码器,code编码器。在原有RNN基础上增加了API编码器。

Wan et al. [80] 结合强化学习:一个普通的LSTM编码器,一个基于AST的LSTM编码器。

2) OTHER NEURAL NETWORK BASED COMMENT GENERATION ALGORITHMS

基于其他神经网络的代码生成算法

seq2seq一般使用基于RNN的编码器结构,但在自然语言翻译中,也可以使用CNN来构建编码器架构。CNN encoder-decoder的优点是在训练过程中所有元素的计算都可以完全并行化,从而更好地利用GPU硬件。

CNN模型可以用来表示源代码的语法和语义信息。借助特殊注意机制或RNN解码器,还可以解决输入序列的问题,此时卷积模型可以层次化地表示输入数据序列。CNN的作用在于它可以从输入序列中提取层次化的特征表示。

Allamanis [9]:采用encoder-decoder,编码器CNN+attention,解码器基于GRU。

Mou [51]:AST→CNN→向量表示

Allamanis [7]:对数双线性模型,连续嵌入表示标识符,使用神经概率模型而不是encoder-decoder

综上,在基于深度神经网络的注释生成算法中,RNN和CNN都能被运用到注释生成任务,RNN利用GRU和LSTM来表示输入的长序列之间的特征,CNN利用卷积注意力层或卷积层来收集和表示源代码的特征和位置模型。RNN和CNN都会配合attention机制以提高性能和准确度,这些方法虽然在注释生成任务上取得了成功,但仍然在同时建模源代码的复杂多倍信息遇到困难,因此混合模型可能是未来较为流行的方向。

D. OTHER COMMENT GENERATION ALGORITHMS

其他注释生成技术

这些技术大多采用来自其他研究领域的一些现有模型来表示源代码(排除前面提到的模型),例如 Software Word Usage Model (SWUM),Ontology based Resource Description Framework (RDF) ,以及stereotype identification 。[46], [47], [67], [69] 采用SWUM来表示源代码的结构、语义、词法信息;[62] 采用RDF描绘源代码的语义信息,并采用启发式方法找到源代码的关键事实;[5], [49], [50] 采用stereotype identification来对JAVA的类和方法生成总结。

论文 年份 论文 年份
[46]SWUM 2014 [62]RDF 2011
[47]SWUM 2016 [5]stereotype identification 2015
[67]SWUM 2010 [49]stereotype identification 2013
[69]SWUM 2011 [50]stereotype identification 2013

可以看到上述方法的论文年份都比较久远

1) SOFTWARE WORD USAGE MODEL BASED COMMENT GENERATION ALGORITHMS

SWUM是早期软件常用的模型,在源代码中表现了大量的文本信息和结构信息。SWUM将源代码的文本和结构信息组合到一个模型中。

SWUM由三层组成:

  1. SWUMword : 程序词的模型
  2. SWUMprogram : 程序结构信息的模型
  3. SWUMcore : 源代码中的结构、连接不同层的桥边的模型

因此,SWUM不仅可以从源代码中提取词汇信息和结构信息,还可以连接语言信息和结构信息。

在这个模型中,开发人员设计了不同的评分函数,以完成不同的应用任务。根据评分函数计算出的分值,从源代码中选择重点短语和关键结构信息。最后根据这些重点短语和关键词,在设计的语言模板的辅助下生成注释。

注:生成阶段的语言模板可能是这一模型受限的主要因素。

2) ONTOLOGY-RDF BASED COMMENT GENERATION ALGORITHMS

基于本体的资源描述框架

Rastkar等人[62]提出了一种为横切源代码问题自动生成自然语言摘要的方法:他们从源代码中提取结构和词汇信息,利用本体实例来存储和描述所提取的语义信息,并通过RDF图对本体实例进行操作,RDF图用于原始资源的描述。

在他们的方法中,三元组(资源、属性类型、属性值)用于表示特定类的一个属性。然后,他们使用一系列启发式方法,从相关的代码关注中找到突出的代码元素和模式。最后,使用前面步骤中提取的信息根据模板构造摘要注释。
他们生成的摘要主要描述了代码的关注点以及如何实现。

3) STEREOTYPE IDENTIFICATION BASED COMMENT GENERATION ALGORITHMS

stereotype是系统设计中,类的角色(作用?)和职责的抽象。

4) OTHER ALGORITHMS

其他算法

  1. 启发式方法
  2. 最初为非注释问题设计的方法:
    1. 眼球跟踪技术
    2. 数据驱动方法

E. SUMMARIZATION OF COMMENT GENERATION ALGORITHMS

基于IR方法的特点:

  1. 将源代码视为纯文本,忽略源代码的结构信息、数据依赖和调用信息
  2. 有效性依赖于数据集中的相似代码
  3. 生成注释的质量和数量取决于数据集中包含的源代码的质量和数量

基于深度神经网络方法的特点:

  1. 多采用RNN编码器-解码器模型+注意力机制
  2. 把源代码注释生成任务表示为NLP中的机器翻译
  3. 属于监督学习,需要高质量数据集

4 QUALITY EVALUATION CRITERIA OF CODE COMMENTS

多数现存算法的评估基于不同数据集,因此无法在不同算法之间进行比较,即在注释生成领域缺乏统一的质量评估数据集。此外,也缺乏对算法的性能和有效性的评价标准。

注释评估模型近年的参考文献如图所示:

Khamis [38]:提出JavadocMiner,使用启发式方法根据语言质量和源代码及注释之间的一致性评估注释质量。

Steidl [70]:质量评估模型+系统的度量标准,七类注释:版权注释、头注释、成员注释、内嵌注释、部分注释、代码注释和任务注释。主要聚焦在内联和成员注释。

Yu [87]:基于分类算法聚合,根据注释的格式、语言形式、内容和代码的关联度对注释进行评估。

两类评估方法:人工评估和自动评估

  1. 人工评估:依赖于经验丰富的开发人员根据预定义的质量度量(如简洁性、可读性、准确性等)逐个分析和评价生成的注释。避免了特征选择和评价算法的复杂技术设计,但往往耗时耗力,不适合大量的分析性评价。
  2. 自动评估:通常借用自然语言评估标准和工具,常用的有BLEU、METEOR,有时也用ROUGE、CIDER。

综上所述,注释质量评估一般涉及以下三个方面:

  1. 实验数据集,用于评价代码注释算法的数据集。
  2. 评估方法,一般包括人工评估和自动评估。
  3. 评价指标,指评价注释质量的标准。

A. DATASETS FOR VALIDATION

注释系统用于验证的数据集各不相同。

数据集来源有三:

  1. GitHub软件库中的开源项目
  2. Stack Overflow中的问答站点
  3. 开发者之间的交流和讨论信息,比如电子邮件

虽然来源只有三种,但是每个注释系统都收集了用不同编程语言编写的不同项目作为数据集。即使有些系统从相同的来源收集信息,如Stack Overflow中的Q&A站点,仍然存在标签和时间段的差异。总的来说,没有统一的公共验证数据集可供使用。

B. AUTOMATIC EVALUATION

现有自动评估指标有BLEU、METEOR、ROUGE、CIDER。

1) BLEU

“双语评估辅助”(Bilingual Evaluation Understudy)

BLEU的重点考核内容为n-gram precision,表示在评估的翻译中,匹配的n-gram占n-gram总数的比例。分别计算每个n-gram阶的精度,每个精度的加权几何平均值作为最终的精度,n可以是1,2,3,4。

缺点:BLEU没有考虑直接召回率,加上翻译和参考直接不考虑明确的词语匹配,使得人与BLEU的评估一致性难以推进。

BLEU 是最早提出的机器翻译评价指标,是所有文本评价指标的源头,也是现在机器翻译评价的事实标准,有标准的 perl 测评脚本

这是一个只看中准确率的指标,就是说更加关心候选译文里的多少 n-gram 是对的(即在参考译文里出现了),而不在乎召回率(参考译文里有哪些 n-gram 在候选译文中没出现)。不过这不算特别严重的问题,因为 BLEU 原论文建议大家的测试集里给每个句子配备 4 条参考译文,这样就可以减小语言多样性带来的影响(然而现在很多机器翻译的测试集都是只有 1 条译文,尴尬= =);另外还有 brevity penalty 来惩罚候选译文过短的情况(候选译文过短在机器翻译中往往意味着漏翻,也就是低召回率)。

但总的来说,现在还是普遍认为 BLEU 指标偏向于较短的翻译结果(brevity penalty 没有想象中那么强)。

作者:Towser
链接:https://www.zhihu.com/question/304798594/answer/567383628
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2) METEOR

”显式排序的翻译评估度量“(Metric for Evaluation of Translation with Explicit Ordering)

METEOR是对BLEU的补充,包含了召回率以反映翻译结果覆盖源句全部内容的程度,根据翻译和参考翻译之间显式的word-to-word的匹配计算一个分数,并根据该分数评估翻译。

METEOR 大意是说有时候翻译模型翻译的结果是对的,只是碰巧跟参考译文没对上(比如用了一个同义词),于是用 WordNet 等知识源扩充了一下同义词集,同时考虑了单词的词形(词干相同的词也认为是部分匹配的,也应该给予一定的奖励,比如说把 likes 翻译成了 like 总比翻译成别的乱七八糟的词要好吧?)。在评价句子流畅性的时候,用了 chunk 的概念(候选译文和参考译文能够对齐的、空间排列上连续的单词形成一个 chunk,这个对齐算法是一个有点复杂的启发式 beam serach),chunk 的数目越少意味着每个 chunk 的平均长度越长,也就是说候选译文和参考译文的语序越一致。最后还有召回率和准确率两者都要考虑,用 F 值作为最后的评价指标。

METEOR的缺点也很明显:其一是只有 Java 实现,而且还是 jar 包不是 API;其二是有四个超参数 alpha, beta, gamma, delta,这些都是对着某个数据集调出来的(让算法的结果和人的主观评价尽可能一致,方法是 grid search);其三是需要有外部知识源(WordNet 等)来进行单词对齐,所以对于 WordNet 中不包含的语言,就没法用 METEOR 来评价了。

作者:Towser
链接:https://www.zhihu.com/question/304798594/answer/567383628
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

3) ROUGE

(Recall-Oriented Understudy for Gisting Evaluation)

ROUGE有几种,常用的有:ROUGE-N, ROUGE-L, ROUGE-W和ROUGE-S。

ROUGE-N和ROUGE-L通常用作度量总结注释的质量评估的度量标准 。ROUGE-L表示基于最长公共子序列的精度和召回统计量

ROUGE 和 BLEU 几乎一模一样,区别是 BLEU 只计算准确率,而 **ROUGE 只计算召回率。**ROUGE 用作机器翻译评价指标的初衷是这样的:在 SMT(统计机器翻译)时代,机器翻译效果稀烂,需要同时评价翻译的准确度和流畅度;等到 NMT (神经网络机器翻译)出来以后,神经网络脑补能力极强,翻译出的结果都是通顺的,但是有时候容易瞎翻译,比如改个人名/数字啊、扔掉半句话啊这种情况很常见。于是有人说,那我们不看流畅度只看召回率(参考译文里的 n-gram 有多少出现在了候选译文中)就好了,这样就能知道 NMT 系统到底有没有漏翻(这会导致低召回率)。所以,ROUGE 只适合评价 NMT,而不适用于 SMT,因为它不管候选译文流不流畅。

作者:Towser
链接:https://www.zhihu.com/question/304798594/answer/567383628
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

4) CIDER

“基于共识的图像识别评估”(Consensus-based Image Description Evaluation )

主要原理:衡量一个测试句与大多数参考句之间的相似性。

实验结果表明,CIDERr度量与基于人类共识的匹配比现有的度量具有更好的一致性。

ROUGE 和 BLEU 几乎一模一样,区别是 BLEU 只计算准确率,而 **ROUGE 只计算召回率。**ROUGE 用作机器翻译评价指标的初衷是这样的:在 SMT(统计机器翻译)时代,机器翻译效果稀烂,需要同时评价翻译的准确度和流畅度;等到 NMT (神经网络机器翻译)出来以后,神经网络脑补能力极强,翻译出的结果都是通顺的,但是有时候容易瞎翻译,比如改个人名/数字啊、扔掉半句话啊这种情况很常见。于是有人说,那我们不看流畅度只看召回率(参考译文里的 n-gram 有多少出现在了候选译文中)就好了,这样就能知道 NMT 系统到底有没有漏翻(这会导致低召回率)。所以,ROUGE 只适合评价 NMT,而不适用于 SMT,因为它不管候选译文流不流畅。

作者:Towser
链接:https://www.zhihu.com/question/304798594/answer/567383628
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

C. HUMAN EVALUATION

人工评价的分数是主观的,且效率较低,但它仍然是评价许多注释生成算法性能的重要方法之一。

本文将人工衡量指标根据特征分为三类:

一、对代码注释的内容进行度量:对生成注释进行评估,如:充分性、准确性、简洁性、信息量、可解释性。

  1. 准确性:度量所生成的注释在多大程度上反映了相关源代码的语义
  2. 内容充分性:用于评估注释中遗漏了多少源代码中包含的信息有关的信息。
  3. 简洁性:用于评估注释包含不必要信息的程度。
  4. 信息量:衡量从输入代码到自然语言注释内容的数量,忽略语言的流利程度。
  5. 可解释性:衡量所生成的注释在多大程度上传达了源代码的含义。

二、用自然语言特征度量代码注释:对生成的注释进行语法性和流畅性的评估,忽略注释内容,如:表达性、自然性、可理解性。

  1. 自然性:衡量注释的语法性和流畅性。
  2. 表达性:通过注释的描述方式来衡量注释的可读性和可理解性。
  3. 可理解性:根据注释的流畅性和语法来评估注释。

自然度和可理解性指标在不同的研究中有着相同的含义,但名称不同。

三、衡量代码注释的有效性:判断生成注释是否有用和有必要。

  1. 有用性:度量所生成的注释对开发人员理解代码的有用程度
  2. 代码可理解性:用于评估生成的注释在多大程度上帮助开发人员理解程序。
  3. 必要性:衡量生成的注释在多大程度上是必要的
  4. 实用性:度量所生成的注释在多大程度上可以帮助开发人员理解代码

以上模式可以根据研究人员的设计采用不同尺度的评分,如1-4的评分、1-5的评分等。

评估员通常是具有五年相关编程语言开发经验的程序员或在相应领域拥有硕士/博士学位。

人工评估优点:准确性高、评价结果令人信服

人工评估缺点:成本高、评价者主观影响和时间消耗多

总而言之,自动评估有其自身的优势,可以弥补人工评估的不足。但到目前还没有成熟、高效、廉价的注释质量评估工具,这是代码注释生成领域需要解决的重要问题。

5 FUTURE DIRECTIONS

近年来,利用深度神经网络解决注释自动生成问题是一种很有代表性的研究方法,并取得了一些成果。但总体上仍存在生成评论准确性不高、生成注释不足等问题。

本文总结了以下四个研究方向:

  1. 探索深度神经网络与其他模型的协同作用
  2. 不同源代码模型的融合
  3. 设计一个个性化的,智能的注释自动生成系统,以满足各种场景。
  4. 测试数据集与评论质量评价模型的统一

【综述笔记】 A survey of automatic generation of source code comments Algorithms and techniques相关推荐

  1. SLAM综述笔记-A Survey of Simultaneous Localization and Mapping with an Envision in 6G Wireless Networks

    A Survey of Simultaneous Localization and Mapping with an Envision in 6G Wireless Networks 这是一篇就激光与视 ...

  2. 退役笔记一#MySQL = lambda sql : sql + #39; Source Code 4 Explain Plan #39;

    Mysql 查询运行过程 大致分为4个阶段吧: 语法分析(sql_parse.cc<词法分析, 语法分析, 语义检查 >) >>sql_resolver.cc # JOIN.p ...

  3. 【虚拟人综述论文】Human-Computer Interaction System: A Survey of Talking-Head Generation

    Reading Notes: Human-Computer Interaction System: A Survey of Talking-Head Generation 这一篇文章CSDN禁用太多东 ...

  4. 多视角人脸正面化生成综述:Multi-view Frontal Face Image Generation: A Survey

    多视角人脸正面化生成综述:Multi-view Frontal Face Image Generation: A Survey 本文首发于极市平台 作者:宁欣1,2,3,南方哲2,3,许少辉2,3,于 ...

  5. [论文笔记] A Survey of Software Refactoring(TOSE, 2004)第一部分

    Time:8 hours Timespan:Dec 8 – Dec 14 (杂事多,断断续续看了一周,终于把这篇综述看完了) Tom Mens, Tom Tourwé (2004). A Survey ...

  6. Automatic generation of PO (ME56 ME59N)

    使用ME51N创建PR后,可以通过设置 Material Master Data:Auto PO Vendor Master Data:Auto PO 之后 Assign source of supp ...

  7. 论文笔记:Editing-Based SQL Query Generation for Cross-Domain Context-Dependent Questions

    论文笔记:Editing-Based SQL Query Generation for Cross-Domain Context-Dependent Questions 目录 论文笔记:Editing ...

  8. 文献综述 笔记软件_论坛软件综述

    文献综述 笔记软件 The 'forum' or 'discussion board' plays a major part on most successful Websites, providin ...

  9. Automatic Generation of Visual-Textual Presentation Layout

    ACM TOMM 2017最佳论文:让AI接手繁杂专业的图文排版设计工作近日,美国计算机学会会刊ACM TOMM宣布把2017 Nicolas D. Georganas Best Paper Awar ...

最新文章

  1. 工业物联网LCD数码屏的驱动原理及低功耗设计(华大半导体HC32L136)
  2. 远程办公在美国有多受欢迎?有人宁愿降薪 50% 也不愿再回办公室
  3. 解决gitosis中authorized_keys不自动更新问题
  4. 摆脱阅读黑洞,退订RSS
  5. 机器学习、深度学习、强化学习课程超级大列表!
  6. java jint,JNI:将unsigned int转换为jint
  7. 1.2 函数间隔和几何间隔理解2
  8. linux中使用随机数
  9. ubuntu报错E: 无法获得锁 /var/cache/apt/archives/lock - open (11: 资源暂时不可用)E: 无法对目录 /var/cache/apt/archives/
  10. 在Intel处理器上,修改mitigations参数使Linux系统运行得更快
  11. 【DevCloud · 敏捷智库】两种你必须了解的常见敏捷估算方法
  12. Sql Server之旅——第二站 理解万恶的表扫描
  13. 陕西大数据产业建设总投资达500亿元
  14. 结对-结对编程项目作业名称-需求分析
  15. viewStub 延迟布局加载
  16. 计算机联锁系统硬件结构,计算机联锁系统各部硬件.ppt
  17. springMVC 拦截器 过滤器 区别 执行顺序
  18. Windows11 使用IE浏览器
  19. hexo next auto_excerpt无法使用
  20. 成语——》让我留在你身边

热门文章

  1. SitePoint播客#144:免费增补Schmeemium
  2. 转载前几天对我的一次“采访”稿
  3. 使用Apriori进行关联分析
  4. 计算机在线试卷及答案,计算机应用基础试卷及答案.pdf
  5. 重磅!国内首个三维重建系列视频课程,涉及SFM、立体匹配、多视图几何、结构光、单目深度估计等(最新版)...
  6. 7-211 正常血压
  7. 自定义WordPress登陆后台
  8. 十年蓄势,新基建风口,紫光云如何后发先至?
  9. 四川南充商会商务运作百分百赚钱吗?是不是骗人的?
  10. day92(6.12)