Page 132 - 《软件学报》2025年第9期
P. 132
谢生龙 等: 基于多模态融合的软件缺陷协同分派方法 4043
√
其中, η t i j = 1/ |Neigh b i ||Neigh d j |, 是一个图拉普拉斯范数, Neigh b i 和 Neigh d j 表示 bug b i 和开发者 d j 的第一跳邻居.
从表示学习的角度来看, 反映了历史 bug 对开发者能力或兴趣的贡献程度; 从消息传递的角度来看, 可以被
η t i j η t i j
解释为一个折扣因子, 表示传播的消息随着路径长度的增加而衰减. ℜ 1 、 ℜ 2 ∈ R d ′ ×d 为卷积过程中的训练权值矩
′
阵, 用于提取有用信息; d 为卷积变换大小. 与只考虑 p 0 贡献的传统图卷积网络不同, 这里特意将 p 0 和 q 0 之间的
b i b i d j
0
交互作用编码到基于 p ⊙q 0 传递的消息中. 其中, ⊙表示元素乘积运算, 这使得消息依赖于 p 0 和 q 0 之间的相关
b i d j b i d j
程度, 进而可以通过相似的 bug 传递更多的消息. 这不仅提高了模型表达能力, 也提高了其预测性能.
(2) 消息聚合. 接下来, 需要聚合从 b i 邻域传播的消息, 以强化 b i 的表示. 本文将聚合函数定义为:
∑
1 0
p = F aggr ℜ 1 p +ℜ 2 m b i →d j (8)
b i b i
d j ∈Neigh b i
其中, p 1 表示在第 1 个向量卷积层得到 bug b i 的表示, F aggr (·) 为聚合函数. 这里选用可以将信息编码为正信号和
b i
小负信号的 LeakyReLU 作为激活函数. 公式 (8) 中除了聚合从邻居 传播的消息外, 还考虑了 ℜ 1 p , 即 b i
0
Neigh b i
b i
. 因此, 有效保留了 bug 原始特征的信息. 类似地, 进一步通过聚合其所连接的开发者传播消息来得
的自连接
m b i →b i
1
到 d j 的表示 q :
d j
∑
1 0 (9)
q = F aggr ℜ 1 q +ℜ 2 m b i →d j
d j d j
b i ∈Neigh d j
其中, q 1 表示在第 1 个向量卷积层得到开发者 d j 的表示; F aggr (·) 同样为聚合函数, 这里选仍然选用 LeakyReLU 作
d j
为激活函数. 向量卷积层在这里的优势在于显式地利用一次卷积信息来关联 bug 和开发者表示.
3.3.2 卷积推广
高阶连接对于协作信号编码和 bug-开发者之间的相关性分析是至关重要的. 因此, 通过一次连通性建模卷积
的聚合表示后, 再采用堆叠的方式实现更多卷积层的计算, 从而达到探索高阶连通性信息表达的目的. 为此, 本文
采用公式 (10) 所示的卷积函数对 bug 节点进行卷积推广:
( ( ) )
l
p = W S F S q l−1 | d j ∈ Neigh b i (D) + p l−1 (10)
b i aggr d j b i
S
l
d
l
其中, p ∈ R 为第 层卷积的 bug 表示, W ∈ R 为卷积权值矩阵, 表示包含与 d j 相邻的 bug , S 是一个
b i F
b i Neigh b i aggr
线性聚合函数, 可以对所有的元素进行聚合操作.
对开发人员节点进行卷积推广时, 这里同样采用了类似公式 (10) 的 bug 节点卷积函数. 通过增加图中隐藏的
空间特征来强化开发人员的节点表示. 具体形式如下:
( ( ) )
l
q = W T F T p l−1 (B) +q l−1 (11)
d j aggr b i | b i ∈ Neigh d j d j
其中, q ∈ R 为第 层卷积时的开发者表示, Neigh d j 表示包含与 bug b i 相邻的开发人员 , T 同样为一个线性
d
1
d j F
l
d j aggr
聚合函数. 根据公式 (11), 通过权值矩阵 W ∈ R d×d 变换后得到第 l 层开发人员节点的卷积向量表示.
T
3.4 协同分派推荐
本文将 bug 分派建模为 bug 与开发人员相关性的预测, 即图学习过程中两类节点之间链接的预测. 对于每个
bug 报告节点, 将其表示向量与所有开发者节点的表示向量进行内积运算, 得到 bug 报告与所有开发者之间的分
派相关度评分. 最终根据得分对开发者进行推荐排序, 并将 bug 报告分派给排序列表中最前的开发者.
这里的预测是建立在 bug 和开发者最终的表示基础上. 通过 l 层卷积后, 得到了开发者的多个表示形式, 即
{ }
q ,q ,...,q , 由于在不同卷积层中获得的开发者表示包含了不同连接传递的消息, 故其能够反映开发者的能力、
2
l
1
d j d j d j
兴趣及对 bug 报告的贡献. 因此, 将其连接起来, 构成开发者的最终表示向量 q = q ||q ||...||q ; 类似地, 对 bug 也
1
0
l
∗
d j d j d j d j
{ }
进行同样的操作, 将不同卷积层学习到的 bug 表示 p , p ,..., p l 连接在一起, 得到最终的 bug 向量表示 p =
1
2
∗
b i b i b i b i
p ||p ||...||p . 此时, 再采用公式 b i 的可能性:
1
l
0
(12) 进行内积运算, 以预测 d j 修复
b i b i b i

