Page 310 - 《软件学报》2021年第7期
P. 310

2228                                     Journal of Software  软件学报 Vol.32, No.7,  July 2021

                 成.给定一个模块 k 和一个语言模型 M,则模块的 CE 值由式(9)计算,即 CE M (S k ),其中,S k 表示模块 k 的代码 token
                 序列,M 已在代码 token 序列的语料库上训练.
                    定义 2.  代码逆序序列的交叉熵度量元(CE-Inv)是一种代码度量元,其值由语言模型度量软件模块的代码
                                                                                               
                                                         ,
                 逆序序列生成.给定一个模块 k 和一个语言模型 M 则模块的 CE-Inv 值由式(9)计算,即 CE                    ,S k  其中, S 表示
                                                                                                   k
                                                                                        M
                                    
                 模块 k 的代码逆序序列, M 已在代码逆序 token 序列的语料库上训练.
                    定义 3.  修正的代码交叉熵度量元(M-CE)是一种代码度量元,其值由加权语言模型度量软件模块的代码序
                                                       ,                             (),S  这里,S k 表示模块 k
                 列生成.给定一个模块 k 和一个加权语言模型 M 则模块的 M-CE 值由式(9)计算,即 CE 
                                                                                    M  k
                             
                 的代码序列,且 M 已在代码 token 序列的语料库上进行了加权训练,训练方法由式(5)定义.
                    定义 4.  修正的代码逆序序列交叉熵度量元(M-CE-Inv)是一种代码度量元,其值由加权语言模型度量软件
                                                                      
                                                                      
                                                                       ,
                 模块的代码逆序序列生成.给定一个模块 k 和一个加权语言模型 M 则模块的 M-CE-Inv 值由式(9)计算,即
                                                      
                                                        
                 CE   (),S k  这里, S 表示模块 k 的代码逆序序列,且 M 已在代码逆序 token 序列的语料库上进行了加权训练,训练
                              k
                   M 
                 方法由式(5)定义.
                    (2)  度量元的生成方法
                    以 M-CE 度量元为例,阐述 CE 类度量元的生成方法.
                    步骤 1.  从软件仓库中提取待测软件模块对应的源代码区域.
                    步骤 2.  对源代码集进行数据预处理工作            [48,50] ,如移除注释、代码词化等.
                    步骤 3.  加载已训练的语言模型参数.在已标注质量类型的代码样本集上,按照第 2.2 节中的方法训练加权
                                                            * 
                         
                          ,
                 语言模型 M 之后将加载了(准)最优参数的模型记作 M
                                                             .
                                                                                                     * 
                    步骤 4.  利用已训练的语言模型计算待测软件模块的 M-CE 值.按照 CE 计算公式(9),利用已训练的 M 对
                 软件模块的代码序列进行熵值计算.
                 2.4   进一步讨论
                    (1)  可解释性的讨论
                    近年来,针对机器学习,特别是深度学习可解释性的研究热度攀升.根据获取可解释能力的时间,可将可解
                 释机器学习技术分为两类:事前(ante-hoc)可解释性和事后(post-hoc)可解释性               [9,52] .其中,事前可解释性也称作内
                 生(intrinsic)可解释性,其通过构建自身可解释模型实现(如贝叶斯模型、规则模型、注意力模型等),将可解释性
                 直接融入到模型结构.事后可解释性是指通过开发可解释性技术(如特征重要性分析、表征解释、局部线性解
                 释等)解释已训练好的机器学习模型.下面重点从事前可解释性方面讨论本文方法的可解释性.
                    1) W-NLM 具有内生可解释性.语言模型是根植于统计 NLP 的一类重要模型,旨在为语言序列赋予一个发
                 生概率.给定一个长度为 L 的语言序列 S           w w  ...w 那么序列 S 的发生概率可用其联合概率表示:
                                                         ,
                                                   1  2  L
                                                                      L
                                    ( ) 
                                                                           |
                                                                   )=
                                                           ,
                                         ( ) (Pw w
                                   PS   Pw      |  )... (P w  | w w  ,...,w  1   ( Pw w  ,...,w  ).
                                           1   2  1     L  1  2  L       i  1   i  1
                                                                     i 1
                                                                  ˆ
                                                                                                   ˆ
                    实际中通常以极大似然估计方法估算参数化的序列概率 (; ),PS  其中,为待估计的模型参数.建模 (; )PS 
                 的方法有多种,目前,基于神经网络的 NLM 技术较为流行.总的说来,NLM 具有内在动力学机制.类似的情况还
                 包括神经图灵机、贝叶斯深度学习等,它们较一般端到端的“免模型”深度学习架构具有更强的内生可解释性(此
                 外,NLM 还易与注意力机制等可解释技术相结合,如我们的早期工作                     [53] ).
                    2) CE 度量元具有内生含义.受自然语言统计特性启发,Hindle 等人最早提出了软件代码的“自然性”概
                 念.序列的自然性一般由 CE 值表征,若 CE 值越高,则表明序列的发生概率越低.为此,CE 度量元还可理解为是
                                                                             ˆ
                 一种序列异常度或“惊奇度”的度量.数学意义上,CE 值表示所有条件概率 ( Pw                        w i  | w 1 ,...,w i 1 ) 的平均负对数
                 值.其指数形式(即困惑度)表示这些条件概率几何平均值的倒数,即模型成功预测每个词平均概率的倒数.
                 由此可以看出,CE 类度量元具有内生含义,较一般 DNN 学习出的缺乏物理含义的自动特征更具可解释性
                 优势(见第 1.3 节).后文我们还将通过实验分析不同度量元与问题的相关性和贡献,以进一步(事后)解释特
   305   306   307   308   309   310   311   312   313   314   315