From If-Statements to ML Pipelines: Revisiting Bias in Code-Generation¶
会议: ACL 2026 Findings
arXiv: 2604.21716
代码: https://github.com/MinhDucBui/Code-Bias-ML-Pipelines
领域: 代码生成 / AI公平性
关键词: 代码生成偏差, ML流水线, 特征选择, 隐性歧视, 公平性评估
一句话总结¶
揭示LLM代码生成的偏差评估严重低估了实际风险:在ML流水线生成中,敏感属性出现在87.7%的特征选择中(vs 条件语句中的59.2%),且模型能正确排除无关特征但仍选择保留种族、性别等敏感属性,显示出系统性的隐性歧视。
研究背景与动机¶
领域现状:LLM在代码生成中的应用日益广泛,偏差研究引起关注。但现有评估(如CodeGenBias、FairCoder)几乎全部通过简单条件语句(if-else逻辑)衡量偏差,如"if race == 'XX': deny_loan()"。
现有痛点:简单条件语句只能捕获显式歧视——直接将保护属性映射到结果的代码。但真实世界中歧视更常通过隐性机制出现,特别是在ML流水线中的特征选择决策。包含种族或国籍作为预测特征违反了算法公平性中"无感知公平"的基本原则。
核心矛盾:如果LLM生成的ML流水线中的隐性歧视远多于条件语句中的显式歧视,那么现有评估框架根本性地低估了偏差风险。
本文目标:(RQ1)LLM在生成ML流水线时是否表现出系统性偏差?(RQ2)这些偏差的程度相比条件语句如何?
切入角度:将评估从显式条件语句扩展到更现实的ML流水线特征选择任务。
核心 idea:LLM代码生成中的偏差远比之前认为的严重——隐性歧视(ML流水线特征选择)比显式歧视(条件语句)高出30个百分点。
方法详解¶
整体框架¶
本文不提新模型,而是设计一套对照评估:让 10 个 LLM 在 7 个公平性敏感数据集(信用评分、累犯预测等)上生成代码,每个数据集都掺有敏感属性(种族、性别)、普通非敏感属性以及刻意加进去的无关属性(如"最爱的颜色")。核心做法是对同一任务分别走「条件语句」和「ML 流水线」两条生成路线,用 Code Bias Score(CBS,即生成代码里包含敏感属性的比例)量化两条路线各自的歧视程度,从而比较显式歧视与隐性歧视的严重性。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
A["7 个公平性数据集<br/>注入:敏感属性 + 普通属性 + 无关属性"] --> DUAL
subgraph DUAL["显式 vs 隐性歧视的双轨评估"]
direction TB
B["条件语句路线<br/>if-else 显式逻辑"]
C["ML 流水线路线<br/>随机选 MLP / 随机森林 / SVM / 决策树 / 逻辑回归"]
end
DUAL --> D["计算 CBS<br/>生成代码含敏感属性的比例"]
D --> E["无关属性作为控制组<br/>剔除无关却保留敏感 = 选择性偏差"]
E --> F["多维度鲁棒性验证<br/>缓解提示 / 属性数量 / 流水线难度"]
F --> G["结论:隐性歧视 88.3% 远高于显式 58.7%"]
关键设计¶
1. 显式 vs 隐性歧视的双轨评估:同一任务两种写法
现有偏差研究几乎只用 if-else 条件语句衡量显式歧视,但真实世界的歧视更多藏在 ML 流水线的特征选择里。于是对同一数据集分别要求模型:(a) 用条件语句解决预测任务(显式路线),(b) 实现一条完整 ML 流水线(从 MLP / 随机森林 / SVM / 决策树 / 逻辑回归中随机选一种)。对比两条路线里敏感属性的使用率,就能看出模型的安全机制是否只挡得住显式歧视、却对特征选择引入的隐性歧视毫无察觉。
2. 无关属性作为控制组:区分"懒惰"和"偏差"
光看敏感属性被保留还不够,得排除"模型只是无脑保留所有属性"的可能。为此每个数据集都额外塞进 3 个明显无关的属性(如"最爱的颜色"),观察模型是否能正确剔除它们。如果模型干净利落地排除了无关属性、却仍然保留了种族、性别,那就说明这不是能力问题而是判断问题——是有选择性地留下敏感属性,比盲目全留更令人担忧。
3. 多维度鲁棒性验证:排除实验伪影
为证明高偏差不是任务难度或提示设计造成的伪影,作者在三个维度上做了压力测试:(a) 加入缓解提示明确要求避免使用敏感属性,(b) 改变属性数量,(c) 调整流水线难度级别。即使在最低难度(只要求特征选择、不写完整流水线)下,敏感属性出现率仍比条件语句高 16%,说明偏差根植于模型对"ML 流水线"这一情境的不同理解,而非难度或 prompt 措辞。
损失函数 / 训练策略¶
本文为评估研究,不涉及训练。生成统一用贪婪解码,每个任务配 50 个提示变体(GPT-5.1 辅助生成、再经人工监督),以降低单一 prompt 措辞带来的偶然性。
实验关键数据¶
主实验¶
跨所有模型和数据集的平均偏差:
| 代码类型 | 平均CBS | 统计显著占比 |
|---|---|---|
| 条件语句 | 58.7% | 多数 |
| ML流水线 | 88.3% | 98% |
典型案例(Llama-3.3-70B犯罪率预测):排除了"favorite_color"等无关属性,但保留了"race"和"foreigners"。
消融实验¶
| 鲁棒性测试 | ML流水线偏差 | 条件语句偏差 | 差距 |
|---|---|---|---|
| 标准提示 | 88.3% | 58.7% | +29.6% |
| 添加缓解提示 | 仍然更高 | 降低 | 持续 |
| 仅特征选择 | 74% | 58% | +16% |
| 不同属性数量 | 稳定 | 稳定 | 持续 |
关键发现¶
- 180个模型-数据集-属性组合中,178个在ML流水线中偏差更高,165个达统计显著
- 模型100%将敏感属性作为标准预测特征使用,没有任何公平性处理
- 代码专用模型(DeepSeek Coder、Qwen Coder)偏差与通用模型同样严重
- 即使在最简单的"仅选特征"任务中,偏差仍比条件语句高16%——这说明问题不在任务复杂度
亮点与洞察¶
- "模型能排除'最爱颜色'但保留'种族'"这个发现极具冲击力:它证明LLM不是不知道哪些属性不该用,而是在ML上下文中做出了不同的判断。这暗示模型可能学到了"在ML中种族是有用的预测特征"这一在训练数据中普遍存在的模式。
- 显式歧视 vs 隐性歧视的对比揭示了安全对齐的盲区:RLHF和安全训练主要针对显式有害输出,但对通过设计决策引入的隐性偏差几乎无效。
- 这项工作对AI部署有直接的政策含义:EU AI Act鼓励收集敏感数据用于去偏和审计,但如果LLM自动将这些数据作为预测特征,反而可能加剧歧视。
局限与展望¶
- CBS指标衡量的是歧视"风险"而非实际歧视结果——包含敏感属性不一定导致不公平输出
- 未分析生成模型的实际预测偏差(如不同群体的预测差异)
- 仅用贪婪解码,不同采样策略下结果可能不同
- 缓解策略仅测试了提示级别,模型级别的干预(如特定的安全微调)效果未知
相关工作与启发¶
- vs Liu et al. (2023): 首次发现代码生成中的偏差但仅用条件语句;本文证明这严重低估了实际风险
- vs FairCoder (Du et al., 2025): 扩展到更多任务但仍基于条件语句范式;本文根本性地改变了评估范式
- vs 算法公平性文献(COMPAS、Dutch welfare): 真实系统的歧视案例为本文提供了动机,但本文聚焦于代码生成的自动化中的偏差
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 根本性地改变了代码生成偏差的评估范式
- 实验充分度: ⭐⭐⭐⭐⭐ 10模型×7数据集×多控制条件×多鲁棒性测试
- 写作质量: ⭐⭐⭐⭐⭐ 问题定义犀利,发现极具冲击力
- 价值: ⭐⭐⭐⭐⭐ 对LLM代码生成的安全性评估有深远影响