Page 95 - 《软件学报》2021年第9期
P. 95

贾统  等:基于程序层次树的日志打印位置决策方法                                                         2719


         该问题,提出了一种子树上提的方法来捕获这些孩子节点的特征.如算法 2 所示:子树上提利用深度优先遍历算
         法,搜索某节点的所有子孙节点(第 2 行),然后将这些代码块依次遍历顺序排列组合成新的代码片段(第 3 行、
         第 4 行),最后将该代码片段输入已训练的神经语言模型生成新的子向量(第 5 行).在逆序组合过程中,使用该新
         的子向量替代原子向量.
             算法 1.  基于逆序组合的特征向量生成算法.
             Input: PLST and target code block(tb), n, m;
             Output: Feature vector of target code block(fv).
             1.   fv=[⋅], layer=init_layer, temp_tb=tb
             2.   while layer>0 and init_layer-layer<n do:
             3.   fv.concatenate(temp_tb.sub_vector)
             4.   left_num=0
             5.   while temp_tb.left_cb!=null and left_num<m do:
             6.   temp_tb=temp_tb.left_cb
             7.   if temp_tb.children!=null then:
             8.   temp_tb=SubtreeRaising(temp_tb)
             9.   fv.concatenate(temp_tb.sub_vector)
             10.  left_num++
             11.  temp_tb=temp_tb.father_cb
             12.  layer−−
             算法 2.  子树上提算法.
             Input: PLST, root code block of a subtree(rcb), trained PV-DM model;
             Output: feature vector of subtree(fv).
             1.   code_snippet=‘⋅’
             2.   codeblock_queue=DepthFirstSearch(rcb)
             3.   while codeblock_queue!=null do:
             4.   code_snippet.concatenate(codeblock.pop(⋅))
             5.   fv=PV-DM(code_snippet)
             图 4 是子向量逆序组合过程的一个例子,其中,N 8 是目标代码块.

















                                      Fig.4    Example of reverse composition
                                          图 4   子向量逆序组合示例

             本方法首先逆序组合生成第 4 层到第 1 层的层向量.由于 N 8 是第 4 层中唯一的代码块,排列 N 8 对应的子向
         量 v 8 并用零填充的其余部分作为第 4 层目标代码块的层向量.对于第 3 层,依次组合 N 8 的父节点 N 6 对应的子
   90   91   92   93   94   95   96   97   98   99   100