【A Transformer-based Approach for Source Code Summarization】


一、Table 3

在这里插入图片描述
##1、内容

  • 表3是一个消融研究,用来评估绝对位置表示对于源代码摘要任务的影响。

  • 表3中有四个模型,分别是在编码器和解码器中使用或不使用绝对位置表示的组合。

  • 表3中使用了三个评价指标,分别是BLEU,METEOR和ROUGE-L,用来衡量模型生成的摘要和人工编写的摘要之间的相似度。评价指标越高,说明摘要的质量越好。

  • 表3中的结果显示,使用绝对位置表示会降低摘要的性能,说明绝对位置表示对于学习代码表示是不必要的。

##2、为什么Table 3中在编码器中不使用绝对位置,在解码器中使用绝对位置,这一组合的结果指标最好

  • 在编码器中不使用绝对位置表示可以避免对代码标记的顺序施加不必要的约束,从而更好地捕捉代码的语义信息。
  • 在解码器中使用绝对位置表示可以帮助模型学习摘要标记的顺序,从而更好地生成流畅和连贯的摘要。

二、Self-Attention

在这里插入图片描述

##1、Self-Attention中公式的含义

Self-Attention.部分中的公式是用来计算输入向量之间的关联度和输出向量的方法。具体来说:

o i o_i oi表示第i个输出向量,它是输入向量的加权和,权重由 α i j \alpha_{ij} αij决定。

α i j \alpha_{ij} αij表示第i个输入向量和第j个输入向量的关联度,它是两个向量的点积除以 d k \sqrt{d_k} dk 再经过softmax函数的结果。

x i , x j x_i, x_j xi,xj表示第i个和第j个输入向量,它们分别乘以 W Q W_Q WQ W K W_K WK得到 Q Q Q K K K矩阵,用于计算点积。

W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV是可训练的参数矩阵,用于将输入向量映射到不同的空间,分别称为query, key, value空间。

a V i j aV_{ij} aVij a K i j aK_{ij} aKij是相对位置表示,用于捕捉输入向量之间的位置关系,它们分别乘以 W V W_V WV W K W_K WK得到 V V V K K K矩阵,用于计算加权和。

其中,dmodel表示输入向量的维度,即词向量的维度;dk表示每个attention head的维度,即Q,K,V矩阵的列数。

在Self-Attention中,输入序列中的每个元素都会与序列中的其他元素进行交互,并计算其与其他元素的相关性。这种交互是通过将每个元素的表示映射到查询、键和值向量中来完成的。对于每个查询向量,都会计算它与所有键向量之间的相关性,从而得到一个权重向量,表示与该查询向量最相关的键向量的重要性。最后,通过将权重向量与对应的值向量进行加权求和,得到该查询向量的输出。

三、Position Representations

在这里插入图片描述
##1、总结
这一部分介绍了如何在Transformer中使用绝对位置表示来学习源代码的顺序信息。具体来说:

  • 用一个可训练的矩阵WPe来编码源代码的绝对位置,得到一个位置向量。
  • 将位置向量加到输入向量上,得到一个带有位置信息的输入向量。
  • 用这个输入向量作为Transformer的输入,进行编码和解码。

作者指出,这种方法对于学习源代码的表示并不有效,因为源代码的语义不依赖于绝对位置,而依赖于两两关系。

The answer is from the web page context.

Encoding pairwise relationship这一部分介绍了如何在Transformer中使用相对位置表示来学习源代码的两两关系。具体来说:

用一个可训练的矩阵 W K W_K WK W V W_V WV来编码源代码的相对位置,得到两个相对位置向量 a K i j aK_{ij} aKij a V i j aV_{ij} aVij
将相对位置向量 a K i j aK_{ij} aKij a V i j aV_{ij} aVij加到Q,K,V矩阵上,得到带有位置信息的Q,K,V矩阵。
用这些Q,K,V矩阵进行自注意力机制,计算输入向量之间的关联度和输出向量。
作者发现这种方法可以有效地捕捉源代码的两两关系,从而提高摘要的性能。作者还探索了不同的相对距离 k k k和方向信息对于模型的影响。

四、Encoding pairwise relationship

在这里插入图片描述
##1、第一个公式的含义
这个公式是用来计算输出向量序列 o = ( o 1 , . . . , o n ) o = (o_1, . . . , o_n) o=(o1,...,on)中的每个向量 o i o_i oi。这个向量是由输入向量序列 x = ( x 1 , . . . , x n ) x = (x_1, . . . , x_n) x=(x1,...,xn)中的所有向量加权求和得到的,其中权重 α i j \alpha_{ij} αij是由相对位置表示的得分 e i j e_{ij} eij经过softmax函数归一化得到的。这个过程称为自注意力机制,它可以让模型关注输入序列中与当前位置相关的其他位置,并生成一个包含上下文信息的输出向量 。

具体来说,这个公式中的各个符号的含义如下:

  • o i o_i oi是一个 d v d_v dv维的输出向量,表示源代码中的第 i i i个词的上下文表示。
  • x j x_j xj是一个 d m o d e l d_{model} dmodel维的输入向量,表示源代码中的第 j j j个词。
  • α i j \alpha_{ij} αij是一个标量,表示 x j x_j xj对于 o i o_i oi的贡献程度。
  • W V W_V WV是一个 d m o d e l × d v d_{model}×d_v dmodel×dv维的参数矩阵,用于将输入向量映射到输出向量。
  • a i j V a^V_{ij} aijV 是一个 d v d_v dv维的相对位置向量,用于编码 x i x_i xi x j x_j xj之间的相对距离和方向信息。

这个公式可以理解为先将 x j x_j xj通过 W V W_V WV映射到输出空间,并在上面加上相对位置向量 a i j V a^V_{ij} aijV,然后用 α i j \alpha_{ij} αij作为权重来对所有映射后的向量求和,得到 o i o_i oi。这样就可以得到一个反映 x i x_i xi周围信息的输出向量 o i o_i oi

2、这个公式是用来计算输入向量序列x = (x1, . . . , xn)中任意两个向量xi和xj之间的相对位置表示的得分。这个得分反映了xi和xj在序列中的相对距离和方向对于序列的语义表示的重要性。相对位置表示是一种改进了Transformer模型中原始的绝对位置表示的方法,可以更好地捕捉源代码中的非顺序结构和长距离依赖。

具体来说,这个公式中的各个符号的含义如下:

  • e i j e_{ij} eij是一个标量,表示xi和xj之间的相对位置得分。
  • xi和xj是 d m o d e l d_{model} dmodel维的输入向量,分别表示源代码中的第i个和第j个词。
  • W Q W_Q WQ W K W_K WK 是dmodel×dk维的参数矩阵,用于将输入向量映射到查询向量和键向量。 a i j K a^K_{ij} aijK 是一个 d k d_k dk 维的相对位置向量,用于编码xi和xj之间的相对距离和方向信息。 T表示转置操作。
  • d k d_k dk 是一个常数,表示查询向量和键向量的维度,用于缩放相对位置得分。

这个公式可以理解为先将xi和xj分别通过WQ和WK映射到查询向量和键向量,然后在键向量上加上相对位置向量a K ij ,再将查询向量和键向量做点积,并除以√ dk 来缩放得分。这样就可以得到一个反映xi和xj之间相对位置关系的标量值 e i j e_{ij} eij
其中:

  • e i j e_{ij} eij x i x_i xi x j x_j xj 之间的相对位置得分。
  • x i x_i xi x j x_j xj 是源代码中的第 i i i 个和第 j j j 个词。
  • W Q W_Q WQ W K W_K WK 是参数矩阵,用于将输入向量映射到查询向量和键向量。
  • a i j K a^K_{ij} aijK 是相对位置向量,用于编码 x i x_i xi x j x_j xj 之间的相对距离和方向信息。
  • d k d_k dk 是查询向量和键向量的维度,用于缩放相对位置得分。

在这里插入图片描述
1、这个公式是用于表示源代码中两个位置之间的相对关系的。它是基于Shaw等人(2018)提出的相对位置表示方法,该方法扩展了自注意力机制,使其能够捕捉源代码中长距离的依赖关系。
在公式中, a K i j a_K{ij} aKij a V i j a_V{ij} aVij分别是用于计算键(key)和值(value)的相对位置向量, w K w_K wK w V w_V wV是嵌入矩阵, c l i p ( x , k ) clip(x,k) clip(x,k)是一个函数,它将 x x x限制在 [ − k , k ] [-k,k] [k,k]的范围内。这里的 k k k是一个超参数,用于控制最大的相对距离。作者发现,使用相对位置表示比使用绝对位置表示能够提高源代码摘要的性能,因为它能够更好地捕捉源代码中元素之间的语义关系,而不依赖于它们在序列中的绝对位置。
在这个公式中, a i j K a_{ij}{K} aijK a V i j a_V{ij} aVij分别是第i个位置和第j个位置之间的相对位置表示,用于计算注意力权重和输出向量。 w K w_K wK w V w_V wV是可学习的参数矩阵,用于编码不同的相对距离。clip函数是用于限制相对距离的最大绝对值为k,因为作者假设超过一定距离后,精确的相对位置信息就不重要了。clip函数的定义如下:
a i j K = w c l i p ( j − i , k ) K , a i j V = w c l i p ( j − i , k ) V a_{ij}^{K} = w_{clip(j-i,k)}^{K}, a_{ij}^{V} = w_{clip(j-i,k)}^{V} aijK=wclip(ji,k)K,aijV=wclip(ji,k)V
clip ( x , k ) = max ⁡ ( − k , min ⁡ ( k , x ) ) \text{clip}(x,k) = \max(-k,\min(k,x)) clip(x,k)=max(k,min(k,x))
a i j K a_{ij}K aijK W K W_K WK W V W_V WV的下标应该是 a j i K a_{ji}K ajiK

这个公式可以忽略两个位置之间的方向信息,即j在i的左边还是右边。这样做的原因是源代码的语义表示不依赖于代码标记的绝对位置,而是依赖于它们之间的相互作用。例如,表达式a+b和b+a的语义意义是相同的。忽略方向信息的公式如下:

a K i j = w K clip ( ∣ j − i ∣ , k ) , a V i j = w V clip ( ∣ j − i ∣ , k ) a_K^{ij} = w_K^{\text{clip}(|j-i|,k)}, a_V^{ij} = w_V^{\text{clip}(|j-i|,k)} aKij=wKclip(ji,k),aVij=wVclip(ji,k)

五、Overall results

1.为什么Base模型在Java中的ROUGE-L性能没有基准好呢
ROUGE-L是一种评估文本摘要的指标,它基于两个序列之间的最长公共子序列(LCS)的长度来衡量它们的相似度。LCS是指两个序列中按照原有顺序出现的最长的相同子序列。ROUGE-L的值越高,说明两个序列越相似。

根据文章中的结果,Base模型在Java中的ROUGE-L性能没有基准好,可能有以下几个原因:

  • Base模型使用了绝对位置表示,而不是相对位置表示,这可能导致它不能很好地捕捉源代码中元素之间的语义关系,而依赖于它们在序列中的绝对位置。
  • Base模型没有使用复制注意力机制,这可能导致它不能很好地复制源代码中的罕见或特定的词汇(例如函数名,变量名),而只能从词汇表中生成词汇。
  • Base模型可能受到了源代码长度和复杂度的影响,因为Java代码通常比Python代码更长和更复杂,这可能导致Base模型难以生成简洁和准确的摘要。

六、table 4

在这里插入图片描述
1、内容

  • 表4中的内容是用于比较不同的相对位置表示方法对Transformer模型的影响的。相对位置表示是一种在自注意力机制中编码两个位置之间的距离向量的方法12。它可以帮助Transformer捕捉源代码中元素之间的语义关系,而不依赖于它们在序列中的绝对位置。
  • 表4中的k表示最大的相对距离,即超过k的距离都被视为相同。Directional表示是否考虑两个位置之间的方向信息,即j在i的左边还是右边。BLEU,METEOR和ROUGE-L是三种评估文本摘要质量的指标,它们分别衡量生成摘要和参考摘要之间的n-gram重叠,词汇表达和最长公共子序列。
  • 表4中的结果显示,使用相对位置表示比不使用或使用绝对位置表示能够提高源代码摘要的性能,而且考虑方向信息比忽略方向信息更有效。另外,k的取值对性能没有太大影响,只要不太小就可以。

六、为什么使用AST没提升

使用AST的原因是它包含了代码的结构信息,但是这些信息对于生成自然语言描述并不是很有用。相反,它们会增加输入序列的长度和计算复杂度,导致模型难以检测有用的依赖关系。
在另一篇文章中,文章提出了AST-Transformer,它可以有效地利用AST中的结构信息,通过关系矩阵和树结构注意力机制来提取与代码功能相关的节点。这样,AST-Transformer可以生成更准确和流畅的摘要。

六、table5

在这里插入图片描述
1.内容

表5展示了一个基于Transformer的源代码摘要方法的性能,该方法使用了不同的隐藏层大小和层数。表5中的#Param.表示可训练参数的数量(以百万为单位),只包括Transformer参数。表5显示,更深的模型(更多层)比更宽的模型(更大的dmodel)表现更好。这与作者的假设一致,即源代码摘要任务依赖于更多的语义信息而不是句法信息。

2.怎么理解更深的模型和更宽的模型呢

更深的模型和更宽的模型是指神经网络的不同结构。更深的模型有更多的隐藏层,可以学习更复杂的特征和抽象。更宽的模型有更多的神经元,可以学习更多的细节和变化。一般来说,更深的模型比更宽的模型表现更好,因为它们可以捕捉到更高层次的语义信息。

3.为什么更深的模型能够捕捉到更层次的语义信息呢?

更深的模型能够捕捉到更高层次的语义信息,是因为它们可以学习更复杂的特征和抽象,而不仅仅是表面的细节和变化。更深的模型可以利用多层的神经网络结构,对输入数据进行逐层的变换和提取,从而获得更高维度和更丰富的表示。这些表示可以更好地反映数据的内在含义和关系,从而提高模型的泛化能力和预测准确性。

4.dmodel和layers

  • dmodel是指变压器模型中的一个参数,表示编码器和解码器输入的特征维度。dmodel决定了变压器模型的大小和复杂度,通常取值为512或768。dmodel越大,模型越能够学习更多的信息,但也需要更多的计算资源和训练时间。
  • layers是指变压器模型中的一个参数,表示编码器和解码器的层数。每一层都包含一个自注意力子层和一个前馈网络子层,它们可以对输入序列进行变换和提取。layers越多,模型越能够捕捉更深层次的语义信息,但也需要更多的计算资源和训练时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值