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

周光有 等: 基于关系图卷积网络的代码搜索方法                                                         2875


                                               表 6    在  FRank 上的评估结果  (续)

                                        Query                  GraphSearchNet       GraphCS
                                   Nelder mead optimize            NF                 NF
                             Hash set for counting distinct elements  NF              NF
                               How to get database table name       1                  3
                                    Find int in string              3                  2
                                   Get current process id           2                  4
                                  Regex case insensitive           NF                  5
                                Custom HTTP error response          5                  3
                            How to determine a string is a valid word  1               3
                                  HTML entities replace             2                 NF
                                   Set file attrib hidden          NF                  4
                             Sorting multiple arrays based on another  NF             NF
                                 String similarity levenshtein      8                  6
                                How to get HTML of website          1                  4
                                                    GraphCS
                    从表   6  中可以看出, GraphSearchNet 未搜索到结果个数为       11  个, GraphCS  未搜索到结果个数为     7  个, 并且
                 GraphCS  方法返回的在   Top1  处的符合查询要求的代码片段个数也更多. 从整体上分析, GraphCS                方法大多数搜索
                 结果的   FRank 值更小, 相关的正确结果更靠前. 例如对于真实的查询语句                 convert decimal to hex, GraphSearchNet
                 的  FRank 值为  7, GraphCS  的  FRank 值为  4, 意味着  GraphCS  的返回结果列表第  4 个符合查询要求, 而  GraphSearchNet
                 在结果列表第     7  个才找到符合要求的结果. 综上所述, 在真实场景              Query  测试集上的  FRank 值表明, 本文的方法
                 相比  GraphSearchNet 有一定的进步, 可以搜索到更符合查询要求的代码片段.
                  3.6   语义匹配操作的影响
                    为了评估本文模型的语义匹配策略的有效性, 进行了消融研究评估以下模型变体的性能. RGCN                              是指不采用
                 任何语义匹配策略的模型变体, 在图编码之后对节点嵌入直接应用池化操作                         FCMax, 并用余弦距离度量相似度分
                 数. Node-level 是指单独应用节点层面的匹配策略, 对嵌入后的节点集基于多视角匹配函数进行匹配更新. Graph-
                 level 是指单独应用图层面的匹配策略, 在得到图全局上下文感知的整体嵌入表示之后, 应用神经张量网络得到一
                 对图的相似性向量并输入多层全连接神经网络得到相似度得分. 表                      7  展示了它们的对比实验数据.

                                                表 7    语义匹配操作的影响 (%)

                                           FB-Java dataset                     CSN-Python dataset
                     Model
                                 MRR      S@1      S@5      S@10      MRR      S@1       S@5      S@10
                     RGCN        75.5     64.3     89.6      93.8      79.2     70.7     90.5     94.8
                    Node-level   84.4     79.1     93.1      94.9      85.6     79.8     94.5     96.2
                    Graph-level  71.2     70.5     81.9      85.1      72.9     71.8     86.8     89.3
                     GraphCS     87.1     80.1     95.2      96.6      88.3     80.6     97.7     98.8

                    从表  7  中可以看到, 采用匹配策略的模型                 比模型变体    RGCN  取得了更好的搜索性能. 还可以明显看
                 出, 节点层面的跨图匹配策略比图层面的全局匹配策略得分更高, 证明使用多视角匹配函数更新节点嵌入的策略
                 在  GraphCS  模型中贡献的性能更多. 我们猜测, 神经张量网络虽然能够在多个维度上捕获图对的相似性模式, 但
                 相似性向量通过多层全连接网络和激活函数得到的得分可能不如使用余弦函数获得的得分高. 另外, 直接使用图
                 卷积神经网络编码而不应用任何匹配操作的简单模型                   RGCN  还是比大多数基线模型性能更强大, 这证明了使用
                 图结构数据和关系图卷积网络对于查询文本和代码片段都是有效的, 因为图学习能够捕获更多的结构语义信息.
                  3.7   候选代码片段的大小对模型效果的影响
                    本文参考以往工作       [22−24] 的惯例, 将候选代码片段设置为     100, 即一个正确的片段和       99  个随机选取的其他片段.
                 为了更好地验证候选代码片段的大小             C  对实验结果的影响, 本文进一步探索不同候选代码片段的大小 (即                   C=100,
   294   295   296   297   298   299   300   301   302   303   304