Page 269 - 《软件学报》2024年第4期
P. 269

王尚文 等: 基于指针神经网络的细粒度缺陷定位                                                         1847


                               嵌入模块                全连接层    编码器   隐藏状态    解码器 隐藏状态       指针网络

                                         编码后的
                      子令牌流               子令牌流
                              ...
                                                           LSTM         LSTM
                       IFStmt PrefixExp MdInvoc
                                                                                     W 1
                                                                                        Softmax
                      基于 LSTM 的 AST 路径编码器

                                                                                     W 2
                       UPDATE/DELETE/INSERT
                                         编码后的
                          编辑操作           编辑操作                                                 预测结果
                                                连接后向量
                                                   图 4 BEEP  模型结构图

                    抽象语法树路径由多个抽象语法树节点组成. 在对抽象语法树路径进行编码时, 我们先使用了一个编码矩阵
                 对每一个节点进行编码, 随后为了捕获抽象语法树路径中相邻节点所蕴含的结构特征, 我们需要利用路径中的序
                 列信息. 因此我们使用双向长短期记忆网络              (BiLSTM) 对整个路径进行编码, 神经网络最终的输出为对抽象语法
                 树路径进行编码的结果. 该过程可表示为:
                                                      (                   )
                                              V p = LSTM E p (n 1 ),E p (n 2 ),...,E p (n l ) ,
                 其中,    E p (·) 是用于编码节点的嵌入矩阵,    LSTM  代表我们采用的双向       LSTM  模型,   V p  代表抽象语法树路径  p 最终
                 的向量表示.
                                   op 中  3  部分的向量表示后, 我们将      3  部分的向量表示连接在一起作为该操作路径的向量
                    在得到了操作路径
                          [
                                 ]
                      V op = V t ;V p ;V o .
                 表示:
                    • 利用编码器-解码器网络提取特征. 假定输入的操作路径共有                   k  条, 即  {op ,op ,...,op } , 在对每条操作路径
                                                                              1  2     k
                 进行编码后, 为了提取更多的隐藏信息, 我们将其输入一个全连接层, 随后再利用基于                          LSTM  的编码器-解码器结
                 构捕获特征, 这一过程可被表示为:
                                                          (  [      ])
                                                   z i = tanh W in V t ;V p ;V o ,
                                                (e 1 ,...,e k ) = LSTM encoder (z 1 ,...,z k ),
                                                (b 1 ,...,b k ) = LSTM decoder (e 1 ,...,e k ),
                                (        )
                 其中,   W in  是维度为   d t +2d p +d o ×d hidden  的全连接层权重矩阵,    (e 1 ,...,e k ) 与  (b 1 ,...,b k ) 分别是编码器与解码器的隐
                 藏层状态.
                                                                                       (b 1 ,...,b k ) 后, 我们能够
                    • 利用指针网络获得输出. 在得到了编码器隐藏层状态                (e 1 ,...,e k ) 与解码器隐藏层状态
                 利用下式计算注意力向量:
                                                           (
                                                                     )
                                                       T
                                                   u j = v tanh W 1 e j +W 2 b j ,
                                                                                           j
                                      ,
                 其中,    j ∈ (1,...,k) v W 1 W 2  均为在模型训练过程中需要学习的参数.      u j  的数值即被用作第   个输入的注意力
                                ,    ,
                 权重:
                                                             )
                                                                      ( )
                                                 (
                                                p op j | op 1 ,...,op k = Softmax u j .
                                    u = [u 1 ,...,u k ] 归一化为输入的操作路径的概率分布. 模型最终的输出为依据分布权重由
                    Softmax 函数将向量
                 高到低排列的操作路径列表.
                    • 模型训练. 我们使用交叉熵损失函数           [60] 对模型进行训练:
                                              ∑ ∑
                                                    [     (  ) (     )   (     )]
                                        Loss =  −    Y op ·log P op + 1−Y op ·log 1− P op ,
                                              y i ∈Y  op∈y i
   264   265   266   267   268   269   270   271   272   273   274