Deep code comment generation笔记

时间:2024-04-05 07:19:24

Deep code comment generation

deepcom

特点

  • 将代码注释生成任务表述为机器翻译任务。
  • 定制了基于序列的模型,以处理从源代码中提取的结构信息,以生成Java方法的注释。 特别是,提出了一种新的AST遍历方法(即基于结构的遍历(SBT))和一种特定于域的方法来更好地处理词汇表外的标记

Deep code comment generation笔记

detail

seq2seq model

encoder与decoder都是LSTM,并包含注意力机制。

经SBT遍历的AST

Deep code comment generation笔记

SBT( Structure-based Traversal )遍历

  • 从根节点开始,我们首先使用一对括号来表示树结构,然后将根节点本身放在右方括号的后面,即(1)1,如图所示。

  • 接下来,我们遍历根节点的子树,并将子树的所有根节点放入括号中,例(1(2)2(3)3)1

  • 递归地遍历每个子树,直到遍历所有节点并获得最终序列(1(2(4)4(5)5(6)6)2(3)3)1

在数据处理阶段,DeepCom使用SBT处理每个AST为一个序列。
Deep code comment generation笔记

Out-of-vocabulary tokens

因此,提出了一种新的方法来表示源代码的词汇外标记。在AST中,非终端节点具有“type”,终端节点不仅具有“type”,而且还具有“value”。 DeepCom将AST序列作为输入,词汇表包括括号,节点的所有“type”(包括非终端节点Tnon和终端节点Tterm)以及终端token的部分类型值对。我们将出现在最频繁的30,000个token中的token作为AST序列词汇表。对于词汇表之外的类型值对,DeepCom使用其“type” Tterm代替“ UNK”token来代替它们。例如,对于上面显示的代码中的终端节点“ extractFor”和“ id”,它们的类型均为“ SimpleName”,如图所示。输入模型的token应分别为“ SimpleName_extractFor”和“ SimpleName_id”。但是,由于token“ SimpleName_extractFor”不在词汇表之内,因此我们使用其type“ SimpleName”来表示它。这样,out of vocabulary由它们的相关类型信息代替无意义的单词表示。

strengths

连接代码和注释语义的概率模型

DeepCom的优势之一是通过学习源代码直接生成注释,而不是通过关键字合成注释或搜索类似代码段的注释。

通过结构信息辅助生成

不仅包括语义信息也包括结构信息。