VeriTrail: Closed-Domain Hallucination Detection with Traceability¶
会议: ICLR2026
arXiv: 2505.21786
代码: 数据集
领域: 幻觉检测
关键词: hallucination detection, faithfulness evaluation, traceability, multi-generative-step, DAG
一句话总结¶
提出 VeriTrail——首个为多步生成过程(MGS)提供可追溯性的闭域幻觉检测方法,建模生成过程为 DAG 并沿路径逐层验证,同时构建了首批包含所有中间输出和人工标注的 MGS 数据集。
研究背景与动机¶
- LLM 即使被要求遵循源材料,仍常生成未支持的内容——"闭域幻觉"
- 生成过程分为两类:
- 单步生成(SGS):如标准 RAG,一次 LLM 调用产出最终结果
- 多步生成(MGS):如分层摘要、GraphRAG,中间输出作为后续输入
- MGS 更易产生幻觉:每一步都可能引入并传播错误
- 核心论点:对 MGS 而言,仅检测最终输出中的幻觉是不够的,还需要:
- 溯源(Provenance):理解输出如何从源材料推导
- 错误定位(Error Localization):定位幻觉在哪一步引入
- 现有方法只评估输出与源材料的关系,不利用中间输出,无法提供可追溯性
核心贡献¶
- 统一的生成过程概念框架(DAG 表示)
- VeriTrail:首个为 MGS 和 SGS 提供可追溯性的闭域幻觉检测方法
- FABLES+ 和 DiverseSumm+:首批包含所有中间输出和人工标注的 MGS 数据集
方法详解¶
整体框架¶
VeriTrail 想解决的是一个"既要又要"的问题:既要判断多步生成(MGS)的最终输出有没有闭域幻觉,又要说清这个结论是怎么得出来的——支持它的证据沿哪条路径回到源材料,幻觉又是在哪一步引入的。做法是先把整条生成链建模成一张有向无环图(DAG),源文档、各级中间输出、最终输出都是图上的节点;然后从最终输出里抽出一个个事实声明,逐个声明、自顶向下地反向验证:从最终输出的上游节点开始选证据、出判决,再顺着边往源头收一层,如此迭代,直到收敛到"有证据支撑的根节点"或触发终止条件。整个过程中累积下来的证据链,正好既是溯源路径,又是错误定位的依据。
关键设计¶
1. 用 DAG 表示生成过程:给"可追溯"一个统一的数学载体
闭域幻觉检测过去只盯着"输出 vs 源材料"两端,中间过程是黑盒,自然谈不上溯源和定位。VeriTrail 把整条链建模成有向无环图 \(G = (V, E)\):节点 \(v \in V\) 是文本片段(源文档 / 中间输出 / 最终输出),有向边 \((u, v) \in E\) 表示 \(u\) 被用作生成 \(v\) 的输入;其中根节点集合 \(V_0\) 是源文档(无入边),终端节点 \(v^*\) 是最终输出(无出边),再用阶段函数 \(\text{stage}: V \to \mathbb{N}\) 标出每个节点在生成过程中的层位。这个表示的好处是把单步生成(SGS,如标准 RAG)和多步生成(MGS,如分层摘要、GraphRAG)统一了起来——SGS 不过是只有一层中间节点的退化 DAG,同一套验证流程通吃。
2. 声明分解 + 证据选择:把验证下沉到可核查的最小单元,且证据本身不被幻觉
直接验证一整句复合声明容易"半对半错"说不清,所以先用 Claimify 的 Decomposition 模块把复合声明拆成独立可验证的子声明,例如"公司 X 在 2020 年收购了两家初创企业作为医疗扩张的一部分"会拆成 (1) X 在 2020 年收购两家初创企业、(2) 收购是医疗扩张的一部分;分解递归进行,最多 20 次以避免死循环。拆完之后做证据选择:从当前终端节点的源节点 \(\text{src}(v^*)\) 出发,用 NLTK 把候选文本切句并给每句一个唯一 ID,让 LLM 返回支持或反对该声明及其子声明的句子 ID;文本超出上下文窗口就切成多个并行 prompt 分别选。关键的一步是 ID 验证——凡是模型返回的、和真实句子对不上的 ID 一律丢弃,这样保证"被当作证据的句子"必然真实存在于源材料里,证据这一环不会被幻觉污染。
3. 判决生成与上下文还原:基于证据出三类判决,又不让证据脱离语境
证据选好后进入判决:若一句都没被选中,直接判 "Not Fully Supported";否则让 LLM 基于证据在三类里选一个——Fully Supported(源文本强烈暗示整个声明)、Not Fully Supported(至少一部分未被支持)、Inconclusive(源文本模糊或矛盾)。这里有个容易踩的坑:孤立的句子脱离上下文会产生歧义,所以判决时并不直接把选中的零散句子喂给模型,而是根节点用完整内容、非根节点用证据选择步骤生成的摘要,让模型在还原语境的前提下下判断。
4. 候选节点传播与迭代终止:逐层往源头收,用 \(q\) 控制保守程度
一轮判决完不等于结束——还要顺着 DAG 往上游推进,看证据能不能一路追溯回根节点。下一轮验证哪些候选节点,取决于本轮最新判决:
| 最新判决 | 候选节点选择策略 |
|---|---|
| Fully Supported / Inconclusive | 本轮有证据节点的源节点 |
| Not Fully Supported | 本轮所有验证节点的源节点(更广泛,防漏检) |
判 NFS 时之所以把候选放宽到"所有验证节点的源节点",是因为一旦怀疑有问题就要把搜索面铺开,避免漏掉真正的源头。迭代在满足任一条件时终止:①候选节点只剩已验证、有证据的根节点 → 采用最新判决;②没有候选节点(没追到根节点,或根节点没证据)→ Not Fully Supported;③连续 \(q\) 次 Not Fully Supported → Not Fully Supported。参数 \(q\) 是个旋钮:\(q\) 越大,越要反复确认才肯下 NFS,验证更彻底但判决也更保守。
5. 可追溯性输出:把溯源和错误定位从迭代过程里读出来
对每个声明,VeriTrail 不只给一个标签,而是返回最终判决 + LLM 推理、所有临时判决、以及一条证据链(每轮选中的句子带节点 ID + 各轮证据摘要)。这条链直接支撑两件下游事情:溯源(Provenance)——对 Fully Supported 的声明,证据链就记录了从中间节点一路回到根节点的支撑路径;错误定位(Error Localization)——找到最后一次判 Fully Supported 的迭代 \(n\),该迭代中有证据的非根节点所在的阶段即为幻觉引入的阶段,即 \(\{\text{stage}(v) \mid v \in V_e(n),\, v \notin V_0\}\)。换句话说,"最后一次还说得通"的那层之后,错误就是在这层之上被引入并往下传播的。
一个完整示例¶
以分层摘要为例走一遍。一本书被切成多个 chunk,先各自摘要得到一级摘要,再合并成二级摘要,最后汇成全书摘要 \(v^*\);从 \(v^*\) 抽出声明"主角在结局放弃了继承权"。验证从 \(v^*\) 的上游(几个二级摘要节点)开始:证据选择在这些节点里挑出相关句子、ID 校验后交给判决,假设判 Fully Supported,于是候选收缩到这些有证据节点的源节点(对应的一级摘要)。下一轮在一级摘要里继续选证据、出判决;只要还是 Fully Supported,就再往下收到原始 chunk(根节点)。当候选只剩"有证据的根节点"且仍判 Fully Supported 时终止——证据链于是串成 根 chunk → 一级摘要 → 二级摘要 → 最终输出 一条完整路径,这就是溯源。反过来,如果在二级摘要这层判了 Fully Supported、但收到一级摘要后变成 Not Fully Supported 并连续 \(q\) 次未翻盘而终止,那"最后一次 Fully Supported"发生在二级摘要这一阶段,错误定位就指向:幻觉是在从一级摘要合并到二级摘要这一步被引入的。
数据集构建¶
FABLES+(分层摘要)¶
- 基于 FABLES 书籍摘要数据集
- 重新生成 22 本书的分层摘要(平均 118K tokens),保留所有中间输出
- 提取 734 个声明,48% 直接沿用原标注,其余人工标注
DiverseSumm+(GraphRAG)¶
- 基于 DiverseSumm 新闻数据集
- 148 个故事,1,479 篇文章,累计 1.19M tokens
- 采样 20 个问题,用 GraphRAG 生成答案
- 提取 560 个声明,4 位 Upwork 标注员 + 1 位作者标注
- 87% 声明可从关联文章判断,13% 需查阅额外文章
实验结果¶
基线方法¶
| 类别 | 方法 | 处理长文本策略 |
|---|---|---|
| NLI | INFUSE | 双向蕴含排序 |
| NLI | AlignScore | 350 token 分块 |
| NLI | Bespoke-MiniCheck-7B | 32K token 分块 |
| RAG | Top-k 检索 | 嵌入检索 + 判决 |
| 直接验证 | Gemini 1.5 Pro / GPT-4.1 Mini | 长上下文 LM |
硬预测结果(Macro F1 / Balanced Accuracy)¶
| 方法 | FABLES+ F1 | FABLES+ Bal.Acc | DiverseSumm+ F1 | DiverseSumm+ Bal.Acc |
|---|---|---|---|---|
| VeriTrail (q=3) | 84.5 | 83.6 | 79.5 | 76.3 |
| VeriTrail (q=1) | 74.0 | 84.6 | 76.6 | 83.0 |
| RAG (k=15) | 69.6 | 76.5 | 75.1 | 74.0 |
| Bespoke-MiniCheck-7B | 62.2 | 69.0 | 72.1 | 69.4 |
| Gemini 1.5 Pro | 61.1 | 60.8 | 49.8 | 57.6 |
| GPT-4.1 Mini | 60.7 | 58.2 | 62.9 | 61.5 |
| AlignScore | 59.6 | 67.5 | 60.4 | 62.7 |
| INFUSE | 40.5 | 59.5 | 20.0 | 50.1 |
关键发现: - VeriTrail 在两个数据集上均优于所有基线(q=3 在 F1 上最优,q=1 在 Balanced Accuracy 上最优) - 直接长上下文验证(Gemini 1.5 Pro)并不理想,可能因超长文档中信息检索困难 - AlignScore 和 INFUSE 等经典 NLI 方法在长文档上性能明显不足
q 参数的权衡¶
- q=1(一次 NFS 即终止):高 NFS 召回(89.8%),低 NFS 精度(55.1%)
- q=3(三次 NFS 才终止):更均衡(NFS 精度 84.5%,召回 55.9%)
- q 越大,验证越彻底但 NFS 判决更保守
优势与局限¶
优势¶
- 首个提供可追溯性(溯源 + 错误定位)的幻觉检测方法
- DAG 框架统一了 SGS 和 MGS 过程的表示
- 句子级证据选择 + ID 验证保证证据不被幻觉
- 在超长文档(>100K tokens)上优于强基线
- 成本效益好(Appendix D 分析)
局限¶
- 依赖 LLM 执行证据选择和判决生成(受 LLM 能力限制)
- 错误定位在某些场景下无法确定具体阶段
- 数据集规模有限(734 + 560 声明)
- 仅评估了 gpt-4o 模型
个人评价与思考¶
创新性 ⭐⭐⭐⭐⭐¶
- "检测 + 追溯"的范式升级非常有价值
- DAG 建模生成过程是对幻觉检测的根本性重新思考
- 迭代证据选择 + 候选节点传播机制设计精妙
实用价值 ⭐⭐⭐⭐⭐¶
- 直接面向 MGS 流水线(GraphRAG、分层摘要等)的实际需求
- 错误定位对系统调试和改进极有价值
- 句子级证据链显著降低人工审核成本
数据集贡献 ⭐⭐⭐⭐¶
- FABLES+ 和 DiverseSumm+ 填补了 MGS 幻觉检测数据的空白
- 包含完整中间输出是关键创新
- 但规模较小
实验设计 ⭐⭐⭐⭐¶
- 基线覆盖全面(NLI、RAG、长上下文 LM)
- 硬预测+软预测双评估
- 消融分析和错误案例分析(附录)增加可信度
综合评分 ⭐⭐⭐⭐⭐¶
一篇开创性的工作,将闭域幻觉检测从"判断对错"提升到"追溯来源和定位错误"。DAG 框架优雅地统一了各类生成过程,VeriTrail 的迭代验证机制在超长文档上展现出强大性能。对于日益复杂的 MGS 管道(如 GraphRAG),这种可追溯的幻觉检测方法具有极强的实用价值。