抵御语料库中毒攻击,TrustRAG为RAG系统筑牢防线

论文https://arxiv.org/abs/2501.00879
代码https://github.com/HuichiZhou/TrustRAG

参考文献:TrustRAG: Enhancing Robustness and Trustworthiness in RAG by Zhou et al. arXiv:2501.00879

📖阅读时长:19分钟

🕙发布时间:2025-02-09

近日热文:全网最全的神经网络数学原理(代码和公式)直观解释
欢迎关注知乎和公众号的专栏内容
LLM架构专栏
知乎LLM专栏
知乎【柏企
公众号【柏企科技说】【柏企阅文

RAG系统通常容易受到语料库中毒攻击,这种攻击会通过注入恶意内容显著降低大语言模型(LLM)的性能。为了应对这一挑战,本文[1]的作者提出了TrustRAG,这是一个强大的框架,能在受损和不相关的内容到达语言模型之前对其进行系统过滤。

这种方法实施了一种两阶段防御机制:第一,它利用K均值聚类,基于检索文档的语义嵌入来识别潜在的攻击模式,有效地隔离可疑内容。第二,它利用余弦相似度和ROUGE指标来检测恶意文档,同时通过自我评估过程解决模型内部知识与外部信息之间的差异。

核心贡献

  • 提出TrustRAG,这是首个能有效抵御恶意文档数量超过良性文档的知识破坏攻击的防御框架。
  • TrustRAG在不同的流行RAG基准测试和攻击设置下,降低了攻击成功率,同时保持了较高的响应准确率。

TrustRAG框架

i) 问题公式化

a) 防御目标

目标是抵御RAG系统的恶意攻击,过滤检索器检索到的恶意和不相关文档,最终让大语言模型生成更准确、更可靠的回复。

b) 攻击目标

攻击者选择任意一组$M$个问题,记为$Q = [q_1, q_2, …, q_M]$ 。

对于每个问题$q_i$,攻击者会为其设置任意一个期望的回复$r_i$。

将对RAG系统的语料库中毒攻击表述为一个约束优化问题。

假设攻击者可以为每个问题$q_i$向知识数据库$D$中注入$N$个恶意文档。

正式地,我们有以下优化问题:

其中$I(·)$是指示函数,当条件满足时输出为1,否则为0,$E(q_i;D ∪ Γ)$是从被破坏的知识数据库$D ∪ Γ$中为目标问题$q_i$检索到的$k$个文本的集合。当大语言模型基于为目标问题检索到的$k$个文本生成的答案是目标答案时,目标函数值就会很大。

ii) TrustRAG概述

TrustRAG是一个旨在抵御对RAG系统进行中毒攻击的恶意攻击的框架。

它利用K均值聚类以及大语言模型的内部知识和检索到的外部文档中的集体知识,来生成更值得信赖和可靠的回复。

攻击者针对目标问题和目标答案优化恶意文档。

检索器从知识数据库中检索相似文档,K均值聚类过滤掉恶意文档。

然后大语言模型生成内部知识,并将其与外部知识进行比较,以消除冲突和不相关的文档。

最后,基于最可靠和合适的知识生成输出。

iii) 阶段

a) 清洁检索

此阶段使用K均值聚类($k = 2$),根据嵌入分布区分良性文档和潜在的恶意文档。

解决两种攻击场景:1)单次注入($|p_i| ≤ 1$),即攻击者每个查询$q_i$注入一个恶意文档;2)多次注入($|p_i| > 1$),即每个查询$q_i$注入多个恶意文档。

正式定义攻击者的优化目标为:

其中$\text{Sim}(·, ·)$表示相似度得分(例如余弦相似度),$f_Q$和$f_T$分别是查询和检索文档的文本编码器,$S$和$I$经过优化,以便被检索器检索到,同时使大语言模型生成错误答案。

为确保优化后的文本与原始文本保持语义相似性,同时仍能误导大语言模型,必须满足以下约束条件:

其中$| · |_p$表示$L_p$范数,$\epsilon$是一个小常数,控制最大允许的语义偏差。

其中$\eta$表示在给定中毒输入的情况下,大语言模型生成攻击者期望回复$r_i$的最小概率阈值。

应用K均值聚类算法分析由$f_T$生成的文本嵌入的分布,识别可能表明存在恶意文档的可疑高密度聚类。

在多次注入的情况下,我们的第一阶段防御策略由于恶意文档的高度相似性,能有效地过滤掉大多数恶意文档组或对。

考虑到单次注入攻击,建议使用以下公式中的ROUGE-L分数来比较簇内相似度,旨在为冲突消除和信息整合保留大部分清洁文档,从而稳健地过滤单个恶意文档。

从下图可以观察到,在比较清洁文档对、恶意文档对以及清洁和恶意文档对时,ROUGE-L分数有显著差异。

b) 冲突消除

利用大语言模型的内部知识,这反映了从大量预训练和指令调整数据中获得的共识。

内部知识可以补充从有限的检索文档集中缺失的任何信息,甚至可以反驳恶意文档,实现内部和外部知识之间的相互验证。

首先,我们促使大语言模型通过单次推理生成内部知识。

接下来,我们让大语言模型显式地整合来自其内部知识生成的文档和从外部源检索到的文档中的信息。

最初,我们将来自内部和外部知识源的文档合并为$D_0 = E∪I ∪Γ$。

为了过滤良性和恶意文档之间的冲突,我们使用提示促使大语言模型识别不同文档中的一致信息,检测恶意信息。

最后,我们使用提示促使大语言模型基于每组文档生成最终答案,然后比较它们的可靠性,选择最可靠的答案作为最终输出。

实验

i) 实验设置

a) 数据集

在我们的防御框架中使用三个基准问答数据集:自然问题(Natural Questions,NQ)、火锅问答(HotpotQA)和微软机器阅读理解数据集(MS-MARCO),每个数据集都有一个知识数据库。

b) 攻击方式

引入两种流行的RAG攻击来验证我们防御框架的稳健性。

  • 语料库中毒攻击:PoisonedRAG通过直接将中毒文本附加到对抗性查询上来创建中毒文档。
  • 提示注入攻击:PIA提出一种攻击方式,恶意用户通过扰动离散标记生成少量对抗性段落,以最大化与一组提供的训练查询的相似度。
c) 评估指标
  • 响应准确率(ACC):代表RAG系统在清洁数据库中的准确率。
  • 攻击成功率(ASR):是被攻击者误导产生错误答案的数量。

ii) 实验结果

主要结果展示了不同的防御框架和RAG系统基于三种大语言模型对两种攻击方法的防御情况。

上述结果表明,以前的所有方法都无法有效处理向知识数据库中注入多个恶意文档的场景。在PoisonedRAG的设置下,攻击成功率(ASR)范围从20%到97%,响应准确率(ACC)范围从2%到76% 。

然而,得益于K均值过滤策略,TrustRAG可以显著减少恶意文档,只有一小部分恶意文档会被送到冲突消除阶段。在冲突消除之后,TrustRAG可以整合内部知识,并使用一致组的信息来推断最终答案。

TrustRAG详细分析

i) K均值过滤策略的有效性

a) 中毒文档的分布

下图绘制了一个案例,其中使用了来自NQ数据集的样本,并设置了不同数量的中毒文档。

可以看出,在多个恶意文档的场景中,恶意文档彼此接近;而对于单个中毒文档,它会混入清洁文档中。因此,使用n - gram保留策略来保留清洁文档非常重要。

b) n - gram保留

下表展示了在不同中毒水平和嵌入模型下,各种数据集上的实验结果。F1分数衡量检测中毒样本的性能,而清洁保留率(CRR)评估过滤后保留的清洁样本的比例。

结果表明,在中毒率超过20%后,使用n - gram保留的K均值聚类的F1分数会高于不使用n - gram保留的情况。

然而,当中毒率为20%时,如果不使用n - gram保留,K均值过滤策略会随机移除相似度较高的组,但这会导致降低清洁保留率(CRR)的不良效果,即清洁文档会被误过滤。因此,使用n - gram保留不仅可以保留清洁文档,还能提高检测恶意文档的F1分数。

c) 嵌入模型

从上面的表格可以看出,我们提出的K均值过滤策略对各种嵌入模型都是稳健且有效的。同时,更细粒度的嵌入模型(例如SimCSE)将实现更好的性能,并且在不同的中毒率和数据集下都表现稳健。

ii) 运行时分析

下表展示了在MS - MARCO、NQ和HotpotQA这三个数据集上,各种方法的详细运行时分析。

虽然RobustRAG利用了Github上的现有实现,但所有其他方法都基于相同的推理架构,以确保公平比较。

分析显示,TrustRAG的运行时间大约是普通RAG的两倍,考虑到TrustRAG在稳健性和可靠性方面的显著提升,这是一个合理的权衡。

iii) 基于困惑度检测的有效性

下图展示了清洁文档和恶意文档之间的困惑度分布密度图。虚线表示平均困惑度值。(2)基于Llama3.1 - 8B在NQ数据集上的准确率消融研究柱状图。(3)基于Llama3.1 - 8B在NQ数据集上的攻击成功率消融研究柱状图。

结果表明,清洁文本和对抗文本的PPL值存在大量重叠。

虽然一些对抗样本的PPL值有所升高,但仍有相当一部分对抗样本的PPL值处于清洁文本的范围内。

这种重叠表明,仅使用PPL作为检测对抗攻击的指标可能会导致漏报(将对抗文本误分类为清洁文本)和误报(将清洁文本标记为对抗文本)。

iv) 上下文窗口的影响

使用Llama3.1 - 8B在NQ数据集上,在两种关键场景下进行了广泛的实验:(1)清洁设置,上下文窗口范围从1到20个文档;(2)中毒设置,有5个恶意文档且上下文窗口可变。

结果显示TrustRAG在两种场景下都表现出色。在清洁设置中,TrustRAG的准确率随着上下文窗口的增大(5 - 20个文档)稳步提高,始终优于普通RAG。

更重要的是,在中毒场景中,TrustRAG保持约80%的准确率,同时将攻击成功率(ASR)保持在1%左右。这与普通RAG形成鲜明对比,普通RAG在攻击成功率为60 - 90%的情况下,准确率仅为10 - 40%。

结论

引入TrustRAG,这是首个旨在对抗涉及多个恶意注入文档攻击的RAG防御框架。TrustRAG采用K均值过滤来减少恶意文档的存在,并结合内部和外部知识源来解决冲突,减轻这些攻击的影响。

在多个基准测试中的综合评估表明,TrustRAG优于现有的防御方法,即使在传统方法失效的严重中毒场景下,也能保持较高的准确率。

TrustRAG的即插即用架构使其可以立即与任何大语言模型一起部署。

## 推荐阅读
1. DeepSeek-R1的顿悟时刻是如何出现的? 背后的数学原理
2. 微调 DeepSeek LLM:使用监督微调(SFT)与 Hugging Face 数据
3. 使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT
4. DeepSeek R1:了解GRPO和多阶段训练
5. 深度探索:DeepSeek-R1 如何从零开始训练
6. DeepSeek 发布 Janus Pro 7B 多模态模型,免费又强大!

本文由mdnice多平台发布


柏企科技圈
23 声望5 粉丝