Page 131 - 《软件学报》2025年第9期
P. 131

4042                                                       软件学报  2025  年第  36  卷第  9  期


                                                                      {      ⟨     ⟩ }
                 关系的二部图模态数据        H = (V, E). 其中, 节点集   V = B∪ D, 边集  E = e ij |e ij = b i ,t ij ,d j  .

                 3.2   数据增强
                    为了缓解    bug  报告文本与二部图模态数据中         bug  修复记录不均衡性对分派结果的影响, 在此模块中, 首先采
                 用  K-means 方法对  bug  向量集进行聚类   [50] , 以发现与每个待分派的     bug  报告相似的  bug, 并将相似的    bug  分派给
                 相应的开发人员; 同时进行正负采样, 进一步增强原始数据, 并实现对                    bug-开发人员二部图的重构. 具体通过下述
                 两个过程实施.
                    (1) 对  bug  向量原型聚类. 根据第   3.1  节的数据预处理, 对    bug  向量  p 0   初始化后, 接着采用  K-means 聚类来计
                                                                         b i
                 算每个   bug  的聚类质心, 挖掘出如下式表达的语义原型:

                                             ∑     (    )  ∑    ∑ (        )
                                                                        i
                                                                      0
                                                     0
                                                logP p | Θ =  log  P p ,c | Θ                         (4)
                                                     b i              b i  k
                                              B             B    C B
                                                                                B
                                                          c
                 其中,   p 0   为  bug  b i  的语义向量, 其对应的原型质心为  , 且所有质心都位于空间      C  中, Θ  为相关参数集. 这里可以
                                                          i
                      b i                                 k
                 采用  Elbow [51]  或枚举观测等方法来确定    bug  向量集合适的   k 值.
                    (2) 进行新记录抽样. 本文通过正采样和负采样两种方式生成多到多的                     bug  修复记录, 进一步增强原始      bug  报
                 告数据. 首先, 对于开发人员       d j  和固定的  bug  集   B, 通过正采样收集   B 中与  b i  相似的其他所有  bug, 并随机选择  s
                 个  bug  作为正样本; 其次, 通过负采样收集除       b i  以外的所有原型   bug, 再随机选择   s 个  bug  作为负样本.
                    此时, 经过数据增强后, 一对多形式的           bug  修复记录将变成多对多, 有效地缓解了由于            bug  与开发人员特殊的
                 交互模式所产生的数据不均衡性问题. 最近的研究已表明, 将不同的标签附加到不同类别数据上的方法对提高聚
                 类质量是有效的      [51] . 因此, 为了确保增强后的   bug  记录只出现在训练阶段, 本文设置了不同的             bug  标签来区分原
                 始记录和增强记录      [52] . 具体来讲, 这里对公式   (3) 分派集  T  中的  bug  分派记录  t ij , 进行了如下改写:

                                                 
                                                 3, if b i is originally assigned to d j
                                                 
                                                 
                                                 
                                                 
                                                 
                                                 2, if b i is a positive sample for d j
                                                 
                                                                                                      (5)
                                             t ij = 
                                                 
                                                  1, if b i is a negative sample for d j
                                                 
                                                 
                                                 
                                                 
                                                 
                                                  0, if b i is not assigned to d j initially
                                                    t ij = {3,2,1}  只出现在训练阶段, 以降低数据不均衡带来的影响, 而
                    按照改写后的分派记录规则, 本文规定
                 t ij = 3  只能出现在验证和测试阶段, 以避免来自增强样本的任何干扰              [53] .

                 3.3   协同分派建模
                    协同分派建模的核心任务是构建图神经网络模型, 对                 bug  和开发者语义及增强的       bug-开发者二部图信息进行
                 融合, 强化  bug  和开发者表征并沿着图结构捕获           CF  信号, 为  bug  与开发者的相关性预测提供依据. 在本节中, 首
                 先给出图神经网络一次卷积过程, 然后再推广至连续的多次卷积.

                 3.3.1    卷积计算
                    由于已修复的      bug  能够揭示开发者兴趣和能力特征, 且修复           bug  的开发者本身也可以被视为        bug  的一个关键
                 特征, 被用于分析不同      bug  之间协作的相关性. 因此, 建模时将        bug  节点  b i  初始化为   p , 开发人员节点  d j  初始化为
                                                                                  0
                                                                                  b i
                 q , 可以将这些语义信息完整地表达在各自的表示向量中, 并且能够灵活地与基于                         bug  报告学习的多数模型集成
                  0
                  d j
                 在一起, 使之具有较好的泛化能力. 为此, 本文采用图卷积神经网络的消息传递机制实现增强二部图中的开发者
                 和  bug  卷积过程. 该机制主要包含消息构建和消息聚合两个基本操作.
                    (1) 消息构建. 对于已连接的                             d j  的消息定义为:
                                          bug-开发者  (b i ,d j ), 将从  b i  到
                                                                   0
                                                              0  ,q )                                 (6)
                                                              b i  d j
                                                     m b i →d j  = ψ(p ,η t ij
                 其中,  m b i ←d j  为消息向量,  η t i j   为相关性系数, 用来控制每个边传播  (b i ,d j ) 情况,  ψ(·) 表示以向量  b i  和  d j  为输入消息
                 的编码函数, 其具体形式如下:

                                                                        0
                                                              0
                                                                     0
                                                          (ℜ 1 p +ℜ 2 (p ⊙q ))                        (7)
                                              ψ(b i ,η t i j  ,d j ) = η t i j
                                                              b i    b i  d j
   126   127   128   129   130   131   132   133   134   135   136