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
   127   128   129   130   131   132   133   134   135   136   137