Poisoning Retrieval Corpora by Injecting Adversarial Passages
通过注入对抗性文本对检索语料库进行中毒
http://arxiv.org/abs/2310.19156
EMNLP2023
文章的目标就是要让检索器检索的结果包含攻击者生成的对抗性文本,如果能够检索到,则认为攻击成功,策略是随机选一个段落,然后使用梯度下降的方式生成对抗段落,注入整个检索器的语料库。
相比较起来,PoisonedRAG的检索条件S很可能就来源于这篇文章,不过这篇文章对检索器的访问是白盒的,且只关注于被检索到即可,后续没有考虑生成过程。攻击的成功意味着恶意用户通过注入少量的对抗性段落到检索语料库中,成功地误导了密集检索器的行为。具体来说,当系统处理未见过的查询(无论是域内还是域外的)时,它错误地将这些对抗性段落视为最相关的结果,并将其返回给用户。这表明密集检索器在识别和过滤对抗性内容方面的脆弱性,以及其安全性和鲁棒性方面存在的问题。
根据图猜测文章核心:攻击者将恶意的文段注入到检索语料库中,使得恶意文段能够被检索到。
摘要
密集检索器在各种信息检索任务中取得了最先进的性能,但它们可以在多大程度上安全地部署在实际应用中?在这项工作中,我们提出了一种针对密集检索系统的新型攻击,其中恶意用户通过扰动离散标记来生成少量对抗性文本,以最大限度地提高与提供的一组训练查询的相似性。当这些对抗性段落入到大型检索语料库中时,我们表明这种攻击在欺骗这些系统以检索攻击者未看到的查询方面非常有效。更令人惊讶的是,这些对抗性段落可以直接推广到域外查询和成功攻击率高的语料库——例如,我们发现 50 个针对 Natural Questions 优化的生成段落可以误导 >94% 的问题在财务文件或在线论坛中提出。我们还对一系列最先进的密集猎犬进行了基准测试和比较,包括无人监督和有人监督的猎犬。尽管不同的系统表现出不同程度的漏洞,但我们已经证明,它们都可以通过注入多达 500 个段落来成功攻击,与包含数百万个段落的检索语料库相比,这只是一个小部分。
方法
问题定义
考虑一个段落检索问题:检索模型接受用户查询 q,并从由一组段落 {p1, p2, ... p∣C∣} 组成的语料库 C 中检索段落。
主要关注双编码器密集检索器,它们分别使用查询编码器 Eq(⋅)和段落编码器 Ep(⋅)分别嵌入查询和段落,并使用嵌入的内积计算它们的相似性:sim(q, p) = Eq(q)⊺Ep(p) 。
查询和段落编码器通常以对比学习为目标进行训练,DPR和 ANCE的训练目标是有 监督的问题-段落对,Contriever的训练目标是无监督数据。在推理过程中,密集检索模型会在给定查询 q 的情况下执行最近邻搜索,以返回语料库中前 k 个最相似的段落作为检索结果。
语料库投毒攻击
本文的语料库投毒攻击中,生成了一组对抗性段落并将其插入到检索语料库 C 中,目的是误导密集检索模型。 一旦语料库中毒,预计密集检索模型将检索对抗性段落以响应某些查询。 具体来说,目标是生成一小组对抗性段落 A={a1,a2,...,a|A|},其中对抗性段落集的大小比原始语料库小得多,即 |A|≪|C|。 目标是构造 A,使得在查询 Q 分布的前 k 结果中至少有一个对抗性段落。 在实践中,我们假设 Q 中的训练集可用于构造 A,并期望它泛化为保留的测试集。(PoisonedRAG 就是从这里参考的检索条件吧)
优化
给定一组查询,目标是生成一组对抗段落A,使得这些段落在检索结果中排名靠前
那就是要最大化相似度
这里的优化目标是让整个对抗段落A和问题组的平均相似度最大化,PoisonedRAG直接参考了这个做法,只不过更换了表达方式
先讨论如何首先生成单个段落,然后将其扩展以生成多个段落。
受 HotFlip 方法(Ebrahimi 等人,2018 年;Wallace 等人,2019 年)的启发,我们使用基于梯度的方法来解决优化问题,该方法近似于替换标记的模型输出变化。我们使用语料库中的随机段落来初始化对抗段落。每一步,我们都会在 a 中随机选择一个标记 ti,并计算如果用另一个标记 t′ i 替换 ti 后模型输出的近似值。我们使用 HotFlip,利用梯度有效地计算这一近似值:,其中∇eti sim(q,a) 是相对于标记嵌入 eti 的梯度向量。给定查询集 Q,通过选择能使输出近似度最大化的标记,就能得到标记 ti 的最佳替换候选:
其中 V 是词汇表。 请注意,此操作很便宜,因为它只需要嵌入矩阵和梯度向量的一次乘法。
生成多个段落:
扩展攻击以生成多个对抗性段落。 我们的方法基于一个简单的想法,即:把相似的查询分组并为每组查询生成一个对抗性段落。 为了实现这一点,我们使用 k 聚类算法根据查询的嵌入向量对查询进行聚类 Eq(qi).一旦查询被分组到集群中,我们通过解决方程 1 所示的优化问题,为每个集群生成一个对抗性段落。这使我们能够并行生成多个对抗性段落,每个段落都针对一组相似的查询。
实验
设置
检索数据库
用 BEIR 基准进行了实验,这是一套全面的检索数据集。专注于两个流行的数据集,NQ和 MS MARCO ,并评估对这两个数据集的保留测试查询的攻击,以及它对 BEIR 中七个看不见的领域(例如 Quora、科学、财务文件)的可转移性。
密集型检索器
对五种最先进的密集检索模型进行了攻击:Contriever 、Contriever-ms、DPR-nq、 DPR-mul和ANCE。将攻击应用于多向量密集检索器 ColBERT以研究对不同架构的攻击的有效性。
评估指标
在训练集(NQ 或 MS MARCO)上生成对抗性段落并将它们注入语料库,并测量测试查询的 top-k 攻击成功率, 定义为在前 k 结果中检索到至少一个对抗性段落的查询的百分比。 成功率越高,表明模型更容易受到语料库中毒攻击。所有对抗性段落都包含 50 个 token,我们对 token 替换执行了 5000 步。
对域内查询的攻击
图 2(左)显示了 NQ 和 MS MARCO 中不同模型的域内攻击结果。
预先训练的 Contriever 模型在即使只有一个对抗性段落的情况下就很容易受到攻击
尽管监督检索模型(例如 DPR-nq)似乎更难攻击,但通过生成更多的对抗性通道,可以显著提高攻击成功率。
在图 2(右)中,当生成 500 个对抗性段落时,所有密集检索模型至少 50% 在测试查询中被欺骗。我们的结果清楚地表明,密集检索模型非常容易在只有一小部分对抗性段落注入下受到我们提出的攻击,并且在大量查询中失败
攻击向域外迁移
使用 NQ 和 MS MARCO 的训练集对 Contriever 模型进行攻击,并将对抗性段落插入其他检索任务的语料库中。表 1 显示了传输攻击的结果。 令人惊讶的是,生成的对抗性段落可以有效地转移以误导其他检索域/数据集上的模型(例如,在金融领域问答任务 FiQA 上,攻击成功率为 94.1%。 这意味着有可能在不同领域实际部署有效的攻击。(小trick,用的是极易受到攻击的contriever
对多向量检索器的攻击
在多向量检索器中,一段文本对应多个向量。对 ColBERT(ColBERT-v1,在 MS MARCO 上进行了预训练)进行了攻击,使用了来自 NQ 的训练查询和 {1, 10, 50} 对抗性段落。表 2 显示了 ColBERT 对域内 NQ 查询的攻击性能。
发现生成较长的对抗段落(250 个字段)比生成较短的对抗段落(50 个字段)更有效地攻击 ColBERT。我们认为这是因为相似性函数是通过多向量密集检索模型(例如 ColBERT 中的 SumMax)中的多重嵌入来计算的,因此对单个标记的变化不太敏感。我们发现,插入 50 个具有 250 个标记的对抗性段落就能在 20.1% 的 NQ 测试查询中骗过 ColBERT,这表明我们的攻击在攻击多向量检索模型时仍然有效。
对错误信息的针对性攻击
最后,考虑一个案例研究,其中我们研究了生成包含有针对性的错误信息的对抗性段落的可能性。 为此,我们用 “OUR OWN GOVERNMENT IS REALLY POISONING US WITH CHEMTRAILS” 后跟 [MASK] 标记来初始化对抗性段落,并在优化期间保持前缀固定。 我们使用 NQ 数据集对 Contriever 模型进行实验,方法是生成 |A|∈{1,10} 这样的对抗性段落。 我们发现,在这种受限设置下,攻击仍然有效,尽管成功率有所下降: 11.7% 和 59.6% 分别对应 1段和10 段。这表明用户只需查询两到三次就会看到目标消息,这表明以这种方式传播有害信息的可能性。
生成的对抗段落示例
总结
提出了一种针对密集检索器的新攻击,其中对抗性段落入到语料库中以误导它们的检索输出。我们表明,即使是少量的对抗性段落也可以成功地攻击最先进的密集检索器,并推广到来自看不见的域的查询。这些发现对未来在实际应用中部署稳健检索系统具有重要意义。
局限:
尽管有效,但我们的方法在计算上可能很昂贵。对于每组查询,我们需要在单个 GPU 上独立运行攻击,以生成一个对抗性段落。对于未来的工作,值得考虑探索更有效的方法来生成多个对抗性段落,这可能有助于减轻我们方法的计算成本。
我们的研究侧重于语料库中毒攻击,以研究是否可以安全地部署密集检索模型。我们承认,存在其他针对密集检索模型的潜在攻击途径,例如恶意操纵用户查询。我们的调查主要集中在语料库中毒攻击及其对密集检索模型脆弱性的影响。