Page 220 - 《软件学报》2026年第3期
P. 220

田朝 等: CoDefense: 面向对抗性攻击的多粒度代码归一化防御方法                                           1183


                 越少.
                    (4) Accuracy (准确率). 准确率是测试集中正确预测样本的比例, 用于衡量代码模型在分类任务上的性能. 在
                 本实验中, 准确率还用于测量对抗性防御方法对于代码模型整体性能的影响, 以更直观的方式展示对抗性防御方
                 法是否会对原始模型的性能造成负面影响.
                    (5) BLEU-4. BLEU 已经被广泛用于评估生成任务中预测的文本与参考文本之间的文本相似度. 与先前的研
                 究保持一致, 本文选用       BLEU  的一个变体——BLEU-4     [15] 作为衡量代码摘要生成任务性能的关键测试指标. 此处,
                 BLEU-4  特别强调了使用长度为       4  个连续词汇的    n-gram (即  4-gram) 作为基本的匹配单元. 在本实验中, BLEU-4
                 用于衡量代码模型的性能以及对抗性防御方法对代码模型整体性能的影响.
                    (6) 总运行时间   TRT (total running time). 我们用对抗性防御所花费的总运行时间来衡量对抗性防御方法的效
                 率. 更少的运行时间意味着更高的防御效率.
                  4.5   实验设计
                    针对本文的     3  个研究问题, 我们均采用目前最广泛使用的对抗性训练方法作为对比方法, 评估                        CoDefense 在
                 防御对抗性攻击方面的有效性和效率. 与现有研究                [16] 保持一致, 对于每个任务, 将原始测试集         Data test  均分成两部

                 分, 分别记为   Data test-1   和  Data test-2 . 其中,  Data test-1   作为微调集, 而  Data test-2  作为评估集. 对于对抗性训练方法, 我们
                 分别使用对抗性攻击方法为微调集             Data test-1  中的每个样本生成一个攻击成功的对抗性样本. 需要注意的是, 如果
                 当前的对抗性攻击方法无法生成攻击成功的对抗性样本, 则选择正确预测的置信度                           (对于分类任务) 或     BLEU-4  分
                 数  (对于生成任务) 下降最大的对抗性样本. 因此对于相同的任务, 不同的对抗性攻击方法和代码模型构建的对抗
                 性微调集的大小保持一致. 最终, 我们得到了对抗性微调集                  Data test-1 , 并将其与原始训练集结合, 形成增强训练集
                                                                   adv
                 以训练新的模型      M adv . 为了保证实验的公平性, 在代码模型的对抗性训练过程中, 超参数的设置与原始模型                        M  的
                 训练完全相同. 类似地, 对于       CoDefense, 首先对原始训练集     Data train  进行代码归一化, 生成数据规模完全一致的归
                 一化训练集    Data train  , 然后使用相同的超参数训练得到新的模型         M defense .
                              normal
                    对于研究问题      1, 我们首先评估不同的对抗性攻击方法对于原始模型                  M  在评估集   Data test-2   上的攻击成功率
                 (即  ASR). 然后, 同样使用评估集    Data test-2 , 分别评估了  CoDefense 和对抗性训练策略对于不同对抗性攻击方法的
                 防御成功率    (即  DSR) 和错误防御率    (即  FDR), 以比较两种对抗性防御方法的有效性. 对于对抗性训练策略, 本文
                 分别使用   3  种对抗性攻击方法生成对抗性样本作为增强数据对模型进行训练.
                    对于研究问题      2, 我们分别评估了    CoDefense 和对抗性训练策略的总运行时间           (即  TRT), 以比较两种对抗性防
                 御方法的效率.
                    对于研究问题      3, 我们分别评估了基于      CoDefense 和对抗性训练策略得到的增强后的模型             (即   M adv  和  M defense )

                 和原始模型    M  在评估集   Data test-2  上的性能  (即  Accuracy  和  BLEU-4). 这有助于探索两种对抗性防御方法是否会对
                 原始模型的性能造成负面影响.
                  4.6   实现及环境配置
                    本文使用    Python 3.8  实现了  CoDefense, 并基于  Tree-Sitter 0.20.4 [76] 和  srcML 1.0 [77] 对代码片段进行解析与代
                 码归一化. 对于对抗性攻击方法          WIR-Random [21] 、ALERT [19] 和  StyleTransfer [16] , 我们采用了对应作者提供的开源
                                                  [1]
                                                                       [6]
                 代码. 所有预训练代码模型        (即  CodeBERT 、CodeGPT 和 [7]  PLBART ) 均从  Huggingface [78] 下载. 超参数的详细
                 设置可以在本项目主页中找到. 所有的实验均在                Intel Xeon Gold-6326  服务器上完成, 操作系统为   Ubuntu 22.04.3
                 LTS, 内存为  512 GB, 配备两个  24 GB  的  GeForce RTX 3090 GPU.
                  5   结果分析

                    ● 研究问题    1: 与现有方法相比, CoDefense 在防御不同对抗性攻击方面的效果如何?
                    表  5  详细展示了   CoDefense  及其  3  个对比方法在防御对抗性攻击方面的防御成功率               (DSR) 和错误防御率
                 (FDR). 值得注意的是, 第    5–7  列  (Adv-Train  列) 分别代表了基于  3  种对抗性攻击方法   (即  WIR-Random、ALERT
   215   216   217   218   219   220   221   222   223   224   225