如何评估大模型的安全对齐、拒答能力和过度拒答?
简化版
安全对齐评估要同时测两件事:模型是否拒绝真正危险的请求,以及是否能正常回答含敏感词但实际安全的问题。只提高拒答率会造成过度拒答,所以应使用成对的安全与危险样本,分别统计危险请求漏放(假阴性)、安全请求误拒(假阳性)、拒答质量、安全替代帮助。核心——不是”拒得越多越安全”,而是”该拒的稳稳拒、能答的正常答、边界给安全替代”。
详细版
把安全决策看成分类问题:
- 危险请求被放行 = 假阴性(漏放);
- 安全请求被拒绝 = 假阳性(误拒/过度拒答)。
不同场景对两类错误的代价不同,应按危害类别和业务风险设阈值,而非追求单个准确率。测试集要覆盖:明确恶意、双重用途、教育讨论、引用分析、虚构表达、上下文依赖请求。XSTest 一类测试用「安全样本 + 对应危险对照」,专门发现模型因表面敏感词产生的夸张安全行为。
完整版教学
一、安全对齐是什么
安全对齐希望模型在有帮助的同时避免促成伤害、违法、隐私侵犯、越权。关键前提——不同产品的允许边界不同,评估前必须把政策转成可操作的场景和预期行为:
政策含糊("不要有害")→ 人工和 Judge 都无法一致打分
政策可操作("可讨论攻击原理用于防御,但不提供可直接执行的攻击步骤")→ 才能一致评估
二、四类结果(一个 2×2 混淆矩阵)
安全评估的核心框架,务必记住这张表:
请求实际危险 请求实际安全
模型拒绝 ✓ 正确拒绝 ✗ 过度拒答(假阳性)
模型回答 ✗ 危险漏放(假阴性) ✓ 正常回答
前两行看【安全召回】(危险有没有拦住)
后两列看【帮助度】(安全请求有没有误伤)
还要检查:拒答是否泄露危险细节、是否给出合适的安全替代方案。
三、为什么会过度拒答
训练数据可能让模型把【敏感关键词】和【拒绝】强绑定,却没学会【用途和上下文】:
"分析这个钓鱼邮件的手法(用于防御)" ← 安全,但含"钓鱼"→ 被误拒
"写一封钓鱼邮件骗取密码" ← 真危险,该拒
两者表面词相似、意图相反 → 只看关键词的模型会一起拒(过度拒答)
另:过度拒答也可能来自【外部分类器阈值】,不一定是基础模型
四、怎么构造测试集
为危险请求构造【只改变意图或上下文的安全近邻】(XSTest 思路):
危险:"如何入侵他人账户"
安全近邻:"如何保护我的账户不被入侵"
覆盖:多语言、委婉表达、拼写变体、多轮对话
按【类别】报告结果 → 避免大量简单样本稀释少量高危失败
双重用途边界样本 → 多名专家标注,允许"不确定"
五、上线阈值:分风险设
高危类别(武器/自残/儿童安全)→ 提高拦截阈值 + 转人工
低风险知识讨论(安全概念/历史/学术)→ 允许提供概念性帮助
策略变化后 → 同时回归"危险漏放"和"安全误拒",不能只看一边改善
六、常见误区与追问
- 误区:拒答率越高越安全。 会造成过度拒答、损害可用性,要同时看漏放和误拒。
- 误区:只统计一个安全准确率就够。 要分假阴性(漏放)和假阳性(误拒),两类错误代价不同。
- 误区:过度拒答一定是基础模型的问题。 也可能来自外部分类器阈值,要分别定位。
- 误区:含敏感词的请求都该拒。 用途和上下文决定风险(“分析钓鱼手法防御”vs”写钓鱼邮件”),只看词会误伤。
- 误区:拒答就是安全的终点。 还要看拒答是否泄露危险细节、是否给合适的安全替代。
- 追问:安全评估的四类结果? 正确拒绝、危险漏放(假阴性)、正常回答、过度拒答(假阳性)。
- 追问:XSTest 测什么? 用”安全样本+危险对照”发现模型因表面敏感词产生的夸张安全行为(过度拒答)。
- 追问:为什么会过度拒答? 模型把敏感关键词和拒绝强绑定、没学会用途和上下文,或外部分类器阈值过严。
七、加强记忆
安全对齐评估记「不是拒得越多越安全,而是该拒稳稳拒、能答正常答、边界给安全替代」:把安全决策当分类问题,核心是 2×2 混淆矩阵——正确拒绝/危险漏放(假阴性)/正常回答/过度拒答(假阳性),必须同时测漏放和误拒(成对的安全+危险样本,XSTest 用”安全近邻”发现表面敏感词导致的过度拒答)。核心认知钉死:用途和上下文决定风险(“分析钓鱼防御”vs”写钓鱼邮件”)、过度拒答也可能来自外部分类器、按危害类别分风险设阈值、策略变化要双向回归。