HyeonjeongHa/MM-PoisonRAG

GitHub: HyeonjeongHa/MM-PoisonRAG

MM-PoisonRAG 是一个用于对多模态RAG系统进行知识投毒攻击评估的PyTorch框架,旨在揭示并量化外部知识库被注入虚假信息后对模型生成安全性的影响。

Stars: 16 | Forks: 1

# MM-PoisonRAG:通过局部和全局投毒攻击破坏多模态 RAG 这是论文***[MM-PoisonRAG:通过局部和全局投毒攻击破坏多模态 RAG](https://arxiv.org/abs/2306.05031)*** 的官方 PyTorch 实现。
image info
## 📦 待发布 - 由 LPA-BB、LPA-Rt、GPA-Rt、GPA-RtRrGen 生成的对抗知识。 ## 📋 摘要 配备了检索增强生成(RAG)的多模态大语言模型(MLLMs)利用其丰富的参数化知识和动态的外部知识,在问答等任务中表现出色。虽然 RAG 通过将响应基于与查询相关的外部知识来增强 MLLMs,但这种依赖性带来了一个至关重要但尚未探索的安全风险:知识投毒攻击,即故意将虚假信息或无关知识注入外部知识库,以操纵模型输出产生错误甚至有害的结果。 为了揭示多模态 RAG 中的这些漏洞,我们提出了 MM-PoisonRAG,这是一种新颖的知识投毒攻击框架,包含两种攻击策略:局部投毒攻击(LPA),在文本和图像中注入特定于查询的虚假信息以进行定向操纵;以及全局投毒攻击(GPA),在 MLLM 生成过程中提供错误指导,以诱发所有查询产生无意义的响应。 我们在多个任务、模型和访问设置中评估了我们的攻击,结果表明 LPA 成功操纵 MLLM 生成了攻击者控制的答案,在 MultiModalQA 上的成功率高达 56\%。此外,GPA 仅通过注入单条无关知识,就能将模型生成的准确率彻底破坏至 0\%。我们的结果突显了针对知识投毒建立强大防御机制以保护多模态 RAG 框架的迫切需求。 ## 🛠️ 安装说明 - `python == 3.10` - 使用 `requirements.txt` 文件配置环境,然后运行 `post_install.sh` 文件。最后,按照 [LLaVA](https://github.com/haotian-liu/LLaVA) 的说明配置您的环境。 ``` pip install -r requirements.txt bash post_install.sh ``` #### 数据准备 将以下两个基准数据集放置在 `./finetune/tasks` 目录中 - 从 [WebQA](https://drive.google.com/drive/folders/1wY18Vbrb8yDbFSg1Te-FQIs84AYYh48Z) 和 [MultimodalQA](https://github.com/allenai/multimodalqa) 下载图像文件。 - 将 `MMQA_imgs/` 放在 `./finetune/tasks` 下。 - 解压文件,并将 `WebQA_imgs/train`、`WebQA_imgs/val`、`WebQA_imgs/test` 放在 `./finetune/tasks` 下。 ## 🚀 MM-PoisonRAG 1. 您必须首先使用 `LPA-BB/LPA-Rt/GPA-Rt/GPA-RtRrGen` 生成投毒知识,并获取包含投毒知识信息的元数据文件。 2. 运行 `mllm_rag.py` 以评估投毒攻击前后的检索召回率和最终准确率。 ### LPA-BB ``` # MMQA CUDA_VISIBLE_DEVICES=0 python lpa_bb.py --task MMQA --metadata_path datasets/MMQA_test_image.json --save_data_dir datasets --save_img_dir datasets/MMQA_lpa-bb_images # WebQA CUDA_VISIBLE_DEVICES=0 python lpa_bb.py --task WebQA --metadata_path datasets/WebQA_test_image.json --save_data_dir datasets --save_img_dir datasets/WebQA_lpa-bb_images ``` ### LPA-Rt - 您需要先运行 LPA-BB 以获取元数据文件 `MMQA-lpa-bb.json`。 ``` # MMQA CUDA_VISIBLE_DEVICES=0 python lpa_rt.py --task MMQA --metadata_path datasets/MMQA-lpa-bb.json --save_data_dir datasets --save_img_dir datasets/MMQA_lpa-rt_images --num_steps 50 --eps 0.05 --lr 0.005 # WebQA CUDA_VISIBLE_DEVICES=0 python lpa_rt.py --task WebQA --metadata_path datasets/WebQA-lpa-bb.json --save_data_dir datasets --save_img_dir datasets/WebQA_lpa-rt_images --num_steps 50 --eps 0.05 --lr 0.005 ``` ### GPA-Rt - 如果您拥有包含由 LPA-BB 或 LPA-Rt 生成的投毒知识的元数据文件,您可以自动估算 GPA 相对于 LPA 攻击在所有查询中的胜率。 ``` # MMQA CUDA_VISIBLE_DEVICES=0 python gpa_rt.py --task MMQA --metadata_path datasets/MMQA-lpa-bb.json --save_data_dir datasets --save_img_dir datasets/MMQA_gpa-rt_images --num_steps 500 --lr 0.005 # WebQA CUDA_VISIBLE_DEVICES=0 python gpa_rt.py --task WebQA --metadata_path datasets/WebQA_lpa-bb.json --save_data_dir datasets --save_img_dir datasets/WebQA_gpa-rt_images --num_steps 500 --lr 0.005 ``` ### GPA-RtRrGen - 您至少需要 3 个 GPU 才能运行 `gpa_rtrrgen.py`。 - 您可以将 `reranker_type` 和 `generator_type` 设置为您想要针对的特定模型(llava 或 qwen)。 ``` # MMQA CUDA_VISIBLE_DEVICES=0,1,2 python gpa_rtrrgen.py --task MMQA --metadata_path datasets/MMQA-lpa-bb.json --save_dir results --num_iterations 2500 --lr 0.01 --alpha 0.2 --beta 0.3 --reranker_type llava --generator_type llava # WebQA CUDA_VISIBLE_DEVICES=0,1,2 python gpa_rtrrgen.py --task WebQA --metadata_path datasets/WebQA_lpa-bb.json --save_dir results --num_iterations 2500 --lr 0.01 --alpha 0.2 --beta 0.3 --reranker_type llava --generator_type llava ``` ### 📊 基准测试评估 - 您可以使用您想要评估的 `poisoned_data_path`(LPA-BB/LPA-Rt/GPA-Rt/GPA-RtRrGen)。 - 您可以通过更改 `clip_topk`、`rerank_off`、`use_caption` 来评估 3 种检索和重排设置。 - 您可以使用 `llava` 或 `qwen` 来调整重排器和生成器模型。重要的是,当您评估 GPA-RtRrGen 时,您必须使用与生成 GPA-RtRrGen 时相同的重排器和生成器模型。 ``` # MMQA,K=1,无 rerank CUDA_VISIBLE_DEVICES=0 python mllm_rag.py --task MMQA --retrieve_type clip --reranker_type llava --generator_type llava --index_file_path datasets/faiss_index/MMQA_test_image_clip.index --save_dir results --poisoned_data_path datasets/MMQA_lpa-bb.json --clip_topk 1 --rerank_off # MMQA,K=5,仅使用图像 rerank CUDA_VISIBLE_DEVICES=0 python mllm_rag.py --task MMQA --retrieve_type clip --reranker_type llava --generator_type llava --index_file_path datasets/faiss_index/MMQA_test_image_clip.index --save_dir results --poisoned_data_path datasets/MMQA_lpa-bb.json --clip_topk 5 # MMQA,K=5,同时使用图像和标题 rerank CUDA_VISIBLE_DEVICES=0 python mllm_rag.py --task MMQA --retrieve_type clip --reranker_type llava --generator_type llava --index_file_path datasets/faiss_index/MMQA_test_image_clip.index --save_dir results --poisoned_data_path datasets/MMQA_lpa-bb.json --clip_topk 5 --use_caption # WebQA,K=2,无 rerank CUDA_VISIBLE_DEVICES=0 python mllm_rag.py --task WebQA --retrieve_type clip --reranker_type llava --generator_type llava --index_file_path datasets/faiss_index/WebQA_test_image_clip.index --save_dir results --poisoned_data_path datasets/WebQA_lpa-bb.json --clip_topk 2 --rerank_off ``` - 如果您想评估 LPA 的可迁移性,您可以设置 `transfer` 并更改 `retriever_type` 和 `index_file_path`。 ``` # MMQA,K=1,无 rerank CUDA_VISIBLE_DEVICES=0 python mllm_rag.py --transfer --task MMQA --retrieve_type openclip --reranker_type llava --generator_type llava --index_file_path datasets/faiss_index/MMQA_test_image_openclip.index --save_dir results --poisoned_data_path datasets/MMQA_lpa-bb.json --clip_topk 1 --rerank_off ``` ## 📚 引用 如果您发现提供的代码有用,请引用我们的工作。 ``` @article{ha2023generalizable, title={Generalizable Lightweight Proxy for Robust NAS against Diverse Perturbations}, author={Ha, Hyeonjeong and Kim, Minseon and Hwang, Sung Ju}, journal={arXiv preprint arXiv:2306.05031}, year={2023} } ```
标签:AI安全, Chat Copilot, CISA项目, DLL 劫持, PyTorch, Vectored Exception Handling, 凭据扫描, 多模odal, 大语言模型, 学术研究, 检索增强生成(RAG), 知识投毒攻击, 逆向工具