EmoRAG 研究揭示 RAG 检索对表情符号扰动的脆弱性
EmoRAG: Evaluating RAG Robustness to Symbolic Perturbations
EmoRAG向查询和库文本注入同一表情;Table 1中NQ、SPECTER的扰动查询ASR为100.00%。
攻击者不接触检索器R与生成器G的内部参数,也不能干预二者训练;只能经接口提交查询q,并向知识库D注入恶意文本,注入量少于D的0.01‰。
- 作者要弄清RAG检索是否只取决于语义相关性。作者称注入表情后,检索会优先返回带同一表情但语义无关的文本,并担心对手以此操纵问答或代码评估。
- 做法称为EmoRAG:查询和少量库文本放入同一表情,不改检索器与生成器参数。默认在开头和结尾各注入四次,N=5,k=5。作者用稀有token、开头插入造成的位置后移和高维嵌入解释,并试验稀释、释义和检测。
- Table 1–2的扰动ASR为99.91%–100.00%,干净F1为0.00。高级RAG在Table 5(k=10)的ASR为75.51%–91.28%。NQ释义防御后ASR为0.00%(Table 9)。
- 作者在附录E写明:未深入分析emoji与乱码,也缺少表情如何改变检索表示的理论框架。附录B.2、B.3写释义耗资源,检测只覆盖表情这一类字符。论文未报告部分主表的检索器、ASR分母和重复次数。
- 威胁模型
- 攻击者不接触检索器R与生成器G的内部参数,也不能干预二者训练;只能经接口提交查询q,并向知识库D注入恶意文本,注入量少于D的0.01‰。场景一是含表情的良性查询触发库内文本,场景二是攻击者直接提交含表情查询。基线对比处称该设定为black-box。
- 被测模型
- SPECTERContrieverQwen2-7BE5-Mistral-7BSFR-Embedding-2RBGE-EN-ICLCodeBERTGPT-4oLLaMA-3-8BQwen2.5-1.5Bbert-base-uncased
- 基准
- Natural QuestionsMS-MARCOGithub-code-cleanBEIR
- 指标
- ASRF1-ScorePrecisionRecallnDCG@10
论文提出 EmoRAG,指出检索增强生成(RAG)系统对细微符号扰动高度敏感:在查询中注入单个表情符号 token(如 (@_@)),几乎 100% 会检索到含相同表情符号但语义无关的文本。研究覆盖通用问答与代码领域,使用多种 SOTA 检索器与生成器,得到三点发现:单个表情符号注入即可主导 RAG 输出;表情符号置于查询开头时扰动最严重,各数据集 F1 超过 0.92;参数量更大的模型反而更易受干扰。作者分析了背后机制,提出对抗者利用该漏洞操纵 RAG 的威胁场景,评估现有标准防御并认为其不足以应对 EmoRAG,进而提出针对性防御并分析其优劣,最后给出构建鲁棒 RAG 系统的未来方向。该论文已被 KDD 2026 接收。
深度解读
这篇论文试图解决什么问题?
要回答的是:RAG检索是否会被表情符号带离语义相关性。
检索是否真由语义相关性决定,还是会被表情这类符号扰动主导。
- 场景:作者认为RAG已用于通用问答和代码任务,检索质量通常被假定取决于查询与库文本的语义相关性。若该假定不成立,生成器会拿到对方准备的上下文。
- 现有攻击:作者称既有RAG攻击要为每个目标查询设计可检索文本,且恶意文本仍可能被非目标的正常查询命中,从而影响正常功能。
- 观察:作者称语义相关性与检索结果可以脱钩。Figure 1示意:查询中的表情会使检索改去返回带同一表情、语义无关的文本。
- 做法:作者提出EmoRAG,在问答与代码数据上改变表情数量、位置和类型,分析机理,并比较标准防御与针对性防御。贡献列表中,作者称这是跨越三个数据集、多种检索器、高级RAG和多种LLM的首次实证研究。
- 威胁模型:
- 目标:操纵RAG输出。一是等待含表情的良性查询触发库内文本;二是攻击者直接提交含表情查询。作者讨论问答、代码评估和评论打分。
- 知识:不接触检索器R与生成器G的参数。附录D.3称基线对比用的是black-box设定。
- 能力:不能改R或G的训练;可提交查询q,并向知识库D注入文本,注入量少于D的0.01‰。
- 系统:知识库、检索器与生成器组成的RAG。攻击不更新这两个模型的参数。
有哪些相关研究?
相关工作主要是RAG应用与检索库投毒;作者把EmoRAG说成免训练的符号扰动。
RAG的组成与应用
- 系统结构:§2.1将RAG写成知识库、检索器与生成器。检索阶段按相关性取回文档,生成阶段由预训练语言模型结合查询与文档作答。文中提到dense passage retrieval,用来在共享向量空间对齐查询与文档。
- 落地系统:通用域举例WikiChat、Shopify的Sidekick、Amazon推荐和RedNote;代码域举例Vertex AI Codey、Qodo、Codeforces、LeetCode、GitHub Copilot和Cursor。
已有攻击
- 训练期投毒与后门:论文合并讨论Biggio等(2012)、Fang等(2020)、Jia等BadEncoder(2022)、Liu等Trojaning(2018)和Shafahi等Poison Frogs(2018)。作者称这些攻击要直接操纵训练,延伸到RAG时常常不可行。
- 检索库投毒:Zhong等(2023)注入可检索的无意义段落;Zou等PoisonedRAG(2024)注入语义上误导的信息;Zhang等HijackRAG(2024)把恶意文本的构造写成优化问题。作者称这些工作要针对目标查询设计文本,并点名PoisonedRAG:其文本仍可能被非目标的正常查询检索到。
基线与数据
- 基线方法:附录D.3改写Prompt Injection(Greshake等,2023;Liu等,2023)、Corpus Poisoning(Zhong等,2023;Zou等,2024)和论文所称的GCG Attack(文献[70])。Corpus Poisoning在文中的black-box设定下把恶意文本分成目标查询与恶意内容。Table 6的检索器是SPECTER。
- 基准:主实验为Natural Questions、MS-MARCO和Github-code-clean。§4.1另用BEIR的Covid、NFCorpus、DBPedia、Touche,指标为nDCG@10。
作者把EmoRAG与上述检索投毒分开:免训练,只注入少量表情。作者称单个表情即可使F1-Score超过0.9(Figure 4),且表情不出现时不改变正常检索。
论文如何解决这个问题?
查询与少量库文本放入同一表情;作者用稀有token和位置后移解释检索偏移。
作者把该现象称为EmoRAG:查询和少量库文本放入同一表情后,检索返回带该表情的文档,生成器再依据这些文档作答。不更新检索器或生成器的参数。
检索与生成
- 给定查询q,检索器R在知识库K中按相关性排序。论文把这一步写成D = R(q, 𝒦),生成写成r̂ = G(q, D),D作为附加文本。
- 攻击者不改R、G的参数,也不改二者的训练。扰动只加在查询和注入的库文本上。
- 附录A.5的默认值:同一表情在查询及其对应扰动文本的开头和结尾各注入四次;注入条数N=5;返回相似度最高的k=5条。生成器temperature均为0.0。作者引用他人结果称,保守分析下可恶意编辑6.5%的Wikipedia文档;本文注入量设为少于库内容的0.01‰。
文本与表情
- 作者称触发来自表情本身,扰动文本不必与原查询主题对齐,因此可以跨领域复用。每条扰动文本使用与对应查询相同的表情。附录A.4给出问答域示例,此处不复述原句。
- 可变因素包括表情个数、位置、类型,以及查询与库文本是否为同一表情;相似度计算比较点积和余弦。
- 选表情时计算embedding offset,即原查询嵌入与注入后嵌入的不相似度,偏移最大者视为破坏性最高。式(1)用总token数和独特token数打分。作者称这只是初步指标。
- 附录E以32名志愿者比较表情、emoji和乱码的Noticeability与Alertness。作者称表情在两维上都更自然,故作为主要符号。
成功如何判定
- 扰动查询的F1由Precision和Recall合成,看预注入文本有没有被检索到。ASR是扰动查询下回答被操纵的比例。
- 答案短于三词用子串匹配;长于三词用GPT-4o mini评审。附录D.1、D.2给出生成器与评审的完整提示词。作者再用人工判断核对这两种算法,结果在Table 8。
- 干净查询同样报告F1。作者把较低的F1解释为没有检索到扰动文本。
机理
- 稀有token:表情可能被切成子词,词表外时变成unk。作者称它们处于长尾,嵌入远离高频token,彼此却靠近,因此会不成比例地影响句向量。Figure 5对应MS-MARCO,Figure 7对应NQ。论文把干净查询画成蓝圈、扰动查询画成红方块;作者称前者散布、后者收成密集簇。
- 位置后移:论文把最终表示写成token嵌入与位置嵌入之和。插在序列开头会使后面每个token的位置整体后移;插在末尾不改变前面token的相对位置。作者用这一点解释开头有效、末尾无效。
- 高维:作者称参数更多的检索模型嵌入维度更高,小变化有更多传播路径。§4.1在BEIR的四个数据集上用nDCG@10比较干净查询与扰动查询。正文没有写出Figure 10的数值。
防御
- 稀释:增大k,让返回结果中未扰动文本变多。附录B.1仍取N=5。
- 查询消毒:为每条查询生成五个释义,各自检索k条文本并作答,再聚合。§6写生成释义的模型是GPT-4o,附录B.2写作GPT-4。作者称释义会去掉表情。
- 检测:先用tiktoken的c1100k_base计算perplexity。再构建数据集,训练bert-base-uncased。作者另外建议S1用特殊token做预训练、S2扩大词表、S3加入字符与子词嵌入。
论文做了哪些实验?
Table 1–2中扰动查询ASR为99.91%–100.00%,干净查询F1为0.00。
实验设置
- 检索器:Contriever与SPECTER为110M,Qwen2-7B为7.6B,E5-Mistral-7B、SFR-Embedding-2R、BGE-EN-ICL为7.2B,CodeBERT为124M(附录A.2)。Table 1表头写作e5-7B-mistral、SFR-Embedding、BGE-en-icl。
- 生成器:GPT-4o、LLaMA-3-8B、Qwen2.5-1.5B,temperature为0.0。§3.3.1将中间一者写作LLAMA-3.1-8B,Table 3写作LLaMA3,Table 8写作LLaMA3-8B。论文未解释这些写法。长答案评审为GPT-4o mini。
- 数据:NQ为2,681,468条文本、6,289条查询;MS-MARCO为8,841,823条文本、9,129条查询;CODE(Github-code-clean子集)为3,343,303条文本、7,450条查询(Table 7)。论文未写明Table 1的ASR分母是否等于全部查询。
- 默认扰动:表情在查询与扰动文本的开头和结尾各四次;N=5;k=5(附录A.5)。这不是单表情设置。
- 指标:扰动查询看ASR、Precision、Recall、F1;干净查询看F1。短答案用子串匹配,长答案用GPT-4o mini。BEIR四数据集用nDCG@10。
- 未写明项:Table 1、Table 2、Table 6的生成器,以及Table 3、Table 5、Table 9的检索器,论文都未说明。论文未报告重复次数。
主结果
下表是Table 1的NQ块。论文未说明生成器。
| 检索器 | 扰动ASR | 扰动F1 | 干净F1 | | SPECTER | 100.00% | 0.96 | 0.00 | | Contriever | 100.00% | 0.97 | 0.00 | | Qwen2-7B | 100.00% | 1.00 | 0.00 | | e5-7B-mistral | 100.00% | 1.00 | 0.00 | | SFR-Embedding | 99.98% | 1.00 | 0.00 | | BGE-en-icl | 100.00% | 1.00 | 0.00 |
- Table 1其余两块:MS-MARCO扰动ASR为99.97%–100.00%、F1为0.97–1.00;CODE扰动ASR为99.91%–99.98%、F1为0.96–1.00。两块干净F1均为0.00。CodeBERT在CODE上扰动F1为0.96、ASR为99.96%,干净F1为0.00(Table 2)。
- 作者称参数量超过7B的模型在所有数据集上F1为1.0,且更大模型更容易被扰动。Table 1中四个7B级检索器的扰动F1均为1.00;110M的SPECTER与Contriever为0.96–0.99,但扰动ASR仍在99.91%–100.00%。
- 作者称干净查询下没有扰动文本被检索到,系统仍按预期工作。Table 1与Table 2的干净F1均为0.00。
生成器、高级RAG与基线
- 生成器(Table 3,检索器未说明):NQ上GPT-4o、LLaMA3、Qwen2.5的ASR为100.00%、94.85%、95.04%;MS-MARCO为99.97%、98.57%、99.98%;CODE为99.93%、94.36%、96.96%。正文写几乎所有情形超过95%;表中LLaMA3的NQ与CODE低于95%。
- 高级RAG(Table 5,N=5,k=10,检索器未说明):NQ上Robust-RAG的F1/ASR为0.97/75.51%,Self-RAG为0.97/76.77%;MS-MARCO为0.98/79.79%与0.98/85.86%;CODE为0.99/83.16%与0.99/91.28%。作者称高级框架仍然会被EmoRAG影响。Robust-RAG只用了关键词聚合。
- 基线(Table 6,SPECTER):三数据集上Corpus Poisoning的ASR为96.39%–97.11%,Prompt Injection为71.21%–75.39%,GCG为1.13%–3.01%,EmoRAG为99.91%–100.00%。作者称EmoRAG高于这些基线。同为NQ、SPECTER时,Table 1的EmoRAG F1是0.96,Table 6是0.97。
表情因素与不能触发的情形
- Figure 4(Contriever):单个表情放在查询开头时,各数据集F1超过0.92;增至两个时,作者称几乎所有数据集F1为1.00。摘要称单个表情使检索到无关文本的可能性接近100%;该句的口径不是Figure 4的F1。
- Figure 6(Contriever):开头可以形成干扰,开头加结尾略好,随机位置较弱,只放末尾无效。正文未给出该图各点F1。
- 作者称约83%的表情类型F1接近1.0,17%较低;结构更复杂者通常更高(Figure 2,共96个表情)。21组交叉实验里,只有同一表情的F1为1.0,不同表情时F1基本为0.0(Figure 9)。
- 六种emoji在开头和结尾各注入四次,库中五条恶意文本。作者称emoji远不如表情有效(Figure 8);正文未给出数值。
防御与表示
- Table 9:释义后NQ的F1/ASR从0.96/100.00%变为0.00/0.00%,MS-MARCO从0.97/99.97%变为0.00/0.00%。检索器未说明,表中无CODE。作者称有效,但耗资源。
- 作者称增大k的稀释未能把ASR降下来(附录B.1、Figure 13);正文未给出图中数值。Figure 12的perplexity在TPR高时FPR也高,作者称不足以分类;正文未给出FPR。
- bert-base-uncased的识别准确率为99.22%(附录B.3);摘要写99%。作者称Figure 10中表情会破坏语义对齐;该图与Figure 5、Figure 7的PCA都没有正文数值。
其他消融与分析
- Table 4点积/余弦:NQ的F1为0.98/0.97、ASR为99.97%/100.00%;MS-MARCO为1.00/0.98、100.00%/99.98%;CODE的F1均为0.99、ASR均为99.96%。检索器未说明。正文把该实验称作Table 5,表题是Table 4。
- Figure 3(NQ):k≤N(默认N=5)时ASR保持高位,k>N后Recall接近1;N≤k(默认k=5)时ASR随N上升,N>k后F1先升后降。正文未给出各点数值。
- Table 8(NQ、MS-MARCO):子串匹配、GPT-4o与人工评估算出的ASR在0.99到1.0之间。论文未说明查询条数。这些数字与Table 3不是同一组结果,论文未解释差别。
- 用户研究(附录E):32人、30条。表情两维分数低于1.75;emoji的Noticeability为4.66;乱码两维均高于4.4;每人每条平均13.7秒。
- 检测数据:摘要写来自NQ。附录B.3既写由NQ与MS-MARCO构造1,542,788条、表情池约1,500个,又写从NQ各取约760,000条扰动与干净样本;测试集约7,000条。训练为bert-base-uncased、学习率1e-5、AdamW、batch 64、3个epoch。
有什么可以进一步探索的点?
作者指出缺少表情影响表示的理论框架,并计划补上emoji与乱码分析。
作者指出的局限与后续方向
- 附录E:实验主要围绕表情,没有深入分析emoji或乱码;作者计划以后做。
- 附录E:仍没有解释表情如何改变检索器中文本表示的理论框架;作者计划后续研究。
- 附录E的Future Work:过滤对抗字符的查询消毒、嵌入正则、识别扰动文本的异常检测,以及S1特殊token预训练、S2扩大词表、S3字符与子词嵌入。
- 附录B.2:释义可以去掉表情,但耗时、耗资源,需要更高效的查询消毒。
- 附录B.3:当前检测只针对表情这一类特殊字符,为每类单独训练成本高,需要能覆盖更多扰动模式的方法。
- 结论节没有逐条列出局限。作者在该节称要推进表示学习,并提高系统处理复杂、不可预测输入时的安全性。
实验覆盖范围
- 检索器为附录A.2的七个,生成器槽位为GPT-4o、LLaMA-3-8B、Qwen2.5-1.5B;数据为NQ、MS-MARCO、CODE(Table 1–3、Table 7)。同一生成器在§3.3.1、附录A.2和Table 3中的写法不一致。
- 高级框架实验包含Robust-RAG的关键词聚合和Self-RAG,设定为N=5、k=10(§3.4、Table 5)。
- 对照攻击为Corpus Poisoning、Prompt Injection、GCG Attack,检索器为SPECTER(附录D.3、Table 6)。
- 防御实验包含稀释、五次释义、perplexity和bert-base-uncased;另有六种emoji对比(Figure 8)和BEIR上的nDCG@10(Figure 10)。
- 论文未报告Table 1的ASR分母,Table 1、Table 2、Table 6的生成器,Table 3、Table 5、Table 9的检索器,人工评估条数,重复次数,以及Figure 8、Figure 10、Figure 12、Figure 13的具体数值。
总结一下论文的主要内容
EmoRAG用表情联动查询与库文本;NQ上SPECTER扰动ASR为100.00%。
EmoRAG测量RAG对符号扰动的反应:同一表情同时出现在查询和库文本里时,检索会偏离语义匹配。
作者要检查的是,检索是否真由语义相关性决定。实现上不改检索器与生成器参数,只向查询和少于库内容0.01‰的文本注入同一表情。默认是开头与结尾各四次,N=5,k=5。
Table 1里,NQ上SPECTER的扰动查询ASR为100.00%、F1为0.96,该表六个检索器的干净查询F1都是0.00。Table 1里MS-MARCO与CODE的扰动ASR落在99.91%–100.00%。Contriever上,单个表情放在查询开头时各数据集F1超过0.92(Figure 4)。摘要把单表情的检索后果写成接近100%,与Figure 4的F1口径不同。
Table 3的九个ASR里最低的是CODE上LLaMA3的94.36%;论文未说明该表检索器。Table 5里NQ上Robust-RAG的ASR为75.51%、F1为0.97。Table 9里释义防御后NQ的ASR为0.00%。附录B.3里bert-base-uncased的识别准确率为99.22%。
作者的结论是语义相关性与检索成功可以脱钩,并用稀有token、开头插入带来的位置后移和高维嵌入来解释。作者认为perplexity一类做法不足以分类,释义和专用检测可以对付表情;摘要称已开源防御相关组件,附录B.3则写计划发布模型与数据集。