LettuceDetect:RAG 应用中的幻觉检测框架
因为即使是 AI 也需要事实核查!🥬
摘要
我们推出了 **LettuceDetect**,一个用于检索增强生成 (RAG) 流水线的轻量级幻觉检测器。它是一个基于 ModernBERT 构建的**编码器模型**,在 MIT 许可证下发布,提供即用型 Python 包和预训练模型。
- **是什么**:LettuceDetect 是一个标记级检测器,用于标记 LLM 答案中不受支持的片段。🥬
- **如何工作**:在 RAGTruth(1.8 万个示例)上训练,利用 ModernBERT 处理最长 4k 标记的上下文。🚀
- **为什么**:它解决了 (1) 以前仅编码器模型的上下文窗口限制,以及 (2) 基于 LLM 的检测器的高计算成本。⚖️
- 亮点:
- 在 RAGTruth 上优于以前基于编码器的模型(例如 Luna)。✅
- 以更小的模型规模超越了微调的 Llama-2-13B [2],并且推理效率很高。⚡️
- 完全**开源**,采用 MIT 许可证。🔓
**LettuceDetect** 通过发现 LLM 输出中的**腐烂**部分,保持您的 RAG 框架**新鲜**。😊
快速链接
- **GitHub**:github.com/KRLabsOrg/LettuceDetect
- **PyPI**:pypi.org/project/lettucedetect
- **arXiv 论文**:2502.17125
- Hugging Face 模型:
- **Streamlit 演示**:访问我们的 Hugging Face Space 或根据 GitHub 说明在本地运行。
开始使用
安装包
pip install lettucedetect
然后,您可以按以下方式使用该包
from lettucedetect.models.inference import HallucinationDetector
# For a transformer-based approach:
detector = HallucinationDetector(
method="transformer", model_path="KRLabsOrg/lettucedect-base-modernbert-en-v1"
)
contexts = ["France is a country in Europe. The capital of France is Paris. The population of France is 67 million.",]
question = "What is the capital of France? What is the population of France?"
answer = "The capital of France is Paris. The population of France is 69 million."
# Get span-level predictions indicating which parts of the answer are considered hallucinated.
predictions = detector.predict(context=contexts, question=question, answer=answer, output_format="spans")
print("Predictions:", predictions)
# Predictions: [{'start': 31, 'end': 71, 'confidence': 0.9944414496421814, 'text': ' The population of France is 69 million.'}]
为什么选择 LettuceDetect?
大型语言模型 (LLM) 在自然语言处理任务中取得了长足进步,例如 GPT-4 [4]、Llama-3 模型 [5] 或 Mistral [6](以及更多)。尽管 LLM 取得了成功,但**幻觉**仍然是在高风险场景(如医疗保健或法律领域)部署 LLM 的主要障碍 [7,8]。
**检索增强生成 (RAG)** 试图通过将 LLM 的响应基于检索到的文档来缓解幻觉,提供模型可以参考的外部知识 [9]。但即使 RAG 是减少幻觉的强大方法,LLM 在这些设置中仍然会遭受幻觉 [1]。幻觉是指输出中无意义、事实不正确或与检索到的上下文不一致的信息 [8]。Ji 等人 [10] 将幻觉分类为
- 内部幻觉:源于模型预先存在的内部知识。
- 外部幻觉:当答案与提供的上下文或参考冲突时发生。
虽然 RAG 方法可以缓解内部幻觉,但它们无法避免外部幻觉。Sun 等人 [11] 表明,模型倾向于优先考虑其内部知识而不是外部上下文。由于 LLM 仍然容易产生幻觉,因此它们在关键领域(例如医疗或法律)中的应用仍然可能存在缺陷。
现有幻觉检测解决方案
当前幻觉检测解决方案可根据其采用的方法分为不同类别
- **基于提示的检测器** 这些方法(例如 RAGAS、Trulens、ARES)通常利用零样本或少样本提示来检测幻觉。它们通常依赖大型 LLM(如 GPT-4),并采用 SelfCheckGPT [12]、LM vs. LM [13] 或 Chainpoll [14] 等策略。虽然通常有效,但由于重复调用 LLM,它们的计算成本可能很高。
- **微调 LLM 检测器** 大型模型(例如 Llama-2、Llama-3)可以针对幻觉检测进行微调 [1,15]。这可以产生高精度(如 RAGTruth 作者使用 Llama-2-13B 或 RAG-HAT 在 Llama-3-8B 上的工作所示),但训练和部署需要大量资源。由于模型规模较大和速度较慢,推理成本也往往很高。
- **基于编码器的检测器** 像 Luna [2] 这样的模型依赖于 BERT 风格的编码器(通常限制为 512 个标记)进行标记级分类。这些方法通常比运行完整 LLM 进行推理更高效,但受限于**短上下文窗口**和针对较小输入优化的注意力机制。
用于长上下文的 ModernBERT
ModernBERT [3] 是 BERT 的直接替代品,它是一种最先进的仅编码器 Transformer 架构,融合了多项现代设计改进,例如它使用旋转位置嵌入 (RoPe) 来处理最长 8,192 个标记的序列,非填充优化以消除填充标记上的冗余计算,以及用于增强表达能力的 GeGLU 激活层和用于更高效注意力计算的 交替注意力。
**LettuceDetect** 利用 ModernBERT 的扩展上下文窗口来构建一个用于幻觉检测的标记级分类器。这种方法避开了旧版基于 BERT 的模型(例如,短上下文限制)的许多限制,并避免了大型 LLM 检测器的推理开销。我们的实验表明,LettuceDetect 在性能上优于其他基于编码器的系统,同时与**微调的 LLM 检测器**相比,在计算成本方面具有**竞争力**。
数据
RAGTruth 是第一个专门用于评估检索增强生成 (RAG) 设置中**幻觉检测**的大规模基准测试。它包含 **18,000 个**跨多个任务的带注释示例
- **问答 (QA)**:从 MS MARCO 数据集中采样,其中每个问题检索多达三个文档,并提示 LLM 生成答案。
- **数据到文本生成**:基于 Yelp 开放数据集,其中 LLM 为采样业务生成评论。
- **新闻摘要**:使用来自 CNN/DailyMail 的随机文档,提示 LLM 提供摘要。
RAGTruth 中的每个示例都包括
- 一个**问题**和**提示**,
- 一个或多个**参考段落**或**上下文文档**,
- 一个**LLM 生成的响应**,
- **人工注释**,在片段级别指示答案的任何部分是否事实不符或与参考段落矛盾。
下面是 RAGTruth 的一个说明性示例,展示了一个幻觉实例
问题
如何解释四分位数?
参考
段落 2
第二四分位数 (Q2),更常称为中位数,将数据分成两半 (50%)。
中位数将数据分为下半部分和上半部分。
第三四分位数 (Q3),也称为上限四分位数,*将数据最低的 75%(或最高的 25%)* 分开。
(...)
响应
第一四分位数 (Q1) 将数据最低的 25% 分开,而第二四分位数 (Q2) 将数据分成两个相等的部分,中位数是下半部分的中间值。最后,第三四分位数 (Q3) 将*数据最高的 75%* 分开。
(...)
注释
- **片段**:“最高的 75%”
- **类型**:明显冲突
- 理由:
- 原文:“最低的 75%(或最高的 25%)”
- 生成文本:“最高的 75%”
这个示例展示了一个 RAGTruth 注释,涉及答案中与参考段落冲突的特定片段,提供了幻觉的**类型**(例如,明显冲突)和人类可读的**理由**。我们的方法仅使用二元注释,不使用幻觉类型的注释。
方法
**LettuceDetect 的高层级描述。** 在这里,处理了一个示例**问题**、**上下文**和**答案**三元组。首先,对文本进行分词,然后 LettuceDetect 执行标记级分类。问题和上下文中的标记被**屏蔽**(图中红线所示),以将其从损失函数中排除。答案中的每个标记都会收到一个概率,表明它是幻觉还是受支持。对于*片段级*检测,我们将幻觉概率高于 0.5 的连续标记合并为一个预测片段。
我们在 RAGTruth 数据集上训练了 **ModernBERT-base** 和 **ModernBERT-large** 变体作为标记分类模型。模型的输入是**上下文**、**问题**和**答案**片段的串联,带有专用标记 ([CLS])(用于上下文)和 ([SEP])(作为分隔符)。为了计算可行性,我们将序列长度限制为 4,096 个标记,尽管 ModernBERT 理论上可以处理多达 8,192 个标记。
分词和数据处理
- **分词器**:我们使用 Transformers 库中的 *AutoTokenizer* 来处理子词分词,并适当地插入 `[CLS]` 和 `[SEP]`。
- 标签:
- 上下文/问题标记被*屏蔽*(即在 PyTorch 中分配 `−100` 的标签),以便它们不影响损失。
- 每个*答案*标记都收到**0**(支持)或**1**(幻觉)的标签。
模型架构
我们的模型基于 Hugging Face 的 *AutoModelForTokenClassification*,使用 **ModernBERT** 作为编码器并在其顶部添加分类头。与之前的一些基于编码器的方法(例如,在 NLI 任务上预训练的方法)不同,我们的方法*只*使用 ModernBERT,没有额外的预训练阶段。
训练配置
- **优化器**:AdamW,学习率为 1 * 10^-5,权重衰减为 0.01。
- **硬件**:单个 NVIDIA A100 GPU。
- **时期**:总共 6 个训练时期。
- 批处理:
- 批次大小为 8,
- 使用 PyTorch *DataLoader* 加载数据(启用随机播放),
- 通过 *DataCollatorForTokenClassification* 进行动态填充,以有效处理可变长度序列。
在训练期间,我们监控验证集上的**标记级 F1 分数**,并使用 *safetensors* 格式保存检查点。训练完成后,我们将性能最佳的模型上传到 Hugging Face 以供公开访问。
在推理时,模型会输出答案中每个标记的幻觉概率。我们将连续超过 0.5 阈值的标记聚合起来,生成**片段级**预测,精确指示答案的哪些部分可能出现幻觉。上图展示了此工作流程。
接下来,我们将对模型的性能进行更详细的评估。
结果
我们评估了我们的模型在 RAGTruth 测试集上所有任务类型(问答、数据到文本和摘要)的表现。对于每个示例,RAGTruth 都包含手动标注的片段,指示幻觉内容。
示例级别结果
我们首先评估了**示例级**问题:*生成的答案是否包含任何幻觉?* 我们的大型模型(**lettucedetect-large-v1**)实现了**总体 F1 分数 79.22%**,超越了
- GPT-4 (63.4%),
- **Luna** (65.4%)(之前的最先进基于编码器的模型),
- RAGTruth 论文中提出的**微调 Llama-2-13B** (78.7%)。
它仅次于 **RAG-HAT** 论文 [15] 中的微调 **Llama-3-8B** (83.9%),但 LettuceDetect 明显**更小**、运行**更快**。同时,我们的基础模型(**lettucedetect-base-v1**)在参数更少的情况下仍然具有很强的竞争力。
上表比较了 LettuceDetect 与基于提示的方法(例如 GPT-4)和替代基于编码器的解决方案(例如 Luna)的对齐情况。总体而言,**lettucedetect-large-v1** 和 **lettucedect-base-v1** 是性能非常好的模型,同时在推理设置中非常高效。
片段级别结果
除了检测答案是否包含幻觉外,我们还检查了 LettuceDetect 识别不受支持内容的**确切片段**的能力。在这里,LettuceDetect 在报告片段级性能的模型中取得了**最先进**的结果,显著优于 RAGTruth 论文 [1] 中的微调 Llama-2-13B 模型和其他基线。
大多数方法,例如 RAG-HAT [15],不报告片段级指标,因此我们在此不进行比较。
推理效率
**lettucedetect-base-v1** 和 **lettucedetect-large-v1** 都比典型的基于 LLM 的检测器(例如 GPT-4 或 Llama-3-8B)需要更少的参数,并且可以在单个 NVIDIA A100 GPU 上每秒处理 **30-60 个示例**。这使得它们适用于工业工作负载、实时面向用户的系统和资源受限的环境。
总的来说,这些结果表明 **LettuceDetect** 具有良好的平衡:它在保持高推理效率的同时,以大型 LLM 法官的一小部分大小和成本实现了接近最先进的准确性,同时提供了精确的标记级幻觉检测。
结论
我们介绍了 **LettuceDetect**,一个用于 RAG 系统中幻觉检测的轻量级高效框架。通过利用 ModernBERT 的扩展上下文能力,我们的模型在 RAGTruth 基准测试中取得了强大的性能,同时保持了**高推理效率**。这项工作为未来的研究方向奠定了基础,例如扩展到其他数据集、支持多种语言和探索更高级的架构。即使在此阶段,LettuceDetect 也表明**有效的幻觉检测**可以通过**精简、专用**的基于编码器的模型实现。
引用
如果您觉得这项工作有用,请按以下方式引用:
@misc{Kovacs:2025,
title={LettuceDetect: A Hallucination Detection Framework for RAG Applications},
author={Ádám Kovács and Gábor Recski},
year={2025},
eprint={2502.17125},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2502.17125},
}
此外,如果您使用我们的代码,请不要忘记在我们的 GitHub 仓库 这里 给我们一颗星 ⭐。
参考文献
[1] Niu 等人,2024 年,RAGTruth:一个用于检索增强生成中幻觉检测的数据集
[2] Luna:一种简单有效的基于编码器的检索增强生成幻觉检测模型
[3] ModernBERT:用于长上下文处理的现代 BERT 模型
[4] GPT-4 报告
[5] Llama-3 报告
[6] Mistral 7B
[7] Kaddour 等人,2023 年,大型语言模型的挑战与应用
[8] Huang 等人,2025 年,大型语言模型中的幻觉综述:原理、分类、挑战和开放问题
[9] Gao 等人,2024 年,大型语言模型的检索增强生成:一项调查
[10] Ji 等人,2023 年,自然语言生成中的幻觉调查
[11] Sun 等人,2025 年,ReDeEP:通过机制可解释性检测检索增强生成中的幻觉
[12] Manakul 等人,2023 年,SelfCheckGPT:生成大型语言模型的零资源黑盒幻觉检测
[13] Cohen 等人,2023 年,LM vs LM:通过交叉检查检测事实错误
[14] Friel 等人,2023 年,Chainpoll:一种用于 LLM 幻觉检测的高效方法