Page 212 - 《软件学报》2026年第5期
P. 212
刘浩 等: 基于图 Transformer 的变更集错误定位方法 2091
其中, h i 为第 i 个变更节点向量, q t 为错误报告中第 t 个词向量, n 为变更节点数, L 为词序列长度. 得到的相关性分
数矩阵后, 进一步利用这一矩阵来计算代码节点与错误词语之间的正负相关性分数, 有相关和不相关两个分支. 在
不相关分支中, 我们的目标是准确有效地利用不相关的更改, 使它们降低代码更改-错误报告文本对的整体相似度.
在文本模态中, 一个词语与代码节点的最大跨模态相似性反映了它相关或者不相关的程度. 因此, 计算每个错误报
告词语 q t 和所有代码更改抽象语法树节点之间的最大池化相似度:
({ } n )
neg (c)
K t = max K −S (12)
i,t
i=1
其中, K 为边界超参数. 代码更改-错误报告文本对中, 第 t 个词语和代码节点的负相关性可以通过以下方式计算:
neg
(c)
(c)
S t = S :,t ⊙Mask neg (S ) (13)
i,t
其中, Mask neg (·) 是一个掩码, 当输入为负时, 等于 1, 否则为 0; ⊙ 表示点乘; K 为相似性边界, 设置为超参数. 根据
neg 我们计算出代码变更节点对
S t q t 的相似度表示:
neg
S neg,t = f sim !(h ,q t ,W t ), t ∈ [1,L] (14)
i
sim
S neg,t neg 对应的最负相关的 s 节点向量. W t ∈ R m×d 旨在学习局部相似表
其中, h i 为 sim 所对应的变更节点的表示, 即 K t
示, L 代表文本的序列化标记后的长度.
相关分支旨在衡量代码更改-错误报告配对的相似程度. 本文专注于关注跨模态的共享语义, 我们首先获取查
询词; 然后, 根据查询词聚合对应的代码变更节点; 最后, 基于融合结果衡量相关更改片段的相似程度. 具体而言,
通过公式 (15) 计算跨模态注意力权重:
(
({
W inter = Softmax Mask pos S i,t −k } n )) (15)
i,t λ t=1
其中, W inter 表示第 t 个单词 q t 和第 i 个代码更改节点之间的语义关联. Mask pos (·) 表示一个掩码, 当输入为正时等
i,t
{ }
于输入值, 否则为负无穷. 在这种情况下, 不相关的代码更改节点权重, 即 S i,t −k < 0 被清零. 对于第 i 个单词, 代
码更改节点中与之对应的共享语义可以聚合为:
∑ n
h t = W inter h i (16)
b
i,t
i=1
基于这个加权的代码更改节点特征, 单词 q t 的相似度可以表示为:
( )
pos
S t = f sim h t ,q t ,W t , t ∈ [1,L] (17)
b
最后, 代码更改节点-错误报告 (v i , q t ) 的局部相似度可以通过不相关更改和相关更改共同表示, 得到的相似度
表示将作为代码变更块和错误报告之间局部相似度的量化指标.
2.2.3 得分计算
g
pos
g
S = (S ,S new ,S t ,S t ) 来计算每个表示的聚集权重. 我们不采用定值权重给全
neg
根据全局和局部的相似性表示 old
局和局部信息, 使用定值权重无法根据具体的代码更改进行灵活调整, 会导致在某些更改下过度依赖局部信息而
忽略了全局上下文, 或者在另一些更改下过度关注全局信息而忽略了局部的关键细节, 从而影响错误定位的准确
性. 通过批量归一化 BN 处理权重, 再经线性变换以求得规范化的权重 β p . 随后, 使用这些权重聚合相似性表示, 并
将结果输入全连接层, 预测代码和错误报告的最终相似度为:
( ( ))
δ BN W f S
β p = ∑ ( ) (18)
BN W f S
z∈N δ
其中, δ 是 Sigmoid 函数, W f ∈ R m×1 表示线性变换.
(∑ )
score = FFN β p ·S (19)
z∈N δ
在所有步骤完成后, 将得到的表示向量输入前馈神经网络计算最终得分, 这一得分将作为代码与问题描述之
间相似度的量化指标, 为后续的匹配、排序等任务提供数据支撑和决策依据.
2.2.4 训 练
在本文中, 我们采用双向排序损失函数作为训练的目标函数, 该函数要求匹配的代码变更-错误报告对的相似

