大型语言模型 (LMs) 以自信、善辩且偶尔完全错误而闻名。这种被称为“幻觉”的现象,是阻碍人工智能在医疗保健或金融等安全关键领域部署的重大障碍。为了解决这个问题,业界已广泛采用了检索增强生成 (RAG) 。

RAG 的前提很简单: 我们不完全依赖模型的内部记忆,而是给它进行一次开卷考试。我们从受信任的外部数据库中检索相关文档,并要求模型根据这些信息回答问题。理论上,这能将模型锚定在现实中。

但这里有个陷阱。如果用户提出的问题不在外部数据库的覆盖范围内怎么办?或者如果数据库过时了怎么办?在这些场景下,RAG 系统通常会悄无声息地失败。它们会检索出“不相关”的文档,因为它们被迫必须检索出一些东西,然后 LM 便基于这些噪声信息产生幻觉般的回答。

在这篇文章中,我们将深入探讨一篇题为 “Do You Know What You Are Talking About? Characterizing Query-Knowledge Relevance For Reliable Retrieval Augmented Generation” 的研究论文。研究人员提出了一个严格的统计框架,赋予 RAG 系统说“我不知道”的能力。通过表征查询与知识库之间的相关性,他们引入了实时检测 知识外 (Out-of-Knowledge, OoK) 查询以及随时间监控系统健康状况的方法。

核心问题: RAG 的静默失败

想象一下一个基于心脏病学教科书数据库训练的医疗 RAG 系统。用户问了一个关于罕见神经系统疾病的问题。检索器负责计算语义相似度,它翻阅心脏病学书籍并找到“最接近”的匹配项——也许是一段关于心脏神经的段落。生成器随后试图利用这些与心脏相关的上下文来构建关于大脑的答案。结果就是一个听起来合理但事实错误的诊断。

发生这种情况是因为标准的 RAG 系统缺乏评估 查询-知识相关性 (Query-Knowledge Relevance) 的机制。它们假设只要有查询被提出,答案一定在数据库中。

这篇论文的作者认为,我们需要将其视为一个统计假设检验问题。我们需要区分:

  1. 知识内 (In-Knowledge, IK) 查询: 可以使用语料库回答的问题。
  2. 知识外 (Out-of-Knowledge, OoK) 查询: 超出语料库范围的问题。

解决方案: 统计框架

研究人员引入了一个在两种不同场景下运行的框架: 在线测试 (在单个查询进入时进行检查) 和离线测试 (检查用户行为随时间的变化) 。

图 1: 用于评估 RAG 中查询-知识相关性的假设检验框架概览。

如上图 1 所示,该框架依赖嵌入模型 (将文本转换为向量数值) 来衡量一个查询在多大程度上符合已知、可回答问题的分布。

定义相关性

在我们可以测试相关性之前,必须先在数学上对其进行定义。作者提出了查询-知识相关性 (\(r\)) 的正式定义。

公式 1

简单来说,这个公式将相关性定义为: 当模型获得检索到的文档 (\(D^r\)) 时,与其仅依赖内部知识相比,生成正确答案 (\(a_{gt}\)) 的概率提升幅度。

  • 如果 \(r(q|\mathcal{D}) > 0\),语料库有助于回答问题。该查询属于 知识内
  • 如果 \(r(q|\mathcal{D}) \le 0\),语料库没有帮助 (甚至可能有负面影响) 。该查询属于 知识外

由于我们无法直接为每个新查询计算这个概率 (因为我们不知道标准答案) ,论文建议使用 拟合优度 (Goodness-of-Fit, GoF) 检验来进行经验估计。

核心方法: 在线测试程序

在线测试程序旨在实时保护系统。当用户提交查询时,系统决定是尝试回答还是将其标记为“知识外”。

1. 假设检验

作者将其构建为一个假设检验。

  • 原假设 (\(\mathcal{H}_0\)): 新查询 \(q\) 来自与知识内 (IK) 查询相同的分布。
  • 备择假设 (\(\mathcal{H}_1\)): 新查询来自不同的分布 (它是 OoK) 。

公式 2

为了接受或拒绝原假设,系统会计算一个 p 值 。 如果 p 值低于特定阈值 (通常 \(\alpha = 0.05\)) ,我们就拒绝原假设,并将该查询标记为“知识外”。

p 值的计算依赖于将新查询的“得分”与已知有效查询的得分进行比较。这在经验累积分布函数 (eCDF) 中被形式化:

公式 4

这里,\(t(q)\) 是新查询的检验统计量 (得分) ,而 \(Q_I\) 代表一组已知的知识内查询。

2. 检验统计量: 我们如何为查询评分?

上面提到的“得分”至关重要。什么数学属性最能区分我们假设系统中的有效心脏病学问题和无效神经学问题?作者探索了从嵌入空间推导出的几种统计量:

  • 最大相似度得分 (MSS) : 单个最接近文档的相似度得分。如果最佳匹配仍然相距甚远,该查询可能是 OoK。
  • 第 K 个最近邻 (KNN) : 第 \(k\) 个最接近文档的相似度得分。这检查的是是否存在密集的文档集群,而不仅仅是一个幸运的匹配。
  • 平均 KNN (AvgKNN) : 前 \(k\) 个文档的平均相似度。
  • 熵 (Entropy) : 衡量检索分布的不确定性。高熵表明检索器很“困惑”,将其概率分散在许多弱相关的文档上。
  • 能量 (Energy) : 改编自计算机视觉中的分布外检测。它使用嵌入空间的自由能函数。这种方法通常比简单的余弦相似度更全面地捕捉数据密度。

3. “已知”查询的问题

要运行拟合优度检验,你需要一个参考分布——即一堆你知道是有效的查询 (\(Q_I\)) 。但在现实世界的应用中,你起步时拥有一堆文档,而不是一堆有效的问题。

作者提出了一个聪明的变通方法: 合成查询生成 。 他们使用 LLM (如 GPT-3.5) 阅读文档语料库的片段,并生成可以由该片段回答的问题。这些合成问题充当知识内分布的代理。

这使得该框架完全是自监督的。你不需要人工标记的数据来设置安全护栏;你只需要文档本身。

核心方法: 离线测试程序

框架的第二部分解决了一个长期问题: 分布偏移

随着时间的推移,用户的兴趣会发生变化。如果一个医学数据库建立于 2019 年,它对于关于“流感”的查询高度相关,但对于关于“COVID-19”的查询在统计上就不相关了,即使两者都是医学主题。

离线程序提取一批最近的用户查询 (\(Q_P\)) ,并使用 柯尔莫哥洛夫-斯米尔诺夫检验 (KS 检验) 将其分布与历史知识内分布 (\(Q_I\)) 进行比较。

公式 5

KS 检验 (\(t_{KS}\)) 测量两个查询集的累积分布函数之间的最大距离。如果这个距离具有统计显著性,它就向开发者发出信号: 知识库不再符合用户的提问需求。是时候更新语料库了。

实验与结果

作者使用八个问答 (QA) 数据集对他们的框架进行了严格评估,特别关注生物医学领域 (这是一个高风险且术语密集的领域) 。他们使用 MedQA-US (医学考试) 和 PubMedQA 等数据集作为“知识内”基准,并将 TruthfulQA 等通用领域数据集作为“知识外”噪声。

1. 哪种检验统计量最好?

研究人员比较了不同统计量 (MSS, KNN, Entropy, Energy 等) 区分有效和无效查询的能力。

表 1: 不同检验统计量的 AUROC 结果。(b) PubMed 语料库 表 1: 不同检验统计量的 AUROC 结果。(a) 教科书语料库

上表显示了 AUROC (受试者工作特征曲线下面积) 得分。AUROC 为 1.0 代表完美检测。

  • 性能很高: 在大多数数据集中,这些方法的 AUROC 得分都超过了 0.90,对于“远距离”OoK 查询 (比如向医疗机器人问物理问题) ,得分通常接近 0.99。
  • 没有唯一的赢家: 虽然 能量 (Energy) 得分 (源自基于能量的模型) 在教科书语料库上表现异常出色,但 MSS (最大相似度得分) 在 PubMed 语料库上稍好一些。这表明统计量的选择应根据具体的数据领域进行调整。

2. 击败基线

论文将拟合优度 (GoF) 方法与传统的异常检测算法 (如单类支持向量机 One-Class SVM 和局部异常因子 LOF) 进行了比较。

表 2: 与基于异常检测的基线在教科书语料库上的比较。

表 2 中的结果是决定性的。GoF 框架 (特别是使用能量得分时) 显著优于传统的异常检测方法。作者将此归因于样本效率;当样本量较小时,标准的异常检测难以应对文本嵌入的高维性。

3. 让 LLM 直接告诉我们不行吗?

一个常见的反驳观点是: “为什么不直接问 GPT-4 检索到的文档是否相关?”

作者测试了这种“基于 LLM 的相关性评分”方法。他们提示 GPT-3.5 和 GPT-4 在 0 到 1 的范围内对相关性进行评分。

表 3: 与基于 LM 的相关性评分在教科书语料库上的比较。

如表 3 所示,LLM 的表现惨败。GPT-4 在 PubMedQA 上的 AUROC 仅为 0.2088——比随机猜测还差。这凸显了当前 LLM 的一个关键弱点: 它们往往过于自信,并且在没有产生幻觉联系的情况下,难以严格量化复杂技术文本的相关性。

4. 合成查询的力量

回想一下生成合成问题来训练检测器的“变通方法”。使用假问题进行训练真的能检测真实的坏问题吗?

图 2: 使用真实知识内查询和合成查询估计的临界值示意图…

图 2 可视化了检验统计量的分布。蓝色直方图 (合成查询) 与橙/棕色直方图 (真实知识内查询) 显著重叠。由于分布匹配,源自合成数据的临界阈值 (红/蓝垂直线) 与源自真实数据的阈值非常接近。这证实了开发人员可以使用合成查询来构建可靠的护栏,而无需标记的用户数据日志。

5. 嵌入模型很关键

在这个任务上,并非所有的嵌入模型都是生而平等的。研究人员比较了 Contriever、MedCPT 和 BGE 等模型。

图 3: 六种不同嵌入模型的比较。

图 3 揭示了一个有趣的错位现象。看看 MedCPT (第三组) 。它在实际 QA 任务上的准确率最高 (绿色条很高) ,这意味着当查询有效时,它非常擅长检索正确答案。然而,它检测 OoK 查询的 AUROC (橙色条) 却是最低的。

这意味着一个纯粹为检索性能优化的模型可能会对领域“过拟合”,使其不太能够区分“稍微相关”和“完全不相关”。它太过于努力地想要找到匹配项了。

6. 检测分布偏移 (离线)

最后,离线实验证明了 KS 检验的敏感性。

图 5: 使用教科书语料库的离线测试结果。

在图 5 中,左图显示了 p 值。随着知识内查询比例 (x 轴) 的下降 (意味着引入了更多 OoK 查询) ,p 值向零暴跌。红色虚线代表显著性阈值。这证实了当用户查询流开始偏离知识库的专业范围时,系统可以可靠地发出警报。

结论与启示

这篇论文为蓬勃发展的 RAG 生态系统提供了必要的现实检验。它让我们摆脱了“检索即相关”的天真假设。

通过建立统计框架,作者提供了一种量化 RAG 中不确定性的方法。

  1. 安全性: 我们现在可以在数学上识别系统何时在其知识边界之外运行,并强制其拒绝回答。
  2. 自监督: 合成查询的成功意味着该框架可以部署在任何文档集上——法律、技术或金融——而无需昂贵的人工标记。
  3. 维护: 离线测试框架给工程师提供了一个“检查引擎”指示灯,准确指示数据库何时需要更新。

随着我们继续将大型语言模型整合到关键基础设施中,说“我不知道”的能力可能会成为最智能的功能。