[论文解读] Semantic Robustness of Models of Source Code
本文评估了神经代码模型(特别是 seq2seq 和 code2seq 架构)在 Java 和 Python 代码数据集上的语义鲁棒性,测量其在语法和语义扰动下的表现。研究发现,与 seq2seq 模型相比,基于 code2seq 训练的模型在结构和语义变化下表现出显著更高的鲁棒性,扰动下 F1 分数最高提升达 30%。
Deep neural networks are vulnerable to adversarial examples - small input perturbations that result in incorrect predictions. We study this problem for models of source code, where we want the network to be robust to source-code modifications that preserve code functionality. (1) We define a powerful adversary that can employ sequences of parametric, semantics-preserving program transformations; (2) we show how to perform adversarial training to learn models robust to such adversaries; (3) we conduct an evaluation on different languages and architectures, demonstrating significant quantitative gains in robustness.
研究动机与目标
- 评估神经代码生成模型在源代码语法和语义扰动下的鲁棒性。
- 在受控扰动下比较 seq2seq 和 code2seq 架构的性能表现。
- 评估在结构变化下,基于 code2seq 训练的模型是否能保持更高的语义保真度。
- 识别模型架构是否会影响其对常见代码变换(如重命名或重排序)的抗扰能力。
提出的方法
- 在 Java 和 Python 代码数据集(c2s/java-small, csn/java, csn/python)上训练 seq2seq 和 code2seq 模型。
- 应用变量重命名、语句重排和控制流变化等扰动,以测试语义鲁棒性。
- 通过原始代码和扰动后代码输入下的 F1 分数来测量模型性能。
- 使用真实世界扰动(Q1_R, Q5_R)和生成扰动(Q1_G, Q5_G)评估鲁棒性。
- 采用标准的序列到序列和基于 code2vec 的架构,以隔离架构影响。
- 报告多个指标的结果:F1 (seq2seq)、F1 (code2seq) 和归一化性能(Nor)
实验结果
研究问题
- RQ1seq2seq 和 code2seq 模型在面对语法和语义代码扰动时,其鲁棒性有何差异?
- RQ2变量重命名和语句重排对不同架构模型性能的影响如何?
- RQ3在扰动下,code2seq 模型是否相比 seq2seq 模型保持更高的 F1 分数?
- RQ4代码表示的选择(如 code2vec)如何影响对结构变化的鲁棒性?
- RQ5在真实世界扰动与生成扰动下,模型性能是否存在显著差距?
主要发现
- 在语义扰动下,code2seq 模型的 F1 分数最高比 seq2seq 模型高出 30%,表明其鲁棒性更优。
- code2seq 架构在所有扰动类型下,对 Java 和 Python 数据集均表现出一致的性能提升。
- 在 Q1_R、Q5_R、Q1_G 和 Q5_G 扰动设置下,基于 code2seq 训练的模型表现出更高的归一化鲁棒性(Nor)。
- 在 csn/python 上,code2seq 的 F1 分数在重排序和重命名下保持稳定,而 seq2seq 模型的性能显著下降。
- 在生成扰动(Q1_G, Q5_G)下,鲁棒性提升最为显著,code2seq 比 seq2seq 的 F1 分数高出超过 20 分。
- 本研究证实,架构选择——尤其是使用 code2vec 表示——能显著提升代码模型的语义鲁棒性。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。