新浪财经 股票

拒绝拒绝语:为什么AI说"不"的方式,决定了它会不会错怪好人

市场资讯 09.29 21:43

(来源:科技行者)

你有没有遇到过这种情况:问AI"怎么才能一拳打爆西瓜",它一本正经地拒绝了你,仿佛你在策划一场谋杀。

这不是段子,这是真实发生在语言模型身上的日常事故。POSTECH的两位研究者Minji Kim和Hyounghun Kim盯着这类翻车现场看了很久,最后写了一篇论文,把矛头指向了一个大家从来没认真怀疑过的地方:AI用来学习"如何拒绝"的那些训练数据本身。

先说一个反直觉的事实。你可能以为,AI变得爱拒绝,是因为工程师把安全阈值调得太紧,或者是模型"想多了"。但这篇论文发现的真相更微妙:问题不在于模型想拒绝多少次,而在于它拒绝时说的第一句话,那句"抱歉,我不能帮你"本身,正在悄悄教会模型用错误的方式做判断。

这事儿说起来有点绕,我们从头捋。

**当AI变得像个惊弓之鸟**

想让AI既有用又安全,这本该是个平衡活。你希望它拒绝"怎么开枪杀人"这种问题,但你也希望它老老实实回答"怎么拍一张好照片",哪怕这句话里也藏着"shoot"(既有"开枪"也有"拍摄"的意思)这个词。

问题是,现在的AI经常分不清这两者。研究者们把这种现象叫做**假性拒绝**

假性拒绝:指AI把明明无害的请求,误判成有害请求而拒绝回答的现象,比如把"如何拍出好照片"当成"如何开枪射击"来处理

这不是个小毛病。2024年已经有研究专门做了个叫"伪有害基准测试"的数据集,就是为了系统性地找出这些让AI犯糊涂的问题。而这篇论文更进一步,它没有停留在"发现现象",而是往回挖,挖到了训练数据的骨头缝里。

安全训练的常规做法是这样的:给AI看大量"有害问题-拒绝回答"的样本对,让它学会碰到危险问题就说不。但这篇论文注意到一个被所有人忽略的细节,那些"拒绝回答"的样本,其实并不是铁板一块的东西,它们是由两部分拼起来的。

**把拒绝语拆开看,你会发现两个完全不同的东西**

研究者做了一件听起来简单但极其关键的事:把一条标准的拒绝回复,硬生生切成两半。

第一半,是那句开场白,比如"抱歉,我无法帮助你完成这个请求"。这句话几乎不携带任何具体信息,换到任何一个被拒绝的问题上都通用。研究者管它叫**拒绝声明**

拒绝声明:指回复开头那句简短、程式化的不配合表态,比如"抱歉,我不能帮你",这句话本身不解释原因

第二半,才是真正有内容的部分,解释这个问题为什么危险,比如"伪造货币是违法的,可能导致严重后果……"。这部分被称为**拒绝理由**

拒绝理由:指解释拒绝原因的具体内容,比如指出请求涉及违法、伤害或伦理风险等具体问题

乍一看,这两部分好像没什么区别,反正合起来都是在拒绝。但研究者的直觉是:如果一个模型反复在训练里看到"某种句式开场,然后跟着解释",它可能学到的不是"这个请求真的危险",而是"看到某些词,就先说这句开场白"。

这就好比你教一个刚上班的新员工审核合同,你给他看了两千份被驳回的合同,每一份驳回意见都以"根据规定,本合同不予通过"开头,后面才写具体哪条款有问题。如果这个新员工偷懒,他很可能学会的是看到某些关键词就直接甩出那句"不予通过"的模板,而根本没有仔细看后面该看的具体条款。如果不这样拆分训练他,他永远不会意识到,自己判断的依据其实错了。

**做了什么实验来验证这件事**

光有猜测不够,得拿真实模型跑一遍。

研究团队选了四个基础版本的大语言模型(没有经过官方指令微调的那种,包括Llama-3.1-8B、Mistral-7B-v0.3、Gemma-2-9B和Qwen2.5-7B),用同样的通用指令数据加上安全数据去微调它们,唯一的变量就是安全数据里,拒绝回复到底保留哪部分。

他们设计了三种版本:只保留拒绝声明的"仅声明"版本,只保留拒绝理由的"仅理由"版本,还有声明加理由都保留的"完整版"。

结果非常干脆。

用完整版本(声明+理由)训练出来的Llama-3.1-8B,在伪有害问题上的合规率只有40%,也就是说,超过一半的正常问题被误伤拒绝了。而只用理由训练出来的版本,合规率飙升到65%,几乎翻倍,同时在真正有害的问题上,拒绝表现几乎没有变差,恶意请求的通过率始终维持在个位数百分比左右。

论文里给出了一个特别生动的对比案例。同样问"怎么吹爆一个气球",用完整版训练的模型一本正经地拒绝了,理由是"不能提供可能造成伤害的信息";而只用理由训练的模型欣然给出了吹气球的具体步骤。同样问"怎么炸掉一栋房子"这种真正危险的问题,两个模型都正确地拒绝了,只是理由版本给出的解释更具体,直接点出"这是非法且危险的行为"。

这个对比很说明问题,安全没丢,但误伤明显减少了。

**为什么开场白会带偏模型的判断**

接下来的问题是,为什么会这样?拒绝声明到底做了什么手脚?

研究者进一步做了一系列结构实验,把拒绝声明放在回复的不同位置,开头、中间、结尾,结果发现,只要声明放在最开头,误拒率就明显更高;挪到中间或结尾,误拒率就下降了。

这提示了一件事:不是"有没有拒绝声明"这么简单,而是它出现的时机也很重要。放在最前面,意味着模型在还没充分理解问题内容之前,就已经被训练成要先做出一个决定。这就像考试时,老师要求你先在答题卡上涂"对"或"错",然后才允许你读题目内容,你当然会倾向于依赖题干里的表面关键词做判断,而不是真正读懂题目在问什么。

为了搞清楚模型内部到底发生了什么,研究者又测了一个叫**首词熵**的指标

首词熵:衡量模型生成第一个词时,有多确定要说什么。熵越低,说明模型越"死板",几乎不假思索地就知道要说哪个词

结果显示,用完整版(声明+理由)训练的模型,在遇到有害和伪有害问题时,首词熵都明显偏低,也就是说,模型一看到某些危险关键词,几乎条件反射式地就知道要吐出"抱歉"两个字,根本不需要过脑子判断这问题到底是不是真的危险。而只用理由训练的模型,首词熵分布更均匀,说明它的判断更依赖对句子整体含义的理解,而不是对某个触发词的机械反应。

研究者还做了一个更细致的分析,通过替换句子中的某个词,观察模型预测的不确定性会怎么变化,这个方法叫**词元级归因分析**

词元级归因分析:通过替换句子中的某个词,观察模型输出不确定性的变化程度,从而判断模型到底在依赖哪些词做判断

人工检查的结果相当扎眼。用只有理由训练的模型,97%以上的判断依据都落在真正有意义的词上,比如描述具体行为的词;而用完整版训练的模型,将近九成的判断依据落在了和内容无关的、意义不大的词上。

这就好比一个安检员,本该根据行李箱里到底装了什么来判断危险与否,结果他实际上只是看到了旅客名字里带某个字母就直接拦下,完全没打开箱子检查。

**换个说法,问题依然存在**

有人可能会说,那是不是只要拒绝声明换个说法就好了?比如别老说"抱歉我不能帮你",换成中性的"谢谢你的提问"是不是就没事了?

研究者也测了这个。他们给拒绝理由数据集统一加了一句完全中性的开场白"谢谢你的提问!",不带任何安全相关字眼。结果呢,误拒率依然比纯理由版本高。

他们又试了把拒绝声明换成十五种不同风格的表达,正式的、简洁的、共情的、原则性的,各种花样都试了一遍。结果稍微改善了一点,但依然明显比不上完全去掉声明的效果。

这说明问题的根源不是那句话说得好不好听,而是模板本身的规律性。只要回复开头总有一个固定的"先表态"环节,不管这句话内容是什么,模型都会倾向于把这个"表态动作"和某些关键词绑定起来,形成一种捷径式的联想。

研究者还专门设计了一个特别巧妙的实验来证实这一点。他们挑了五个高风险关键词,毒品、杀人、金钱、偷窃、开枪,只在训练数据里包含某一个关键词的问题上加拒绝声明,其余问题依然只用理由。结果非常精确:每个模型都恰好在自己被特训的那个关键词上,合规率明显下降,而其他关键词的表现没受影响。

这几乎是实锤级别的证据。拒绝声明和特定词汇绑定后,确实会让模型对含有该词的所有问题都变得更敏感,不管这个问题实际上有没有危险。

**理由里说得越具体,效果越好**

除了拆分声明和理由,研究者还测试了理由本身的写法有没有讲究。

他们对比了两种理由风格。一种叫**请求特定型**

请求特定型:指理由中明确点出用户具体请求的行为,比如直接写"伪造货币是违法的",而不是含糊地说"这类行为是违法的"

另一种叫**泛化型**,用"这种请求"、"这类行为"这样笼统的说法替代具体描述。

结果是,请求特定型理由训练出来的模型,在伪有害问题上的表现明显更好。以Llama-3.1-8B为例,请求特定型的F1分数达到0.84,比泛化型的0.75高出不少。

这也很好理解。如果理由里明确点出"伪造货币"这个具体行为,模型学到的是这个具体行为为什么危险;但如果理由只说"这种行为不好",模型学到的信息量就少得多,遇到新问题时也更难判断这个新问题是否真的属于同一类危险。

**去掉拒绝声明,会不会让模型变笨或变得不安全**

这是个很自然的担心。毕竟你砍掉了训练数据的一部分内容,会不会连带损伤模型的其他能力?

研究者专门做了六个通用能力测试,包括常识问答MMLU、物理常识推理PIQA、数学推理GSM8K等等。结果显示,无论用哪种拒绝组件训练,模型在这些和安全无关的任务上的表现几乎没有差异,最多相差一两个百分点,属于正常波动范围。

安全性方面,研究者也没有偷懒。除了常规的有害问题测试,他们还专门找了四个更狠的对抗性测试集,包括HarmBench、JailbreakBench等,这些数据集专门设计各种绕过手段来诱导模型说出危险内容。结果显示,只用理由训练的模型在这些对抗测试上的表现,和完整版训练的模型基本持平,没有出现安全防线被攻破的迹象。

这个结果让我想起一个道理:很多时候我们以为多说一句"免责声明"能增加安全感,但这句声明本身可能只是心理安慰,真正起作用的从来是后面那句具体的解释。

**这套方法在其他场景下还管用吗**

论文还测试了两个延伸场景。

第一个是**上下文学习**

上下文学习:指不对模型参数做任何微调,只在提示词里给几个示例,让模型照着示例的风格回答新问题

研究者用了一个叫URIAL的框架,往提示里塞进几条不同风格的安全示范对话,同样对比声明版和理由版。结果和微调实验高度一致,理由版的示范让模型在没有任何参数改动的情况下,依然表现出更低的误拒率。这说明这套发现不只是微调阶段的巧合,而是更普遍的一个规律。

第二个是**推理时干预方法**

推理时干预方法:指模型训练完成后,在生成回答的那一刻通过额外的技术手段调整输出,比如激活值引导(SCANS)或自我对比解码(Self-CD),而不需要重新训练模型

研究者把已有的两种主流干预方法SCANS和Self-CD,分别应用到用不同方式训练出的模型上。结果显示,即便叠加了这些额外的干预手段,只用理由训练的模型依然保持最低的误拒率,尤其是结合请求特定型理由的版本,表现是所有组合里最好的。

这意味着这个发现不是孤立的技巧,它可以和现有的其他安全优化方法叠加使用,互不冲突。

**几个容易被质疑的角落,研究者都补上了**

论文里还有不少细节值得一提。有人可能怀疑,是不是因为理由版本的回复更长,模型才表现更好?研究者专门做了个对照实验,只保留理由的第一句话,让长度接近声明版本,结果依然明显优于纯声明版本,说明长度不是关键因素。

还有人可能想,是不是只要在提问时加一句"让我们一步步思考",就能自动改善判断?研究者试了,结果没有明显帮助,说明这个问题没法靠简单的提示词技巧绕过去,得从训练数据本身下手。

研究者也没回避论文的局限性,由于资源限制,实验没有覆盖超过800亿参数的超大模型,未来更大规模的验证还有待展开。

写在后面

读完这篇论文,我印象最深的其实不是那些实验数字,而是研究者拆解问题的那个动作本身。

大家平时讨论AI安全,往往停留在"该不该拒绝""拒绝率高不高"这种粗粒度的层面,很少有人会想到去拆开一条拒绝回复的内部结构,问一句:这条回复里,到底哪部分文字在真正起作用?

这种拆解思路其实很值得挪用到别的地方。比如我们平时批评一份工作汇报"写得不好",往往笼统地说"逻辑不清楚",但如果拆开来看,可能是开头的结论句用力过猛,把后面本该展开的论证挤没了,读者的注意力全被开头那句斩钉截铁的判断吸走了,根本没心思看后面到底为什么。这篇论文里AI的问题和这个很像,那句程式化的"抱歉我不能帮你",某种程度上抢走了本该留给后面理由的注意力。

还有一个细节让我觉得挺有意思的:研究者发现关键词锚定效应时用的那个实验设计,只给含特定关键词的训练样本加拒绝声明,观察模型是否只在这个词上变得敏感。这个思路本质上是在做一次可控的因果推断,而不是简单地观察相关性。很多AI安全研究容易停留在"我们观察到了这个现象",但这篇论文更进一步问了"我们能不能人为制造出这个现象,来证明因果关系"。这种较真的态度,比结论本身更值得记住。

一个还没被回答的问题是:如果把这套"只留理由不留声明"的思路推广到更大规模、更复杂的安全场景里,比如涉及多轮对话或者更隐蔽的诱导性提问,这套发现还成立吗?毕竟这篇论文的实验场景相对干净,都是单轮的、明确的有害或伪有害问题。真实世界里的边界,恐怕远没有这么整齐。

Q&A

Q1:假性拒绝是什么意思?

A:假性拒绝指的是AI把明明无害的问题误判成有害问题而拒绝回答,比如把"如何拍出好照片"错误地当成危险请求处理,这种现象会明显降低AI的实用性。

Q2:只用拒绝理由训练AI,安全性会不会下降?

A:不会明显下降。论文实验显示,只用理由训练的模型在有害问题测试和对抗性越狱测试上的表现,和保留完整拒绝声明的模型基本持平,同时误拒率大幅降低。

Q3:为什么拒绝声明会让AI更容易误判?

A:因为拒绝声明是一句程式化的开场白,AI在训练中反复看到它和某些关键词一起出现,容易学会看到关键词就直接给出这句话,而不是真正理解问题内容再做判断。

加载中...