当前位置: 首页 > article >正文

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG

[2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation

代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthiness in RAG"

背景:RAG攻击方案严重威胁了RAG的可信度,现有的防御方案存在不足【[论文阅读]Certifiably Robust RAG against Retrieval Corruption-CSDN博客主要是少数服从多数,但是一旦topk中恶意文本占多数(PoisonedRAG),这种防御就会失效】【恶意文本和普通文本之间的困惑度差异不大,因此困惑度过滤也很有限】【对用户的查询进行释义操作以及增加上下文数目都不能从根本上解决语料库投毒问题】

TrustRAG

图1:TrustRAG框架使用两阶段流程保护RAG系统免受语料库投毒攻击。 在第一阶段,它(1)通过K均值聚类识别恶意文档,以及(2)基于嵌入分布过滤恶意内容。 在第二阶段,它(3)提取内部知识以确保准确的推理,(4)通过对一致的文档进行分组并丢弃不相关或冲突的文档来解决冲突,以及(5)基于自我评估生成可靠的最终答案。

文章假设的攻击者在目标和能力上和PoisonedRAG一致。

 TrustRAG是一个旨在防御针对RAG系统投毒恶意攻击的框架。 它利用K均值聚类和来自LLM内部知识和检索到的外部文档的集体知识来生成更值得信赖和可靠的响应。 攻击者针对目标问题和目标答案优化恶意文档。 检索器从知识库中检索相关文档,K均值过滤掉恶意文档。 然后,LLM从其内部知识生成有关查询的信息,并将其与外部知识进行比较,以消除冲突和无关文档。 最后,基于最可靠的知识生成输出。

【核心思想是,攻击者肯定会构造最相似的文本,这些恶意文本之间的相似度必然很高,在嵌入空间中很容易聚类在一起,因此用kmeans过滤掉这些很密集集中在一起的类别。同时还要借助于大模型自己的内部知识来辅助判断外部知识的可信程度。这就导致了知识更新漏洞仍然存在。】

【知识更新漏洞是我自己这样叫的,因为事物是不断发展变化的,早期的信息可能会变得错误,而LLM内部知识是有一个截至时间的,如果构造的虚假信息包含更加新的日期,LLM本质上会产生自我怀疑,偏信新知识。这实际上和PoisonedRAG构造的虚假信息一致,因为case study里面大模型生成的恶意文本就是偏重于知识的更新,杜撰一些最新事件,从而误导RAG】

阶段1:干净检索

用K均值聚类(k=2)根据其嵌入式分布来区分干净文档和潜在恶意文档。

攻击者的优化目标是让恶意文本和目标问题的相似度最大化,可以利用这一点

在第一阶段应用K均值聚类算法来分析由ft(检索文档的编码器)生成的文本嵌入的分布,并识别可能指示存在恶意文档的可疑高密度聚类。 在多次注入的情况下,第一阶段防御策略有效地过滤掉了大多数恶意组或对,因为它们具有很高的相似性。

使用ROUGE-L得分来比较簇内相似性,旨在保留大部分干净文档用于冲突消除信息整合,从而有效过滤单个恶意文档。 图3验证了,比较干净文档对、恶意文档对以及干净文档和恶意文档对时,ROUGE-L得分存在显著差异。 利用此特性可以决定不过滤仅包含一个恶意文档的干净文档组,从而减少信息损失。 相反,这些组可以继续进行冲突消除,重点是识别和消除单次注入攻击。

【我是否可以认为,这个图是用来测试数据的差异的,就是纯恶意文本放在一起的话,他们之间的相似度极高。并且Rouge分数也高;纯正常文本放在一起以及掺杂恶意文本的正常文本 两类数据,相似度适中,ROUGE分数也适中,因此使用KMEANS把文本分为两类是比较合理的,相似度之间的巨大差异可以把很大一部分集中的恶意文本集合给剔除,剩余一些混在正常文本中,需要第二阶段处理来防止它们起作用。】

 阶段2:冲突移除

第一阶段把大多数的恶意文档过滤掉了,第二阶段利用LLM的内部知识来补充从有限检索文档集中缺失的任何信息,甚至可以驳斥恶意文档,从而实现内部和外部知识之间的相互印证。

 内部知识抽取:提示LLM生成内部知识,仅执行一次大语言模型推理

知识整合:利用大语言模型明确整合来自其内部知识生成的文档和从外部来源检索到的文档中的信息。使用下面的prompt来识别不同文档之间的一致信息,并检测恶意信息。 此步骤会将输入文档中不可靠的知识重新分组为更少的精炼文档。 重新分组的文档还将它们的来源属性到相应的输入文档。

检索正确的自我评估: TrustRAG 提示大语言模型通过评估其内部知识与检索到的外部文档进行自我评估。此过程识别冲突、整合一致信息并确定最可靠的来源,确保最终答案既准确又可靠。 这种自我评估机制是增强 TrustRAG 鲁棒性的关键,使其能够保持高精度

个人见解

RAG投毒,往知识库投毒,攻击和防御都是假设已经存在有毒文本在知识数据库中了。攻击的话还好说一点,毕竟涉及到提高相似度以及诱导大模型的双层任务,不过PoisonedRAG这篇文章似乎把RAG投毒攻击的税都收完了,其他文章的创新就显得很不足了。

说回这个防御,本质上还是prompt工程,稍微好一点的是用了一个聚类把正常样本和潜在异常样本区分开,但是kmeans取k=2感觉就挺激进的,毕竟聚类结果中包含挺多正常文本也是很常见的。

文章能够自圆其说是因为假设的攻击者必须以最高相似度为目标来构造恶意文本,导致恶意文本有更大的概率汇集的一起。

所谓的冲突移除实际上就是提示大模型自己对内容进行判断和整合

考虑到RAG系统的实际应用,这种需要大模型再判断一轮的方法的效率都不会高。

实验

数据集:NQ,hotpotqa,msmarco

攻击方案:PoisonedRAG和提示注入攻击PIA(Corpus poisoning)

评估指标:ACC表示系统的响应准确率;ASR表示攻击者误导生成错误答案的数目

RobustRAG是一种使用聚合和投票策略的防御框架。 如果恶意文档的数量超过良性文档的数量,它就会失败。 然而,得益于K-means过滤策略,TrustRAG显著减少了检索过程中恶意文档的数量,只有一小部分恶意文档被用于 冲突消除阶段。在冲突消除,TrustRAG可以整合内部知识,利用一致性组的信息,并自我评估是否使用来自RAG的信息。 结果表明,TrustRAG可以有效增强RAG系统的鲁棒性。

 

来自NQ数据集的样本被用于不同数量的污染文档中,可以看到,在多个恶意文档的情况下,恶意文档彼此靠近。单个污染文档将与干净文档混合在一起。 因此,使用n-gram保留来保留干净文档非常重要。

当中毒率超过20%时,在干净检索阶段应用n-gram保留后,F1分数更高;如果没有n-gram保留,K均值过滤策略将随机移除具有较高相似性的组,但这会导致降低CRR的不良影响。 因此,干净文档可能会被错误地过滤掉。 因此,使用n-gram保留不仅可以保留干净文档,还可以提高检测恶意文档的F1分数。

 不同的嵌入模型:SimCSE、Bert和BGE。K均值过滤策略对于所有三种嵌入模型都是稳健有效的。更细粒度的嵌入模型(例如SimCSE)可以实现更好的性能,并且在不同的中毒率和数据集上更稳健。

与 Vanilla RAG 相比,TrustRAG 的推理时间大约是其两倍,考虑到 TrustRAG 在鲁棒性和可靠性方面取得的显著改进,这是一个合理的权衡。

干净文本和对抗性文本的 PPL 值存在显著重叠。尽管一些对抗样本表现出更高的 PPL 值,但许多样本都落在干净文本的范围内。 这种重叠突出了仅仅依赖 PPL 作为检测指标的局限性,因为它可能导致假阴性 (将对抗性文本误分类为干净文本) 和假阳性 (将干净文本标记为对抗性文本)。

当中毒率超过 20% 时,K 均值过滤可以有效地防御攻击,同时保持较高的响应准确率。 即使在 20% 的中毒率下(只有一个中毒文档),它仍然成功地保持了干净文档的完整性。

 将TrustRAG在提供和不提供从LLM推断出的内部知识的情况下的表现进行比较,观察到利用LLM内部知识可以显著提高准确率(ACC)和攻击成功率(ASR)。 尤其是在20%的投毒率下,内部知识有效地解决了恶意文档和干净文档之间的冲突,显著提高了鲁棒性。

 虽然K均值聚类和内部知识显著降低了ASR,但冲突消除组件也在防御框架中发挥着至关重要的作用。 通过利用知识整合和基本原理输出,TrustRAG进一步增强了RAG系统在不同投毒百分比下所有场景中的鲁棒性。

 自我评估机制可以进一步提高TrustRAG在所有设置下的性能,尤其是在20%的投毒率下。 这表明LLM可以有效地区分归纳信息或恶意信息与内部和外部知识。

 除了蓄意的投毒攻击之外,RAG系统还可能面临另外两种关键类型的非对抗性噪声:来自返回不相关文档的不完美检索器的基于检索的噪声,以及来自知识库本身固有错误的基于语料库的噪声.在NQ数据集上使用Llama3.1-8B进行了大量的实验,涵盖两种关键场景:(1)上下文窗口范围从1到20个文档的干净设置,以及(2)包含5个恶意文档和不同上下文窗口的投毒设置。 结果显示TrustRAG在这两种情况下都具有优越的性能。 在干净的设置中,TrustRAG的准确性随着更大的上下文窗口(5−20个文档)而稳步提高,始终优于普通的RAG。 更重要的是,在投毒场景中,TrustRAG保持大约80%的准确率,同时保持攻击成功率(ASR)在1%左右。 这与普通的RAG形成了鲜明对比,普通的RAG在60−90%的ASR水平下,准确率仅为10−40%。

 使用Llama3.1-8B在RedditQA数据集上评估,使用检索到的文档的原始RAG的响应准确率为27.3%,攻击成功率为43.8%。 相比之下,TrustRAG的响应准确率为72.2%,攻击成功率为11.9%,这证明了其在真实世界对抗条件下的鲁棒性。

相关文章:

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下&#xf…...

小木的算法日记-多叉树的递归/层序遍历

🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

消息队列系统设计与实践全解析

文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...