Skip to main content
QUICK REVIEW

[论文解读] DOBF: A Deobfuscation Pre-Training Objective for Programming Languages

Baptiste Rozière, Marie-Anne Lachaux|arXiv (Cornell University)|Feb 15, 2021
Software Engineering Research参考文献 58被引用 17
一句话总结

本文提出 DOBF,一种用于编程语言的新型预训练目标,通过从混淆版本中恢复原始变量名和函数名,使模型能够去混淆源代码。通过利用代码的结构语义,DOBF 在代码搜索、翻译和摘要等下游任务上优于 BERT 风格的掩码语言建模(MLM)和现有代码模型,相对性能提升最高达 12.2%,并实现了完整的去混淆与有意义的命名建议。

ABSTRACT

Recent advances in self-supervised learning have dramatically improved the state of the art on a wide variety of tasks. However, research in language model pre-training has mostly focused on natural languages, and it is unclear whether models like BERT and its variants provide the best pre-training when applied to other modalities, such as source code. In this paper, we introduce a new pre-training objective, DOBF, that leverages the structural aspect of programming languages and pre-trains a model to recover the original version of obfuscated source code. We show that models pre-trained with DOBF significantly outperform existing approaches on multiple downstream tasks, providing relative improvements of up to 13% in unsupervised code translation, and 24% in natural language code search. Incidentally, we found that our pre-trained model is able to de-obfuscate fully obfuscated source files, and to suggest descriptive variable names.

研究动机与目标

  • 为解决标准掩码语言建模(MLM)在编程语言预训练中的局限性,其未能利用代码特有的结构属性。
  • 通过引入一种从混淆代码中恢复有意义标识符的去混淆目标,改进代码的预训练。
  • 通过比随机掩码更具语义意义的噪声函数,使模型学习到更深层次的代码语义表示。
  • 证明去混淆预训练在无需自然语言对齐数据的情况下,可在多个代码理解任务中实现最先进性能。
  • 探究基于代码语义的结构化噪声是否能优于自监督预训练中的非结构化噪声。

提出的方法

  • DOBF 目标通过一个序列到序列模型进行训练,使其从所有变量和函数名均被替换为 'VAR_1'、'VAR_2' 等通用标记的混淆版本中重建原始源代码。
  • 混淆以每个标识符 0.5 的概率应用,确保同一变量的所有出现均被统一替换为相同的占位符标记。
  • 模型通过去噪自编码目标进行预训练,输入为混淆代码,目标为原始源代码。
  • DOBF 与去噪自编码(DAE)目标结合,进一步提升表示学习,训练模型通过删除和重排标记来恢复被破坏的序列。
  • 模型可从随机权重或预训练的 MLM 检查点(如 RoBERTa)初始化,以评估初始化方式对性能的影响。
  • 该方法在多种编程语言和任务上进行评估,包括无监督代码翻译、自然语言代码搜索、代码摘要和克隆检测。

实验结果

研究问题

  • RQ1基于去混淆的预训练目标是否能在编程语言表示学习中超越标准掩码语言建模?
  • RQ2使用 DOBF 进行预训练是否能提升下游代码理解任务(如代码搜索和翻译)的性能?
  • RQ3使用 DOBF 预训练的模型是否能成功对完全混淆的源代码进行去混淆并建议有意义的变量名?
  • RQ4当不使用自然语言对齐的代码数据时,DOBF 是否比 MLM 和其他预训练目标更有效?
  • RQ5将 DOBF 与其他目标(如 DAE)结合是否能进一步提升模型在代码相关任务上的性能?

主要发现

  • 与基线模型相比,DOBF 预训练在无监督代码翻译准确率上实现了 12.2% 的相对提升。
  • 在自然语言代码搜索任务中,DOBF 相较于现有方法性能提升 5.3%,优于 CodeBERT 和 GraphCodeBERT。
  • DOBF+DAE 模型在使用束搜索大小为 10 的情况下,将 Java 到 Python 的无监督代码翻译计算准确率提升了 6.8%。
  • 即使从随机权重初始化,DOBF 在克隆检测任务上仍优于 MLM,表明去混淆目标本身提供了强大的归纳偏置。
  • 使用 DOBF 预训练的模型能够对完全混淆的源文件进行去混淆并建议描述性变量名,展示了其在预训练之外的实际应用价值。
  • 使用 MLM 初始化 DOBF 并结合 DAE 的模型在所有评估任务上的性能均优于仅使用 DOBF 或仅使用 MLM 的模型,表明结构化噪声与非结构化噪声具有互补优势。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。