Page 190 - 《软件学报》2026年第2期
P. 190

张育博 等: 基于依赖感知分层神经网络的代码注释增强方法                                                     669


                                                              H = [H ,H ,H ,...,H ]. 这一动态采样过程在每次训练
                                                                       ′
                                                                               ′
                                                                    ∗
                                                                ′
                                                                         ∗
                 X = [< mask >, ˆ X 2 ,< mask >,..., ˆ X j ], 掩码后的子函数表示为
                                                                    1  2  3    j
                 步骤中对批次中的每个目标函数进行迭代. 因此, 相同目标函数在不同步骤中可能会遇到不同的掩蔽子函数位置.
                 这种动态掩码策略使模型能够更有效地预测目标函数上下文中子函数的上下文语义.
                  4.3.2    掩码子函数预测
                    在掩码子函数预测的上下文中, 本文在一个多分类框架内进行操作. 具体而言, 将当前批次中的所有掩码子函
                 数汇总到一个候选子函数池中. 模型的任务是从这个池中正确预测相关的子函数. 对于每个掩码的子函数位置, 当
                 前上下文中占据该位置的原始子函数作为正样本. 相反, 在当前目标函数中共同掩码的子函数以及同一批次中其
                                                                              H 输入目标函数编码器时, 得到上
                 他目标函数中相应位置的子函数被视为负样本. 在训练阶段, 当掩码后的                       X  和
                        [h 1 ,...,h j ]. 然后,                   ′                B 个掩码子函数, 其中预测的子
                 下文表示                 h k  将用于预测原始子函数表示       H . 对于一个批次中的
                                                               k
                             B×D                   B×D    D 表示特征维度, 可以为当前批次中的每一对掩码子函数计
                 函数表示   h ∈ R  , 真实的子函数表示     H ∈ R   , 其中
                 算相似度矩阵, 具体如下:

                                               Sim(H,h) = Cosine_Similarity(H,h)                     (17)
                 其中,  Sim(H,h) 是第   个预测子函数表示和第   个原始子函数表示之间的预测相似度. 本文使用                    Softmax 函数将相
                                                    i
                                 j
                 似度标准化为每个子函数的预测概率, 如公式              (18) 所示:

                                                             (  (    ))
                                                          exp Sim h j ,H i
                                                                                                     (18)
                                                P(H,h) = ∑
                                                          B    (  (    ))
                                                            exp Sim h j ,H r
                                                          r=1
                 其中,   r ∈ [1,B],r , j, 可以被视为  h j  随机采样的负类. 最后, 本文可以对所有掩码子函数计算交叉熵损失:

                                                         1  B ∑  (   )
                                                   L msp = −  logP H i |h j                          (19)
                                                         B
                                                           i=1
                  4.4   模型微调和推理
                    在初始的预训练阶段完成后, 本文将对             DHCS  进行微调, 以适应代码注释的下游任务. 微调过程仅通过优化
                 交叉熵损失    (即公式   (2)) 来进行, 该损失函数衡量预测的注释生成概率与真实注释标签之间的差异. 需要注意的
                 是, 在预训练阶段引入的任何子函数掩码都会在微调过程中移除, 以防止丢失关键的上下文代码信息. 一旦模型完
                 成了预训练和微调, 便进入推理阶段, 生成目标函数的注释. 本文在算法                    1  中提供了训练和推理过程的全面概述.
                 算法  1. 方法的训练和推理过程.
                 输入: 目标函数    X  和子函数  [ ˆ X i ,..., ˆ X j ];
                 输出: 目标注释    Y.
                 1. 初始化子函数编码器、目标函数编码器和解码器参数;
                 2. 使用交叉熵损失     (公式  (19)) 对子函数编码器和目标函数编码器进行预训练;
                 3. 使用预训练获得的参数更新编码器;
                 4. 对模型的参数进行微调, 见公式        (2);
                 5. 使用最后一步学习的参数进行推断生成注释.

                  5   实验与分析

                    本节进行了广泛的实验, 以评估          DHCS  模型的有效性.
                  5.1   研究问题
                    本文的主要研究目标是评估            DHCS  在代码生成注释领域的提升效果. 此外, 本研究还希望验证两个以子
                 函数为导向的创新对性能的影响, 即主题感知复制机制和掩码子函数预测任务. 为此, 本文提出了以下                                  4  个研
                 究问题.
   185   186   187   188   189   190   191   192   193   194   195