ICLR-2021 Retrieval-Augmented Generation for Code Summarization via Hybrid GNN

论文地址:Retrieval-Augmented Generation for Code Summarization via Hybrid GNN

HybridGNN:CPG检索增强+静态图与动态图融合

Abstract

摘要写得很诱人

作者指出大多数方法都是基于检索或基于生成,各有利弊

  • 基于检索:

    可以利用数据库中相似的例子,但泛化性较弱

  • 基于生成:

    泛化性较好,但不能利用相似例子

于是作者提出了将两者结合方法,一种新的 GNN 来捕获局部和全局结构信息

Introduction

自动代码注释生成是一个离解决还很远的问题,主要挑战有:

  1. 源码和自然语言语义、结构等差距很大,且各种各样
  2. 源码逻辑复杂,变量多样,使得学习到语义信息很难

Model

avatar

Retrieval-Augmented Static Graph

avatar
Graph Initialization

Code Property Graph(CPG):通过不同的边种类(Flow to,control,define/us,reach等)表示为 AST

Retrieval-Based Augmentation

因为对于代码 $c$,目的是学习一种映射把它转换到自然语言总结 $s=f©$ 。于是对于任意的代码 $c’$,其实都有 $s’=f(c’)$ 。

基于此可以推出 $s=f©-f(c’)+s’$,表示可以计算出 $c$ 和 $c’$ 语义上的不同,从而进一步通过这种语义上的不同和 $s’$ 得到 $s$。

这时任务就变成了学习函数 $s=g(c,c’,s’)$

步骤如下:

  1. 检索:

    对每个样本 $(c,s)\in D$,获得最相似样本 $(c’,s’)=argmx_{(c’,s’)\in D’}sim(c,c’)$ 其中 $c\ne c’$ , $D’$ 是检索数据库

    相似度 $z=1-\frac{dis(c,c’)}{max(|c|,|c’|)}\$,其中 $dis(c,c’)$ 是文本编辑距离

  2. 基于代码的检索增强:

    融合策略基于带有 attention 机制的初始的图表示($H_c$ 和 $H_{c’}$)

    • 注意力权重矩阵 $A^{aug}$,$A^{aug}\propto \exp(ReLU(H_cW^C)ReLU(H_{c’}W^Q)^T)$
    • 检索表示,$H’c=zA^{aug}H{c’}$
    • 合并表示,$comp=H_c+H’_c$
  3. 基于总结的检索增强:

    用 BiLSTM

Attention-Based Dynamic Graph

对于给定的 static graph,使用结构注意力机制,计算对应的邻接矩阵 $A^{dyn}$

$$
A^{dyn}{(v,u)}=\frac{ReLU(h_v^TW^Q)ReLU(h_u^TW^K)+ReLU(e{v,u}^TW^R)}{\sqrt{d}}
$$

其中 $h_v,h_u\in comp$ 是节点对 $(v,u)$ 通过 CPG 增强,这种全局注意力机制考虑了 CPG 中每对节点,不管是否有边连接

最后经过行归一化用来计算动态信息传递

$$
\tilde{A}^{dyn}=softmax(A^{dyn})
$$

Hybrid GNN

为了更好的融合静态图和动态图的信息,提出了 Hybrid Message Passing

  1. 静态信息传递

    $$
    h_v^k=SUM({h_u^{k-1}|\forall u\in \mathcal{N}(v) })
    $$

    其中 $\mathcal{N}(v)$ 是 $v$ 的直接邻居节点,对于每个节点 $v$,$h_v^0$ 是初始增强的节点嵌入表示,$h_v\in comp$

  2. 动态信息传递

    $$
    h_v^{'k}=\sum_u\tilde{A}^{dyn}{(v,u)}(W^Vh_u^{'k-1}+W^Fe{e,u})
    $$

  3. 混和信息传递

    $$
    f^k_v=GRU(f^{k-1}_v,Fuse(h_v^k,h_v^{'k}))\
    Fuse(a,b)=z\odot a+(1-z)\odot b\
    z=\sigma(W_z[a;b;a\odot b;a=b]+b_z)
    $$

Experiments

avatar