
你有没有遇到过这种情况:问AI一个问题,它回答得头头是道,语气笃定,细节丰富,结果你一查资料,发现里面有一句话是编的。
更麻烦的是,这句编造的话往往就藏在一堆正确信息中间,像一颗混在真米里的沙子。你没法把整段话都扔掉,因为大部分是对的;你也没法轻易挑出那颗沙子,因为它读起来和真米一模一样。
这就是"幻觉检测"要解决的问题。而这篇论文提出的方法,起了个挺可爱的名字:ENOKI,金针菇。
**问题出在哪:两种检测方式,谁也说服不了谁**
先说清楚,现在业界检测AI幻觉,大概分成两条路子。
第一条路子叫"claim级别"检测。做法是先把AI的回答拆解成一句句独立的"事实声明",比如"特斯尼埃出生于蒙彼利埃,时间是1893年",然后拿这句声明去和参考资料对照,判断真假。这种方法的好处是判断结果很清楚,"这句话,假的",一目了然。
问题在于,拆解这一步本身就容易出岔子。原句里可能省略了某个修饰词、某个时间限定,一旦拆解出问题,你验证的其实已经不是原句要表达的意思了,验证结果自然也就不准。
第二条路子叫"span级别"检测,直接在原文上标出哪一段文字有问题,比如把"蒙彼利埃"这三个字标红。这种方法定位精准,你一眼就能看到问题出在哪个词,方便直接修改。但它的短板也很明显:它只告诉你"这里错了",却不会告诉你"错在哪个事实判断上",缺一个可解释的逻辑链条。
这两条路子各自为战,谁也没法完全替代谁。想把两者结合起来,传统做法是先拆句子、再验证、最后想办法把验证结果对应回原文的位置,这中间要多跑几趟模型调用,还得额外做一次"claim和原文怎么对齐"的匹配,误差会在这几道工序里一层层叠加。
论文里给了个例子特别直观。问题是"特斯尼埃出生在哪里",正确答案应该是法国的蒙圣艾尼昂,AI却回答"特斯尼埃出生于蒙彼利埃,时间是1893年"。年份1893是对的,出生地蒙彼利埃是错的。
claim级别检测会把整句话判定为"不支持",因为它是把整句话当一个整体来看的;span级别检测能准确标出"蒙彼利埃"这个词,但它没法告诉你这背后对应的是哪个具体的事实判断。
ENOKI要做的事,就是同时拿到这两种结果,而且是从同一份中间数据里自然生成的,不需要额外对齐。
**核心思路:先拆事实,再验证,再"投影"回原文**
ENOKI的做法,说白了分三步。
第一步,把回答拆成一个个"事实三元组",格式是主语、谓语、宾语。比如"特斯尼埃 | 出生于 | 1893年","特斯尼埃 | 出生于 | 蒙彼利埃"。这套拆解方法来自一个叫OpenIE的技术流派。
OpenIE:全称Open Information Extraction,开放信息抽取。它和传统信息抽取的区别在于不需要预先设定"关系类型表",能从任意文本里灵活抽出"谁对谁做了什么"这种结构化事实,不受固定模板限制。
关键的地方在于,ENOKI要求这些三元组必须"锚定原文",就是三元组里的每个词都能对应回答案文本里的具体位置。这一点特别重要,因为如果拆解出来的事实和原文脱节了,后面想把"这句话是假的"这个判断投影回原文,就没法操作了。
第二步是验证。每个三元组会被转换成一句话,拿去和参考资料做自然语言推理,简称NLI。
NLI:Natural Language Inference,自然语言推理,输出结果通常分三类:蕴含(entailment,支持这句话)、中立(neutral,资料没提到)、矛盾(contradiction,资料反驳了这句话)。ENOKI把中立和矛盾都算作"不被支持"。
第三步,也是最巧的一步:如果某个事实没通过验证,就把它对应的宾语部分,标记为原文中的"幻觉span"。因为宾语是三元组里承载具体信息的部分,一旦宾语和资料对不上,说明问题就出在这个具体的词或短语上。
这里还有个细节设计,叫"增量式事实构建"。同一句话可能被拆成好几层递进的三元组,比如"金针菇是一种蘑菇"(粗粒度)到"金针菇在中国种植"(中粒度)再到"金针菇在中国北方种植"(细粒度,加了"北方"这个修饰词)。如果验证发现前两层都对,第三层错了,那问题就精确定位在"北方"这两个字上,而不是整句话。
打个比方,这就像你去医院验血。如果医生只告诉你"你的指标异常",你完全不知道该注意什么;但如果报告单上写清楚"血糖偏高,其他指标正常",你立刻知道问题出在哪,该怎么调整。如果不做这种分项拆解,医生只能给你一个笼统的"有问题"或"没问题",你拿到手根本没法采取行动。ENOKI做的增量拆解,本质上就是把一句笼统的"这段话有问题",拆成一份可以逐条核对的检验报告。
**三种不同的"拆句子"引擎,快慢各有取舍**
ENOKI最有意思的地方在于,它不是绑定某一种拆解技术,而是提供了三套可以互换的"引擎",各有各的算盘。
第一套叫ENOKI-LLM,用大语言模型来做拆解,具体用的是GPT-OSS-120B,配合一套专门设计的提示词,鼓励模型做"增量式"分解,就是前面提到的那种一层层加细节的拆法。这套方案精度最高,但代价也最直接:跑一次要花十几秒,因为大模型生成本身就慢。
第二套叫ENOKI-RULE,完全不用模型,靠语言学规则硬拆。具体做法是用spaCy这个工具先做依存句法分析,把句子拆成主谓宾结构,再套用35条手工设计的规则模板。
依存句法分析:一种分析句子语法结构的方法,把句子中每个词和它依赖的词连成一棵"树",比如"特斯尼埃出生"里,"出生"是根,"特斯尼埃"依附于它,是主语关系。
这35条规则不是一次写好的,是通过一个"人机协作"的迭代流程慢慢磨出来的:先让一个AI助手看当前规则集犯的错误(分成误报和漏报两类),提议新增或修改一条规则,然后拿一套自动化验证标准去检验这条新规则到底是不是真的有用,有用就保留,没用就打回去重新设计。这个过程分两个阶段,第一阶段在通用的开放信息抽取数据集上打基础,第二阶段专门针对ENOKI自己的数据集做精细化调整,加入了处理复合谓语、分词结构这些更复杂语言现象的规则。
这套规则引擎的速度极快,一句话处理时间只要0.03秒左右,是LLM方案的几百分之一。
第三套叫ENOKI-ENCODER,介于前两者之间,用一个训练过的编码器模型来做拆解。基础架构借鉴了OpenIE6里的"迭代网格标注"方法。
IGL(Iterative Grid Labeling):一种把开放信息抽取问题转化为"给句子里每个词打标签"的方法,模型会生成固定层数的标注结果,每一层代表一次可能的抽取。
论文里发现了原始IGL训练方式的一个明显缺陷:它要求模型预测的第N层抽取结果必须和标准答案的第N层完全对应,如果模型抽对了内容但放错了层数,照样算错。这在ENOKI的增量式抽取场景下问题更严重,因为一句话可能被拆成十几层递进的事实,层数错位的概率大大增加。
解决办法是引入了"匈牙利匹配"算法,这个思路借鉴自计算机视觉里的DETR目标检测模型。简单说,就是不再死板地要求"第几层对第几层",而是先计算所有预测层和所有标准层之间两两配对的代价,然后找出一种最优的整体配对方案,让总代价最小,再按照这个配对方案来计算损失。论文的消融实验显示,加上这个匹配机制后,三个测试集上的表现都有明显提升,比如RAGTruth数据集上的分数从27.25跳到34.84,提升了整整7.6个点。
这就好比你去应聘,面试官原本要求"你必须在第三轮回答出这个知识点",哪怕你在第一轮就答对了也不算数。这显然不合理,考核的应该是"你到底会不会",而不是"你在哪一轮说的"。匈牙利匹配做的事,就是把这种死板的轮次要求换成"只要整体表现最优就行"的灵活匹配,让训练信号更真实地反映模型的实际能力。
**ENOKIQA:一个"两副面孔"都齐全的新数据集**
做研究离不开数据集,但论文作者发现,现有的幻觉检测数据集普遍存在三个短板。
一是"要么claim级别,要么span级别",两种标注很少同时出现在同一批数据里;二是答案和参考资料都偏短,不太适合长文本场景;三是规模偏小,比如HalluEntity数据集只有157条样本,MuSHROOM英文子集也只有154条。
于是团队自己动手,做了个叫ENOKIQA的新数据集,从英文维基百科出发,覆盖热门和长尾词条,用GPT-OSS-120B生成长篇事实性问题,再让七个不同的指令微调大模型在"看不到原文"的情况下凭参数记忆作答,故意制造出真实的幻觉样本。之后经过问题过滤、答案相关性过滤、去重等一系列清洗步骤,最终形成了3990条带标注样本,加上19594条未标注样本用于训练。
标注这块也挺有意思,用的是ENOKI自己的流水线来自动打标签:先用ENOKI-LLM提取增量三元组,再用一个NLI模型对每条三元组做验证。为了检验这套自动标注靠不靠谱,团队额外找了两名人工标注员标注了100条测试样本做对比,结果显示两位人工标注员之间的一致性系数是0.580(属于中等水平的一致),而自动标注流水线和人工调整后标签的句子级F1分数达到0.867,span级别是0.569,这个数字符合长文本span标注本身固有的难度,和之前的相关研究结果也基本一致。
**实测效果:越是要求精细定位,ENOKI的优势越明显**
论文在三个不同粒度上测试了ENOKI的表现:实体级别、片段级别、句子级别。
在实体级别的HalluEntity测试集上,ENOKI-LLM拿到了79.70的AUROC和55.09的AUPRC,是所有对比方法里表现最好的,比第二名高出不少。就连不用大模型的ENOKI-RULE,AUROC也达到76.41,超过了很多经过专门微调的编码器模型。
在片段级别的三个数据集(MuSHROOM、RAGTruth、PsiloQA)上,ENOKI-LLM在MuSHROOM上拿到52.07分,在PsiloQA上拿到71.15分,都是最高分;在RAGTruth上虽然不是最高,但也排进了前列,而专门针对RAGTruth微调过的模型自然在自己主场表现更好,这也算合理。
到了句子级别的粗粒度判断任务,情况反而变得复杂了。因为这时候只需要判断"这句话对不对"这种简单的是非题,不需要精细定位,一些不做拆解、直接整体判断的方法也能表现不错。这一点其实很说明问题:ENOKI的核心优势不在"判断得多准",而在"能说清楚为什么不准,具体是哪一块不准"。
论文还专门做了效率对比,这个数据挺震撼。ENOKI-ENCODER处理一个句子只要0.13秒,达到69.1%的F1分数;相比之下一个叫Claimify的多阶段大模型方法要跑11.95秒才能达到66.31%,速度慢了近百倍,效果却没有更好。ENOKI-LLM则拿到了这批方法里最高的76.4%F1分数,处理速度和其他大模型方案相当。
这意味着,如果你的场景对响应速度有要求,比如要嵌入到一个实时问答系统里,ENOKI-RULE或ENOKI-ENCODER能在几乎不损失太多精度的前提下,把速度提升几十倍甚至上百倍;如果你追求极致精度且不在乎多等几秒,ENOKI-LLM是更优选择。这种"按需选配"的灵活性,正是ENOKI这套框架设计成三条并行技术路线的用意所在。
**一个容易被忽视的细节:指代消解,是帮忙还是添乱**
论文里还做了一个很诚实的补充实验。AI生成的答案里经常出现代词,比如"他担任了总统",这个"他"到底指谁,如果这句话是单独拿出来验证的,模型可能根本搞不清楚。于是团队试着加了一步"指代消解",把代词替换成它实际指代的对象,看看效果会不会更好。
指代消解:Coreference Resolution的中文说法,指的是把文本中的代词、简称等找出它们真正指代的对象并替换回去的技术,本文用的工具是FastCoref。
结果发现,这一步的效果因数据集而异。在RAGTruth和ANAH上,加上指代消解确实有提升,比如RAGTruth上F1从27.87提升到30.92;但在HalluEntity和PsiloQA上,效果反而略微下降。团队分析原因是这两个数据集里句子本身已经写得比较完整,代词消解操作有时会引入新的错误替换,反而添了乱。
这也提醒我们一件事:技术改进从来不是"越多越好",得看具体场景买不买账。这就像你出门带伞,下雨天带伞肯定有用,但晴天硬要撑把伞出门,不仅没用还碍事。团队最终把这一步设计成可选项,而不是默认开启,算是给用户留了个开关。
Q&A
Q1:ENOKI是什么,主要解决什么问题?
A:ENOKI是一个用于检测AI幻觉的多层级框架,核心思路是把AI回答拆解成可核实的事实三元组,验证真假后再把有问题的部分精确投影回原文的具体位置,同时给出可解释的判断依据和精准的错误定位,不需要额外的对齐步骤。
Q2:ENOKI有哪几种实现方式,该怎么选?
A:ENOKI提供三种引擎:基于大模型的ENOKI-LLM精度最高但速度较慢;基于人工规则的ENOKI-RULE速度极快,几乎不损失太多精度;基于训练编码器的ENOKI-ENCODER介于两者之间。追求极致精度选LLM版,追求响应速度选RULE或ENCODER版。
Q3:ENOKIQA数据集有什么特别之处?
A:ENOKIQA是团队自建的新数据集,同时包含claim级别验证和span级别定位两种标注,答案和参考资料都是长文本,规模上有3990条标注样本加19594条未标注样本,弥补了此前同类数据集规模小、粒度单一的短板。
好文章,需要你的鼓励
论文提出动态民主同意框架,融合伯奈斯公关理论与系统动力学反馈模型,分析政治支持率如何受滚雪球增长、选民饱和、感知延迟和制度信任侵蚀四种机制影响,揭示宣传投放为何会失效甚至反噬。
阿里巴巴团队推出E-Commerce Bench基准,让18个顶尖AI模型经营虚拟网店一年,揭示AI在长周期自主商业决策、供应商谈判防骗、现金流管理及经验学习方面存在巨大能力差异与隐藏短板。
本文解读ReFlowSET框架,它通过系统评测多款图像压缩器选出最适合雷达与光学图像的编解码器,并从零训练轻量生成模型完成雷达图到光学图的翻译,在多个数据集上取得领先的感知与分布质量表现。
阿里团队提出DICS方法,通过评估图片、问题、答案三者的内在一致性给训练数据打分,结合自适应采样策略筛选高质量子集。仅用25%的LLaVA-1.5-665K数据训练即超越全量数据效果,并在600万样本规模验证下用不到四分之一数据逼近官方InternVL3-8B性能。