详解RAG应用开发幻觉检测利器LettuceDetect​

译文 精选
人工智能
本文全面介绍用于检索增强生成(RAG)开发管道的轻量级幻觉检测器LettuceDetect,并探讨如何利用ModernBERT模型的扩展上下文窗口构建用于幻觉检测的标记级分类器。

译者 | 朱先忠

审校 | 重楼

简介

最近,我们团队推出了LettuceDetect框架,这是一款用于检索增强生成(RAG)开发管道的轻量级幻觉检测器。它是一种基于ModernBERT模型构建的基于编码器的模型,根据MIT许可证发布,带有现成的Python包和预训练模型。

  • 是什么:LettuceDetect是一个标记级检测器,可标记LLM回答中不受支持的片段。
  • 如何使用:在RAGTruth(18k个样本)幻觉语料库上进行训练,利用ModernBERT模型实现长达4k个标记的上下文长度。
  • 开发原因:它解决了(1)先前仅编码器模型中的上下文窗口限制;以及(2)基于LLM的检测器的高计算成本。
  • 此框架的亮点主要体现在:

A.在RAGTruth幻觉语料库上击败了之前基于编码器的模型(例如Luna)。

B.尺寸仅为其一小部分,却超越了经过微调的Llama-2-13B(引文2),并且推理效率极高。

C.完全开源,遵循MIT许可证。

LettuceDetect框架通过发现LLM输出中的“过时的”部分来保持你的RAG框架一直最新。

快速链接

A.基础模型

B.大型模型

  • Streamlit演示程序:访问我们的Hugging Face空间或者是按照GitHub说明在本地运行。

为什么选择LettuceDetect?

时至今日,大型语言模型(LLM)在NLP任务中取得了长足进步,例如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仍然容易产生幻觉,因此它们在医学或法律等关键领域的应用仍然可能存在缺陷。

幻觉检测的当前解决方案

当前的幻觉检测解决方案可以根据所采用的方法分为不同的类别:

  • 基于提示的检测器:这些方法(例如RAGASTrulensARES)通常利用零样本或少量样本提示来检测幻觉。它们通常依赖于大型LLM(如GPT-4)并采用SelfCheckGPT(引文12)、LMvs.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的直接替代品,它是一种先进的仅编码器的转换器架构,在原始BERT模型上融入了几项现代设计改进,例如它使用旋转位置嵌入(RoPe)来处理最多8,192个标记的序列,使用取消填充优化来消除填充标记上浪费的计算,使用GeGLU激活层来增强表现力,并使用交替注意力来实现更高效的注意力计算。

LettuceDetect利用ModernBERT的扩展上下文窗口构建用于幻觉检测的标记级分类器。这种方法避开了旧版基于BERT的模型的许多限制(例如,短上下文边界),并避免了大型基于LLM的检测器的推理开销。我们的实验表明,LettuceDetect的性能优于其他基于编码器的系统,同时仍能与经过微调的LLM检测器相媲美,而计算成本仅为后者的一小部分。

数据

RAGTruth是第一个大型开源(MIT许可证)基准,专门用于评估检索增强生成(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变体作为标记分类模型。模型的输入是Context、Question和Answer段的串联,带有专门的标记([CLS])(用于上下文)和([SEP])(作为分隔符)。为了便于计算,我们将序列长度限制为4,096个标记,但ModernBERT理论上最多可以处理8,192个标记。

标记化和数据处理

  • 标记化:我们使用转换器库中的AutoTokenizer来处理子词标记化,并适当地插入[CLS]和[SEP]。
  • 标签:

A.上下文/问题标记被屏蔽(即在PyTorch中分配-100的标签),因此它们不会导致损失。

B.每个答案标记都会收到一个标签0(支持)或1(幻觉)。

模型架构

我们的模型基于Hugging Face的AutoModelForTokenClassification构建,使用ModernBERT作为编码器,并在其上设置分类头。与之前一些基于编码器的方法(例如,在NLI任务上进行预训练的方法)不同,我们的方法仅使用ModernBERT,没有额外的预训练阶段。

训练配置

  • 优化器:AdamW,学习率为1*10^-5,权重衰减为0.01。
  • 硬件:单个NVIDIA A100 GPU。
  • 世代(Epochs):总共6个训练世代。
  • 批处理:

A.批次大小为8;

B.使用PyTorch DataLoader加载数据(启用数据混洗功能);

C.通过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的大型评判系统相比,它以极小的规模和成本实现了接近最先进的准确度,同时提供了精确的标记级幻觉检测。

开发实战

安装软件包:

pip install lettucedetect
  • 1.

然后,你可以按如下方式使用该包:

from lettucedetect.models.inference import HallucinationDetector
#对于基于转换器的方法:
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."
#得到跨度级的预测,表明答案的哪一部分被认为是幻觉。
predictions = detector.predict(cnotallow=contexts, questinotallow=question, answer=answer, output_format="spans")
print("Predictions:", predictions)
#预测结果是:[{'start': 31, 'end': 71, 'confidence': 0.9944414496421814, 'text': ' The population of France is 69 million.'}]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

结论

我们在本文中详细介绍了我们团队研发的LettuceDetect,这是一个轻量级且高效的RAG系统幻觉检测框架。通过利用ModernBERT的扩展上下文功能,我们的模型在RAGTruth基准上实现了强劲的性能,同时保持了较高的推理效率。这项工作为未来的研究方向奠定了基础,例如扩展到其他数据集、支持多种语言以及探索更先进的架构。即使在这个阶段,LettuceDetect也证明了使用精简的、专门构建的基于编码器的模型可以实现有效的幻觉检测。

引文

【1】Niu等人,2024,RAGTruth: A Dataset for Hallucination Detection in Retrieval-Augmented Generation(RAGTruth:检索增强生成中的幻觉检测数据集)。

【2】Luna: A Simple and Effective Encoder-Based Model for Hallucination Detection in Retrieval-Augmented Generation(Luna:一种简单有效的基于编码器的检索增强生成幻觉检测模型)。

【3】ModernBERT: A Modern BERT Model for Long-Context Processing(ModernBERT:用于长上下文处理的现代BERT模型)。

【4】GPT-4 report(GPT-4报告)。

【5】Llama-3 report(Llama-3报告)。

【6】Mistral 7B

【7】Kaddour等人,2023,Challenges and Applications of Large Language Models(大型语言模型的挑战与应用)。

【8】Huang等人,2025,A Survey on Hallucination in Large Language Models: Principles, Taxonomy, Challenges, and Open Questions(大型语言模型中的幻觉调查:原理、分类、挑战和未决问题)。

【9】Gao等人,2024,Retrieval-Augmented Generation for Large Language Models: A Survey(大型语言模型的检索增强生成:一项调查)。

【10】Ji等人,2023,Survey of Hallucination in Natural Language Generation(自然语言生成中的幻觉研究)。

【11】Sun等人,2025,ReDeEP: Detecting Hallucination in Retrieval-Augmented Generation via Mechanistic Interpretability(ReDeEP:通过机械可解释性检测检索增强生成中的幻觉)。

【12】Manakul等人,2023,SelfCheckGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models(SelfCheckGPT:用于生成大型语言模型的零资源黑盒幻觉检测)。

【13】Cohen等人,2023,LM vs LM: Detecting Factual Errors via Cross Examination(LM vs LM:通过交叉询问检测事实错误)。

【14】Friel等人,2023,Chainpoll: A high efficacy method for LLM hallucination detection(Chainpoll:一种高效的LLM幻觉检测方法)。

【15】Song等人,2024,RAG-HAT: A Hallucination-Aware Tuning Pipeline for {LLM} in Retrieval-Augmented Generation(RAG-HAT:检索增强生成中用于LLM的幻觉感知调整管道)。

【16】Devlin等人,2019,BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT:用于语言理解的深度双向Transformer预训练)。

译者介绍

朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。

原文标题:LettuceDetect: A Hallucination Detection Framework for RAG Applications,作者:Adam Kovacs

责任编辑:姜华 来源: 51CTO内容精选
相关推荐

2024-10-29 11:54:25

2024-01-09 14:05:15

大型语言模型RAG向量数据库

2024-01-10 07:42:59

人工智能模型RAG

2024-10-12 08:03:25

2023-12-10 15:15:18

开源模型工具

2024-10-17 09:09:04

2024-05-06 08:44:25

FrugalGPT大型语言模型LLM

2024-08-05 09:14:14

2024-08-12 08:28:53

2013-07-16 09:43:17

云IDE云应用开发云服务

2024-04-01 11:46:34

BpythonPython开发

2009-10-15 15:12:39

Equinox服务器端Equinox

2024-05-23 13:54:40

2021-06-06 16:56:49

异步编程Completable

2024-09-06 13:18:58

2011-09-08 13:11:07

Android Wid实例

2011-08-17 14:30:34

iOS开发窗口

2025-02-03 16:24:20

2011-08-10 17:37:00

iPhoneASIHTTPRequ

2011-08-17 14:20:21

IOS开发GraphicsCon
点赞
收藏

51CTO技术栈公众号