尽管计算机视觉中的对抗样本已得到充分研究,但处理文本数据带来了独特的难题,需要不同的方法。与图像中连续的像素值不同,文本由字符或词语(标记)等离散单元构成。这种离散性质意味着我们不能像使用FGSM或PGD等方法处理图像那样,简单地添加小的、通过梯度计算得到的扰动。词嵌入向量的微小改动不一定对应另一个有效的词语。因此,生成对抗性文本涉及修改离散的标记序列,目标是实现两个主要目的:引发错误分类: 使目标NLP模型(例如情感分析器、文本分类器、翻译模型)产生不正确的输出。保持可用性/合理性: 确保修改后的文本在语法上正确,与原文语义相似(以欺骗人类或下游任务),并保持流畅。同时实现这两个目的很困难。激进的修改可能很容易欺骗模型,但对人类读者来说会变得毫无意义。细微的改动可能保留意义,但未能改变模型的预测。文本攻击策略对NLP模型的对抗性攻击通常在字符、词语或句子层面进行操作。字符级扰动这些攻击涉及对词语中的字符进行微小改动。常用方法包括:插入: 添加字符(例如,“great” -> “greaat”)。删除: 移除字符(例如,“positive” -> “postive”)。替换: 交换字符,通常是相邻字符(例如,“review” -> “reveiw”)或视觉上相似的字符(例如,将 'l' 替换为 '1',或将 'o' 替换为 '0')。Unicode同形字: 使用来自不同Unicode块的视觉上相同的字符。字符级攻击可以不明显,但可能很容易被拼写检查器或简单的预处理步骤检测到。它们有时会扰乱分词过程,可能对下游模型的性能产生显著影响。词语级扰动这些是目前最常见且通常更有效的方法。它们涉及替换、插入或删除整个词语。同义词替换: 这是一种广泛使用的方法。原文中的词语被替换为同义词。核心挑战在于选择满足以下条件的同义词:在上下文中语义恰当。充分保留原文意义。能有效改变模型的预测。寻找合适的候选词通常涉及WordNet等资源,或借助词嵌入(例如Word2Vec、GloVe、BERT嵌入)来寻找嵌入空间中相近的词语。然而,嵌入空间中的接近度并不总是保证上下文的恰当性或语义等价性。词语插入/删除: 添加中性词语(例如“the”、“a”、“is”)或删除看似不重要的词语有时足以改变模型的预测,特别是当模型严重依赖于特定关键词或序列模式时。词语重排: 改变词语的顺序,尽管这通常会对语法和意义产生显著影响。典型的词语级攻击流程包括:识别重要词语: 确定输入文本中哪些词语对模型的预测影响最大。这有时可以使用基于梯度的显著性方法(计算相对于词嵌入的梯度)或基于遮挡的方法(测量移除词语时预测的变化)进行近似。生成候选替换词: 对于已识别的重要词语,寻找潜在的替代品(例如,同义词、嵌入空间中的邻近词语)。选择最佳候选词: 选择能最大化错误分类几率的替换词,同时最小化语义偏差并保持语法正确性。这通常涉及一种搜索策略。句子级扰动这些攻击在句子层面修改结构或内容。释义: 生成表达相同意义但使用不同措辞和结构的替代句子或短语。这可以通过基于规则的系统、回译(翻译成另一种语言再译回)或训练用于释义的生成模型来完成。这些攻击通常非常有效且隐蔽,但生成计算成本较高。句子插入/删除: 添加或移除整个句子,可能显著改变上下文。搜索与优化由于文本修改的搜索空间非常大且离散,寻找最佳扰动通常需要启发式搜索算法。贪心搜索: 迭代地进行单一最佳修改(例如,最能增加目标错误类概率的同义词替换),直到攻击成功或达到限制。束搜索: 在每一步维护多个有前景的修改序列(束),比贪心搜索更全面地探索搜索空间。搜索过程中的目标函数通常会平衡模型对目标(错误)类别的预测分数与语义相似性、语法正确性以及修改数量相关的约束。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="Arial", fontsize=10, margin=0.1]; edge [fontname="Arial", fontsize=9]; subgraph cluster_original { label = "原始句子"; style=filled; color="#e9ecef"; orig [label="这部电影太棒了!"]; sentiment_orig [label="情感:积极", shape=ellipse, style=filled, color="#b2f2bb"]; orig -> sentiment_orig [label=" 模型预测"]; } subgraph cluster_attack { label = "对抗性攻击(同义词替换)"; style=filled; color="#e9ecef"; attack_step1 [label="识别'fantastic'为重要词"]; attack_step2 [label="寻找同义词:\n 'amazing', 'superb', 'terrible'"]; attack_step3 [label="测试'terrible'"]; } subgraph cluster_adversarial { label = "对抗性句子"; style=filled; color="#e9ecef"; adv [label="这部电影太糟糕了!"]; sentiment_adv [label="情感:消极", shape=ellipse, style=filled, color="#ffc9c9"]; adv -> sentiment_adv [label=" 模型预测"]; } orig -> attack_step1 [style=dashed]; attack_step1 -> attack_step2; attack_step2 -> attack_step3; attack_step3 -> adv [style=dashed]; }这是一个使用同义词替换进行词语级攻击的简化例子,旨在翻转句子的预测情感。攻击者识别出一个有影响力的词语(“fantastic”),寻找同义词(包括一个情感相反的词语,“terrible”),并替换它以创建对抗样本。约束与评估与通过 $L_p$ 范数衡量的图像扰动不同,评估文本扰动需要不同的度量标准:扰动大小: 修改字符/词语的数量或百分比。语义相似性: 使用嵌入余弦相似度(例如,通用句子编码器)或人工评估来衡量。语法正确性: 使用自动化工具或人工判断来评估。攻击成功率: 成功引发错误分类的样本百分比。TextAttack等框架提供了各种基于文本的对抗性攻击实现和评估工具,促进了该方向的研究和基准测试。由于语言的离散、结构化和语义性质,生成有效且不易察觉的对抗性文本仍然是一个重要的难题。