Page 290 - 《软件学报》2024年第6期
P. 290

2866                                                       软件学报  2024  年第  35  卷第  6  期


                 有更丰富的语义, 弥补了其他基线模型未对文本和代码进行细粒度匹配操作的不足. 图层面的匹配策略用于捕捉
                 代码和文本的全局关系, 首先基于注意力机制得到代码图和文本图全局上下文感知的图嵌入表示, 然后利用神经
                 张量网络得到代码图和文本图全局视角的相似性向量, 解决了其他基线模型没有进一步探索文本图和代码图全局
                 语义信息的关系的问题.

                                                     表 1    符合及其含义

                                       符号                              含义或描述
                                                                         代码图
                                          G p
                                                                         文本图
                                         G q
                                     { } N   (N,d)
                                   H p = p j j=1  ∈ R        代码图的初始节点嵌入表示, 嵌入维度为         d
                                        M    (M,d)                                       d
                                   H q = {q i } i=1  ∈ R     文本图的初始节点嵌入表示, 嵌入维度为
                                                                      多视角匹配函数
                                          f m
                                     { } N   (N, ˜ d)                                    ˜
                                   H p = ˆp j j=1  ∈ R       代码图的更新节点嵌入表示, 嵌入维度为         d
                                        M    (M, ˜ d)                                    d ˜
                                   H q = {ˆq i } i=1  ∈ R    文本图的更新节点嵌入表示, 嵌入维度为
                                      h p ∈ R d                代码图全局上下文感知的嵌入表示

                                      h q ∈ R d                文本图全局上下文感知的嵌入表示

                                     NTN ( h p ,h q)  ∈ R k   经过神经张量网络得到的相似性向量

                    • 最后是相似性搜索阶段, 根据基于多视角匹配函数的节点层面的匹配策略和基于神经张量网络的图层面的
                 匹配策略分别得到的相似度分数, 计算一对代码图和文本图的最终相似度得分. 本文提出的                             GraphCS  模型的整体
                 模型框架如图     2  所示.

                                                                                FullyConnected-
                                                                                    layer
                                                           W [1]
                                                                                               sim 2
                                                                      V
                                                                              b
                                     Attention    ReLU  ···  f m
                                                                   +
                                                                            +
                                                           W [k]
                                                                                             Average score(p, q)
                                          h p
                     Query RGCN                             Neural tensor network
                            weight sharing              q i  f m         maxpooling
                                                                            FC-
                    Code                      a i ,  j =cos(q i , p j )  ~  1  N  Cosine       sim 1
                                                               i
                                                               h P =  ∑  α i, j p j  similarity
                         RGCN                                    N j
                                           h q
                                                                            FC-
                                                         p j              maxpooling
                                     Attention
                                                   图 2 模型的整体框架图

                  2.1   图构建模块
                    本节详细介绍代码图和文本图是如何构建的. 如图                 3  所示是一个   Java 语言编写的代码片段, 其函数功能是实
                 现欧几里得算法, 计算得到两个整数的最大公约数. 这是一个可用于训练代码搜索任务的范例, 因为它包含了规范
                 的代码实现和函数功能相应的注释文本.
                  2.1.1    代码图的构建
                    Allamanis 等人  [16] 提出的  Program Graph  是表示代码结构语义最流行的一种图构建方法, 基于此方法本文构
   285   286   287   288   289   290   291   292   293   294   295