Page 206 - 《软件学报》2024年第6期
P. 206

2782                                                       软件学报  2024  年第  35  卷第  6  期


                 置都将成为挑战. 而如果使用多标签学习, 仅需构建一个统一的模型, 从而减少模型设计负担. (2) 模型优化: 近年
                 来自然语言处理和深度学习的理论研究                [37] 已经证实了深度神经网络在对不同自然语言文本进行嵌入表示
                 (embedding) 时, 低维向量表示  (权重参数) 的高度相似性. 此外, 自然语言处理在引入深度学习和多任务学习                      [38] 后,
                 不同任务可以共享词法分析和句法分析模块                (由深度神经网络中的若干组件充当), 模型结构和训练策略进一步简
                 化. 代码评审意见属于一类特殊的自然语言              (可能包含代码元素), 即使本文提出的方法中设置的                4  个质量属性的
                 预测属于不同的分类任务, 它们仍共享对评审意见文本的低维向量表示和中间处理模型. 这种在深度神经网络模
                 型的深层针对不同分类任务作针对性设置, 但在模型浅层共享低维向量表示和中间处理模型, 将有助于增强模型
                 的学习能力, 即模型在具有更强的分类能力的同时, 还具有更强的泛化能力.
                    自动化模型的最基础部分是对评审意见文本的嵌入表示. 传统的文本嵌入技术, 如词袋模型                               (bag of words,
                 BOW)、独热编码     (one-hot encoding) 和词频-逆文件频率  (term frequency-inverse document frequency, TF-IDF) 等都
                 存在维度灾难、无法处理陌生词等问题. 近年, 一种全新的被称为                    BERT  [37] 的文本嵌入技术在多个自然语言任务
                 上取得了突破性进展. BERT       全称为“bidirectional encoder representation from Transformers”, 是由  Google 于  2018
                 年发布的一个基于       Transformers [39] 的预训练语言模型. 预训练模型指在原始任务上预先训练一个初始模型, 然后
                 在目标任务上微调初始模型, 从而提高模型解决目标任务的能力. 预训练语言模型则指的是针对自然语言处理任
                 务而预先训练的初始模型. 传统的预训练语言模型仅能实现对语言                       (文本) 的单方向建模      (从左到右或者从右到
                 左), 即只能获取单方向的上下文信息. BERT           使用深层的双向      Transformer 作为模型组件, 并使用“掩码语言模型
                 (masked language model, MLM)”在超大规模语料库上进行预训练, 从而生成融合了语言              (文本) 左右方向    (上下文
                 信息) 的语言模型. BERT    具有非常强的通用表示能力. 下游任务如文本分类、信息检索等仅需对                        BERT  做微调即
                 可取得很好的效果.
                  3.3.2    模型结构
                    本文针对代码评审意见质量评价提出的方法的整体架构如后文图                       3  所示. 在  3  层混合架构中, 最底层是“表示
                 层”. 该层设置了预训练语言模型         BERT, 用于对评审意见的嵌入表示. 中间层是“属性层”, 设置了              4 个中间输出节点
                 (合理性说明详见第       5.2  节), 用于表示对评审意见的      4  个质量属性的学习任务, 该层由神经网络中常见的全连接
                 层 的模型) 的训练时间和资源开销, 同时可以有效地提高新模型性能
                     层) 充当. 前两层共同实现了“多标签学习”范式. 前两层都属于“学习层”, 即需要通过有监督训练策略来调整
                   (1
                 各内部层的权重参数. 最后一层是“应用层”, 即通过查找预先定义的映射表                      (质量属性到质量等级) 来输出评审意
                 见的质量等级. 通过设置这样的          3  层架构, 本节实现了对第      3.1  节中提出的形式化的方法的具体化; 另一方面, 保
                 持了高度的实现灵活性, 架构中的各层组件随着未来技术的发展均可改造升级.
                  3.3.3    训练策略
                    自动化模型的训练使用了两种策略, 现介绍如下.
                    ● 自监督预训练     (self-supervised pretraining)
                    使用类似    BERT  这样的“大模型” (指模型的网络结构包含数十层, 权重参数达到数百万, 甚至上亿) 需要做预
                 训练. 常见的预训练过程一般分为两步: 第            1  步是在大规模的数据集上训练初始模型, 经此训练后的模型的权重参
                 数不再是随机值, 即学习到“知识”, 此时的模型被称作“预训练模型”; 第                   2  步是根据领域和任务, 使用领域和任务
                 相关的数据集对预训练模型的权重参数进行微调                 (fine-tuning). 预训练机制可以减少新模型     (基于预训练模型构建
                                                                    [40]
                                                                      . 尽管  Google 在发布  BERT  的同时也发布了
                 其预训练模型权重参数        (简称“预训练模型”), 但是其预训练模型使用的数据源是通用类型语料, 如维基百科等. 此
                 时的  BERT  还不具备领域和目标“知识”, 因此还需要在领域和目标任务类型语料, 如本文中, 在某一语言                          (如中文
                 或英文) 的代码评审意见数据集上做自监督预训练. 自监督预训练是一种不依赖标签的预训练方式, 这主要通过
                 BERT  的“掩码语言模型”机制来实现. 本文设计的基于             BERT  的自动化模型在训练时首先使用无标签的代码评审
                 意见样本做了自监督预训练.
                    ● 有监督微调    (supervised fine-tuning)
                    自动化模型在完成自监督预训练后即需要联合样本和标签做有监督训练, 即利用标签信息通过反向传播完成
   201   202   203   204   205   206   207   208   209   210   211