做模型幻觉率评测这些年,我最大的体会是:定义一个概念比测量一个概念难得多。很多人上来就问“你们家模型幻觉率多少”,我通常得先反问一句——你说的是哪种幻觉?
1.1 模型幻觉与幻觉率的界定:事实性幻觉、忠实性幻觉、跨任务口径与可复现边界
我见过太多评测报告把幻觉笼统地喊成一个数,好像给模型贴个“幻觉率3.2%”的标签就万事大吉了。真实情况复杂得多。事实性幻觉指的是模型输出了与客观世界不符的内容,比如把某位作家的出生年份说错,这类错误有明确的外部真值可以核对。忠实性幻觉则更像“内部打架”——模型在摘要或问答中偏离了给定的源文档,哪怕它说的那句话本身在世界知识层面是对的,只要跟原文对不上,就算忠实性幻觉。这两种幻觉的检测逻辑完全不同,前者依赖知识库比对,后者依赖与输入文本的一致性校验。
我自己做过一个对比实验,同一个模型在开放域问答上的事实性幻觉率是8%左右,到了文档摘要任务上忠实性幻觉率能飙到15%以上,原因很简单——摘要任务里模型要处理长文本的局部注意力衰减,越往后越容易“编”。这告诉我们一个很朴素的道理:跨任务口径不统一,幻觉率数字之间根本没有可比性。有人拿新闻摘要的幻觉率去跟医疗问答的幻觉率做横向排名,我看了只能摇头。
还有个特别容易被忽略的点是“可复现边界”。温度参数调到0和调到0.7,同一个提示词跑出来的幻觉率能差出好几个百分点。更别说不同的提示模板、不同的系统指令,甚至同一模型的不同版本快照。我现在的习惯是,任何幻觉率数字后面必须跟着三样东西:任务定义、评测集版本、解码配置。缺一个,这个数字就只能当参考,不能当结论。
1.2 大模型幻觉率评测基准数据集:构建原则、来源类型、标注规范与代表性数据集选型
聊完界定,绕不开的是“拿什么测”。我刚开始做评测时图省事,直接拿网上现成的问答数据集改吧改吧就上了,后来发现坑特别多。基准数据集的构建原则里,第一条我认的是“真值可追溯”——每一条参考答案都得有明确的来源出处,不能是标注员拍脑袋写的。第二条是任务多样性覆盖,单一类型的数据集测出来的幻觉率会严重窄化你对模型能力的判断。
来源类型上我一般分三档:封闭知识库抽取型(比如从维基百科结构化字段生成的问答对)、开放网络采集型(新闻、论坛、技术文档)、还有人工构造的对抗型样本(专门设计来诱发幻觉的陷阱题)。封闭知识库那类标注成本低、真值硬,适合做大规模摸底;对抗型样本贵,但能揪出模型在边界条件下的脆弱点。
标注规范这块我踩过的坑最多。事实性标注相对好办,给标注员明确的知识源就行。忠实性标注需要设计“蕴含/矛盾/中立”的三级判定框架,还得配一致性校验流程——我试过让三个标注员独立标同一批摘要,Kappa系数只有0.61,后来把判定规则细化到句子级、增加了示例锚点,才拉到0.78以上。代表性数据集选型上,我常用的组合是:一个通用事实性基准打底,一个领域忠实性基准看专业场景表现,再加一个小规模对抗集做压力测试。别贪多,三个够用,多了评测成本吃不消,报告也写不聚焦。
1.3 LLM幻觉检测指标与评测流程总体框架:检测指标分类、评测流程节点与结果报告口径
指标这块我习惯分三层来看。第一层是“发生率类”指标——幻觉样本数除以总样本数,最直观,但也最粗糙。第二层是“严重度加权”指标,比如把事实性错误按影响程度分成轻微偏差、实质性错误、完全捏造三档,加权算分。第三层是“检测器一致性”指标,衡量不同检测方法之间的一致程度,这个在方法论研究里很重要,实际业务报告里露脸少。
评测流程节点我画过一张图贴在工位上,五个环节:样本抽样、提示构造、模型推理、幻觉判定、结果聚合。每个环节都有容易出问题的细节。样本抽样得考虑难度分层,全抽简单题幻觉率会虚低;提示构造要控制模板变量,我见过有人不同模型用不同提示词,比出来的结果毫无意义;模型推理阶段要固定解码参数并记录种子;幻觉判定环节最耗人力,得提前定好判定手册;结果聚合要给出置信区间,别光报一个点估计。
结果报告口径这件事值得单独说。我现在写报告必带一张“口径说明表”,列清楚:任务类型、数据集名称与版本、样本量、判定方法(人工/自动/混合)、判定者一致性系数、解码配置。没有这张表,读者拿到数字也不知道该怎么解读。行业里有些榜单只给排名不给口径,我看了只能呵呵——那玩意儿当娱乐看可以,当决策依据会出事。
1.4 评测方法分类与适用条件:人工评测、规则/知识库比对、模型裁判、不确定性/一致性方法及组合策略
人工评测是金标准,这点没人否认,但贵也是真贵。我算过一笔账:一个熟练标注员判定一条中等长度回答的忠实性,平均耗时40秒到1分钟,一千条样本就是十几个工时。适用条件很明确——小规模高精度场景、新任务首次摸底、自动方法的校准集构建。大规模跑榜不现实。
规则/知识库比对适合事实性幻觉的批量筛查,尤其是实体级事实(人名、日期、数值)。我给一个客户做过财报问答的幻觉检测,用正则抽取数字再跟源文件比对,召回率能到85%以上,成本几乎为零。局限是只能抓结构化程度高的错误,对“表述偏差但意思没错”的情况容易误判。
模型裁判这两年火得不行。我自己的经验是:用强模型判弱模型,一致性尚可;同级别模型互判,容易陷入“互相认同”的偏差。校准步骤不能省——拿人工标注过的几百条样本做裁判模型的阈值调优,我一般会把裁判模型的判定结果跟人工结果做混淆矩阵,看它在“幻觉/非幻觉”两边的漏报和误报分布,再决定是否可用。不确定性方法(比如基于token概率、语义熵)适合做初筛,低成本过滤明显的高置信错误,但不能单独作为最终判定依据。
组合策略是我目前最推荐的落地方式:不确定性方法做第一道粗筛,规则比对做第二道精确校验,剩下的模糊样本送模型裁判,最后抽5%到10%做人工复核。这套流水线我在三个项目上跑过,综合成本比纯人工低一个数量级,F1值比纯自动方法高15个点左右。没有万能方法,只有匹配场景的组合。
方案设计做得好不好,直接决定后面的评测数是能当决策依据还是只能当摆设。我接手过一个烂尾项目,前面的人把任务场景选成了通用百科问答,跑出来的幻觉率挺漂亮,可客户真正关心的是医疗问诊场景,两边的数字差着三倍。返工的时候我第一件事就是把场景重新锚定:评测任务必须贴着业务实际用法走,模型在业务里怎么被调用,评测就怎么复现那个调用链路。
样本抽样我一般不搞纯随机。真实业务数据里简单题和难题的分布往往倾斜,纯随机抽出来的样本会让幻觉率虚低。我的做法是按难度和领域双维度分层:简单事实查证、中等推理链、高难长尾知识各占一定比例,领域上按业务权重分配。样本量我习惯控制在每层至少200条,保证单层指标能算置信区间,总量控制在一千到两千条之间,再多评测成本兜不住,再少统计功效不够。
提示模板这块看似小事,实操里翻车的最多。我现在的规矩是:所有对比实验必须用同一套提示模板,模板里的变量只允许替换输入内容,指令部分一字不改。参考答案得带来源标注,判定标准要写成可操作的判定手册——什么算事实性幻觉、什么算表述偏差、边界案例给锚点示例。判定手册我一般先写一版,拿50条样本试标,发现分歧点就回炉改,改到三个人标同一批样本分歧率低于15%才正式开跑。
2.2 基准数据集与指标落地:数据集预处理、指标计算、模型裁判校准与多评价者一致性
数据集预处理这一步偷懒,后面全得还债。我通常会跑三遍清洗:第一遍去重,语义级去重不能只靠字符串匹配,得用嵌入相似度卡阈值;第二遍去噪,把标注来源不明的、参考答案有争议的条目剔掉;第三遍做难度标注,按模型在样本上的通过率分档,这样后面分析错误分布时才有抓手。预处理完我还会留一份“难例清单”,专门存那些多个模型都出错的样本,这些样本对定位模型能力边界特别有价值。
指标计算我现在坚持两个原则。一是点估计必须配置信区间,用bootstrap重采样跑一千次,报出95%置信区间,不然两个模型差0.5个百分点你根本分不清是真实差距还是抽样噪声。二是分项指标要拆开报,事实性幻觉率、忠实性幻觉率、严重度加权分分开列,别合成一个总分糊弄人。合成总分看着简洁,实际上把不同性质的错误混在一起,业务方拿着这个数没法做针对性改进。
模型裁判的校准我踩过最深的坑是直接拿来就用。后来固定流程是:先抽300条人工标注样本做校准集,让裁判模型跑一遍,算混淆矩阵,看它在幻觉侧和非幻觉侧的误报漏报分布,据此调判定阈值。校准完还得隔一段时间复校一次,模型版本更新或者任务分布漂移都会让裁判的判定边界偏移。多评价者一致性我用Cohen's Kappa监控,低于0.7就停下来查判定手册,看是哪类边界案例没定义清楚。
2.3 评测执行与质量控制:盲评、重复实验、置信区间、错误分析与可复现记录
盲评这件事听起来是常识,做起来经常走样。我给标注员的任务包里,模型名称全部替换成匿名编号,样本顺序打乱,同一个模型的不同样本不连续出现。有次我发现一个标注员对某个编号的样本判定明显偏严,追下去才知道他从样本风格猜出了模型来源,这就是盲评没做彻底。现在我的做法是连模型家族特征都做脱敏处理,输出格式统一后处理过再送标。
重复实验这块,解码温度大于0的场景我至少跑三次,取均值和标准差一起报。温度设0的场景也跑两次,防的是推理框架里某些非确定性操作带来的微小波动。有一次两个模型幻觉率差0.3个百分点,我重复跑了五轮发现这个差距稳定存在,才敢在报告里写“存在小幅差异”。单轮跑出来的小数点后一位我基本不信。
错误分析是我个人最看重的环节。每次评测完我会把幻觉样本按错误类型归类:实体错误、关系错误、数值错误、逻辑跳跃、源文档偏离,每类抽20条精读,写归因笔记。这些笔记往往比汇总数字更有洞察力,比如我发现某模型在数值比较类问题上幻觉集中爆发,追下去是它的数值token化方式有缺陷。可复现记录我要求到“任何人拿着记录能重跑出同样结果”的程度:代码版本、数据集哈希、随机种子、解码参数、裁判模型版本、校准集路径,一个都不能少。
2.4 幻觉率结果解释与应用:横向对比、风险分级、阈值设定、评测报告撰写与持续监测
横向对比最容易出问题的地方是口径不一致还硬比。我见过一份报告拿A模型在开放问答上的幻觉率去对比B模型在摘要任务上的幻觉率,结论写得煞有介事。我的原则是:只有任务类型、数据集版本、判定方法、解码配置四项完全对齐的数字才放在同一张表里比,对不齐的单独列,注明不可直接比较。跨任务对比我只做定性描述,不做排名。
风险分级我按业务影响来切。拿医疗问答举例:给出错误药物剂量属于高危,给出过时的诊疗建议属于中危,给出模糊但方向正确的表述属于低危。分级依据来自业务方给的错误容忍度矩阵,不是我自己拍脑袋。阈值设定也遵循这个逻辑——高危幻觉率超过0.5%就触发阻断上线,中危超过3%要求限期优化,低危纳入常规监测。阈值这东西没有普适标准,得跟业务风险偏好绑定。
评测报告我现在固定结构:第一页放结论和风险等级,第二页放口径说明表,后面依次是分项指标、错误类型分布、典型错误案例、改进建议。案例部分我坚持放原文对照,让读者自己看模型错在哪,比一堆统计图管用。持续监测方面我建议按版本迭代节奏走,每个大版本更新跑一次全量评测,小版本更新跑核心子集,线上流量里再埋一个轻量级自动检测做日常监控。指标漂移超过两个百分点就启动根因排查,别等到问题积累成事故才回头找。