客户往工单里贴了三句话:第一句引用了篇不存在的2024年论文,第二句和第三句互相矛盾,三句全都不在用户上传的文档里。如果你只跑一遍幻觉检测,能抓住一个,漏掉两个。
它们不是同一种缺陷。来自不同的失效模式,需要不同的检测器。把"幻觉"当成一个筐,就是你的评估套件全绿、客服工单却爆满的原因。
![]()
四种形状,一套工具
Ji等人对自然语言生成中幻觉的综述,把问题拆成内在幻觉与外在幻觉。SelfCheckGPT(Manakul等,2023)发现:采样响应在幻觉事实上发散,在有依据事实上收敛。TruthfulQA(Lin, Hilton, Evans,2021)则单独隔离了事实模仿失效。每种对应生产环境中一种错误形状。
这篇给出四种形状,以及对应的Python检测器。
类型一:实体编造
模型发明了一个实体:日期、引用、法规、函数签名。字符串格式正确,语法无误,但所指对象不存在。
检测方法是把提取出的实体与权威来源做对照。检测器本质上就是一个查询接口。
代码示例用正则表达式匹配引用格式:([A-Z][a-z]+(?:\s+et\s+al\.)?)[,\s]+\(?(\d{4})\)?,然后调用lookup(author, year)验证是否存在。实际场景中,把正则换成领域提取器——药名、ICD编码、内部用户ID、股票代码——再对接真实索引。
核心契约是:提取候选,在可信来源中查询,查询失败时大声报错。
这是客户最先注意到的那种。也是最容易抓的。
类型二:自我矛盾
输出自己跟自己打架。第三句否定第一句,第一段说患者对青霉素过敏,第三段却推荐阿莫西林。
这种查不了外部数据库。要靠采样检测,这是SelfCheckGPT形式化的方法:有依据的声明,多次采样结果一致;编造的声明,跨采样会漂移。对同一提示生成k个响应,测量两两之间的一致性。
代码实现是生成多个候选,用自然语言推理模型或嵌入相似度计算一致性分数。阈值以下标记为潜在矛盾。
关键洞察:矛盾不是"错",是"不稳定"。
类型三:上下文漂移
模型回答了用户没问的东西,或者把A文档的信息嫁接到B文档上。客户上传了合同第3页,模型却"引用"了第7页的内容——而第7页根本没上传。
检测需要溯源:每个生成片段必须能在输入上下文中找到支撑。RAG系统的检索-生成链路天然适合这里,但要把检索结果显式注入检测流程,而不是假设模型"应该"看过。
实现上,用句子级嵌入匹配生成文本与源文档,无匹配段落则标记漂移。比实体编造更难:格式全对,来源全错。
类型四:事实模仿
模型说出了"听起来对"的东西,但经不起细究。TruthfulQA专门测这个:常见的错误信念,模型反而流畅复述。
检测需要对抗性验证——不是查模型知不知道,而是查模型能不能抵抗"显然答案"的诱惑。实现上可以用高置信度错误陈述做探针,看模型是否纠正,或是否给出带概率校准的不确定性表达。
这是最难抓的。因为模型不是在"编造",是在"复读"——复读的是训练数据里的统计模式,而非真实世界。
为什么分类 matters
生产环境的幻觉不是均匀分布。客服工单里,实体编造和上下文漂移占大头——用户上传了文件,模型却胡说。社交媒体生成里,事实模仿更危险——模型复述流行谬误。
单一检测器会制造虚假安全感。你的eval跑过了,因为测的是最容易的实体编造;用户投诉的是最难的上下文漂移。
四种检测器对应四种工程决策:实体编造→对接权威数据库;自我矛盾→增加采样预算;上下文漂移→强化溯源链路;事实模仿→引入对抗测试。
冷幽默
最讽刺的是:模型自己分不清这四种错误。你问它"你是不是幻觉了",它可能用第四种方式(事实模仿)回答"我没有",同时用第二种方式(自我矛盾)在上一句承认"我可能错了",最后用第一种方式(实体编造)引用了一篇不存在的论文证明其观点。检测器至少比模型诚实——它说"我没查到",就是真没查到。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.