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,