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,表示可以计算出 cc 语义上的不同,从而进一步通过这种语义上的不同和 s 得到 s

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

步骤如下:

  1. 检索:

    对每个样本 (c,s)D,获得最相似样本 (c,s)=argmx(c,s)Dsim(c,c) 其中 ccD 是检索数据库

    相似度 z=1dis(c,c)max(|c|,|c|)$dis(c,c’)$ 是文本编辑距离

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

    融合策略基于带有 attention 机制的初始的图表示(HcHc

    • 注意力权重矩阵 AaugAaugexp(ReLU(HcWC)ReLU(HcWQ)T)
    • 检索表示,$H’c=zA^{aug}H{c’}$
    • 合并表示,comp=Hc+Hc
  3. 基于总结的检索增强:

    用 BiLSTM

Attention-Based Dynamic Graph

对于给定的 static graph,使用结构注意力机制,计算对应的邻接矩阵 Adyn

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

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

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

˜Adyn=softmax(Adyn)

Hybrid GNN

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

  1. 静态信息传递

    hkv=SUM(hk1u|uN(v))

    其中 N(v)v 的直接邻居节点,对于每个节点 vh0v 是初始增强的节点嵌入表示,hvcomp

  2. 动态信息传递

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

  3. 混和信息传递

    fkv=GRU(fk1v,Fuse(hkv,hkv)) Fuse(a,b)=za+(1z)b z=σ(Wz[a;b;ab;a=b]+bz)

Experiments

avatar

Powered By Valine
v1.5.2