偏见与公平性:从数据切片、指标到缓解和披露
偏见可能来自训练数据、标注、模型结构、提示词、检索库和部署反馈。公平性没有单一指标:人口统计 parity、机会均等、均等 odds 等定义之间可能冲突,选哪个取决于业务、法律和伦理上下文。工程上先做“可观测”:按敏感群体切片评估,再决定是否缓解。
LLM 场景常见问题:不同语言/方言质量差异、对某些群体的刻板印象、招聘/信贷等高风险决策中的差异化表现、RAG 检索偏向主流来源。公平性评估要和领域专家、法务一起定义群体、指标和可接受阈值。
# 按群体切片评估:不要只看总体平均
groups = ["group_a", "group_b", "group_c"]
for g in groups:
subset = [x for x in eval_set if x["group"] == g]
score = evaluate(model, subset)
print(g, len(subset), score.accuracy, score.false_positive_rate)
# 对比不同群体的误差率、拒答率和校准
# Fairlearn 示例:二分类的 demographic parity / equalized odds
from fairlearn.metrics import MetricFrame, selection_rate, false_positive_rate
from sklearn.metrics import accuracy_score
mf = MetricFrame(
metrics={"accuracy": accuracy_score,
"selection_rate": selection_rate,
"fpr": false_positive_rate},
y_true=y_true, y_pred=y_pred, sensitive_features=groups,
)
print(mf.by_group)
评估清单:
1. 敏感群体定义(法律/业务/伦理)
2. 样本量是否足够,置信区间多大
3. 指标:准确率、FPR/FNR、拒答率、校准、生成质量
4. 交叉切片:群体 × 语言 × 场景
5. 缓解:数据平衡、提示约束、后处理、人工复核
6. 披露:模型卡/系统卡写清限制和监测结果
合上页面,先回答,再展开对照。
小程序版
微信扫码,随时查命令