Beyond Natural Language Perplexity: Detecting Dead Code Poisoning in Code Generation Datasets

📄 arXiv: 2502.20246v2 📥 PDF

作者: Chi-Chien Tsai, Chia-Mu Yu, Ying-Dar Lin, Yu-Sung Wu, Wei-Bin Lee

分类: cs.CL

发布日期: 2025-02-27 (更新: 2025-02-28)


💡 一句话要点

提出DePA,通过行级困惑度分析检测代码生成数据集中存在的死代码污染问题

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 死代码检测 代码生成 数据集清洗 困惑度分析 语言模型

📋 核心要点

  1. 现有token级困惑度分析方法难以有效检测代码生成数据集中存在的死代码污染,因为编程语言具有独特的结构和上下文特性。
  2. DePA的核心思想是利用代码行之间的上下文关系,计算行级困惑度,并通过与文件整体分布比较来识别异常代码行。
  3. 实验结果表明,DePA在检测F1分数和受污染段落定位精度上显著优于现有方法,并大幅提升了检测速度。

📝 摘要(中文)

大型语言模型(LLM)在代码相关任务中的应用日益广泛,但也引发了对其训练数据集安全性的担忧。其中一个关键威胁是死代码污染,即向训练数据中注入语法有效但功能冗余的代码,以操纵模型的行为。这种攻击会降低神经代码搜索系统的性能,导致有偏差或不安全的代码建议。现有的检测方法,如token级困惑度分析,由于编程语言的结构和上下文特性,无法有效识别死代码。本文提出了一种新颖的行级检测和清洗方法DePA(Dead Code Perplexity Analysis),该方法根据代码的结构属性进行定制。DePA通过利用代码行之间的上下文关系计算行级困惑度,并通过将其困惑度与文件中整体分布进行比较来识别异常行。在基准数据集上的实验表明,DePA显著优于现有方法,在检测F1分数上提高了0.14-0.19,在受污染段落定位精度上提高了44-65%。此外,DePA将检测速度提高了0.62-23倍,使其适用于大规模数据集清洗。总而言之,通过解决死代码污染的独特挑战,DePA为保护代码生成模型训练数据集的完整性提供了一个强大而高效的解决方案。

🔬 方法详解

问题定义:论文旨在解决代码生成模型训练数据集中存在的死代码污染问题。现有的token级困惑度分析方法无法有效识别死代码,因为它们忽略了编程语言的结构化特性和代码行之间的上下文关系,导致检测精度较低,且效率不高。

核心思路:DePA的核心思路是利用代码的结构化特性,通过分析代码行之间的上下文关系来检测死代码。它假设死代码行的上下文关系与正常代码行不同,因此可以通过行级困惑度来区分。通过比较每行代码的困惑度与文件整体困惑度分布,可以识别出异常的代码行,即潜在的死代码。

技术框架:DePA的整体流程包括以下几个步骤:1) 数据预处理:对代码数据集进行清洗和格式化;2) 行级困惑度计算:利用语言模型计算每行代码的困惑度,考虑代码行之间的上下文关系;3) 异常检测:将每行代码的困惑度与文件整体困惑度分布进行比较,识别出异常的代码行;4) 死代码清洗:将检测到的死代码行从训练数据集中移除。

关键创新:DePA的关键创新在于其行级困惑度分析方法,它充分考虑了代码的结构化特性和上下文关系,从而能够更准确地检测死代码。与现有的token级困惑度分析方法相比,DePA能够更好地捕捉死代码的语义特征,并减少误报。此外,DePA还具有较高的检测效率,适用于大规模数据集的清洗。

关键设计:DePA的关键设计包括:1) 使用预训练的语言模型(如GPT系列)来计算行级困惑度;2) 定义合适的困惑度阈值,用于区分正常代码行和死代码行;3) 采用统计方法(如Z-score)来比较每行代码的困惑度与文件整体困惑度分布;4) 优化代码实现,提高检测速度。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,DePA在检测F1分数上比现有方法提高了0.14-0.19,在受污染段落定位精度上提高了44-65%。此外,DePA的检测速度也显著提升,提高了0.62-23倍,使其能够应用于大规模数据集的清洗。这些结果表明,DePA是一种有效且高效的死代码检测方法。

🎯 应用场景

DePA可应用于大规模代码生成模型训练数据集的清洗,提高模型的安全性和可靠性。通过检测和移除死代码,可以减少模型训练过程中的偏差,提高代码搜索和代码建议的准确性。此外,DePA还可以用于代码审计和安全分析,帮助开发人员识别潜在的安全漏洞和恶意代码。

📄 摘要(原文)

The increasing adoption of large language models (LLMs) for code-related tasks has raised concerns about the security of their training datasets. One critical threat is dead code poisoning, where syntactically valid but functionally redundant code is injected into training data to manipulate model behavior. Such attacks can degrade the performance of neural code search systems, leading to biased or insecure code suggestions. Existing detection methods, such as token-level perplexity analysis, fail to effectively identify dead code due to the structural and contextual characteristics of programming languages. In this paper, we propose DePA (Dead Code Perplexity Analysis), a novel line-level detection and cleansing method tailored to the structural properties of code. DePA computes line-level perplexity by leveraging the contextual relationships between code lines and identifies anomalous lines by comparing their perplexity to the overall distribution within the file. Our experiments on benchmark datasets demonstrate that DePA significantly outperforms existing methods, achieving 0.14-0.19 improvement in detection F1-score and a 44-65% increase in poisoned segment localization precision. Furthermore, DePA enhances detection speed by 0.62-23x, making it practical for large-scale dataset cleansing. Overall, by addressing the unique challenges of dead code poisoning, DePA provides a robust and efficient solution for safeguarding the integrity of code generation model training datasets.