第4章:文本对抗攻击
探索字符级、词级和句级三种文本对抗攻击方法
在前面的章节中,我们学习了针对图像分类模型的对抗攻击技术。然而,当攻击目标从图像转向文本时,情况变得更加复杂。文本是由离散的字符和词语组成的,无法像图像那样进行连续的微小调整。本章将探讨文本对抗攻击的独特挑战。
章节目标
学完本章后,你将能够:
- 理解文本与图像攻击的本质区别:解释为什么文本攻击更具挑战性
- 掌握字符级攻击的常见手法:如字符替换、插入和删除
- 理解词级攻击的核心思想:包括重要词识别和同义词替换策略
- 了解句级攻击的基本方法:如回译技术和句式变换
- 分析不同攻击层次的优缺点:判断其适用场景
1. 文本对抗攻击的独特挑战
1.1 从连续到离散:文本与图像的本质差异
像素是连续的
每个像素的值是一个连续的数值(0 到 255 或 0 到 1):
- 可以进行任意微小的调整
- 比如将某个像素从 0.5 改为 0.5001
- 人眼几乎无法察觉这种微小变化
类比:像调节音量旋钮,可以无级调节
文本是离散的
文本由离散的符号组成——字符、词语、句子:
- 无法将字母"a"改成"a 加一点点"
- 要么是"a",要么是"b",不存在中间状态
类比:像按电梯按钮,只能选择具体楼层,无法选择"3.5 楼"
核心挑战
**离散性(Discreteness)**是文本对抗攻击面临的核心挑战。
1.2 语义保持:攻击的隐蔽性约束
文本对抗攻击还面临另一个重要约束:语义保持(Semantic Preservation)。
| 句子 | 说明 |
|---|---|
| 原句:"这部电影非常精彩" | - |
| 修改后:"这部电影非常出色" | ✅ 可接受,语义几乎相同 |
| 修改后:"这部电影非常糟糕" | ❌ 不可接受,语义完全相反 |
双重目标
文本对抗攻击必须在两个目标之间取得平衡:
- 让模型产生错误判断
- 保持文本的原始语义,让人类读者仍能理解原意
1.3 三种攻击层次概览
| 攻击层次 | 修改对象 | 典型方法 | 特点 |
|---|---|---|---|
| 字符级 | 单个字符 | 替换、插入、删除、交换 | 简单直接,但容易被检测 |
| 词级 | 单个词语 | 同义词替换、词语插入 | 语义保持较好,效果稳定 |
| 句级 | 整个句子 | 回译、句式变换 | 修改幅度大,语义可能偏移 |
2. 字符级攻击:最直接的扰动方式
2.1 字符级攻击的基本思想
字符级攻击是最直观的文本对抗方法。核心思想是:通过对文本中的个别字符进行微小修改,使模型产生错误判断,同时人类读者仍能理解原文。
利用的现象
人类阅读时具有很强的容错能力。即使文本中存在一些拼写错误,我们通常仍然能够理解其含义。例如,看到"计算机科鸳",大多数人仍然能理解这是"计算机科学"。但对于机器学习模型,这种变化可能导致完全不同的理解。
2.2 常见的字符级攻击手法
Character Substitution
将文本中的某个字符替换为另一个视觉上相似或发音相似的字符。
| 替换策略 | 示例 |
|---|---|
| 形近字替换 | "银行" → "银彳亍"(利用生僻字) |
| 同音字替换 | "账户" → "帐户" |
| 视觉相似替换 | 字母"o" → 数字"0",字母"l" → 数字"1" |
Character Insertion
在词语中插入额外的字符,打断模型对词语的识别。
- 在"恶意软件"中插入空格 → "恶 意 软 件"
- 在英文单词中插入不可见字符
- 插入零宽度字符(肉眼不可见)
Character Deletion
删除词语中的某个字符。
- "病毒" → "病" 或 "毒"
- "网络安全" → "网安全"
Character Swap
交换相邻字符的位置。
- "网络" → "络网"
- "security" → "secruity"
2.3 字符级攻击的局限性
| 局限 | 说明 |
|---|---|
| 容易被检测 | 许多系统会进行拼写检查或文本规范化 |
| 影响可读性 | 过多的字符修改会让人类读者也感到困惑 |
| 对某些模型效果有限 | 基于字符的模型本身就是在字符级别处理 |
3. 词级攻击:同义词替换的艺术
3.1 词级攻击的核心思想
词级攻击是目前研究最多、效果最稳定的文本对抗攻击方法。
核心思想
找到对模型判断影响最大的词,用意思相近的词替换它。
关键观察:在一段文本中,并非所有词语对模型的判断都同等重要:
- 关键词:存在或改变会显著影响模型输出
- 无关词:即使被替换也不会产生太大影响
例如,对于情感分类任务:
- "这部电影非常精彩,演员表演出色"
- "精彩"和"出色"(情感词)比"这部"、"电影"(中性词)更重要
3.2 重要词识别:找到攻击的突破口
Leave-One-Out
最直观的方法:依次删除句子中的每个词,观察模型输出的变化。
示例:句子"这家餐厅的服务态度很差"
| 删除的词 | 置信度变化 |
|---|---|
| "这家" | 2% |
| "餐厅" | 5% |
| "服务态度" | 15% |
| "很差" | 40% |
结论:"很差"是最重要的词,应该优先考虑替换。
Gradient-based
如果能够访问模型内部结构(白盒场景):
- 计算每个词的词向量对输出的梯度
- 梯度越大,该词对输出的影响越大
优点:比删除法更高效
缺点:需要模型的内部访问权限
3.3 同义词替换:保持语义的关键
找到重要词后,下一步是用同义词替换它。
同义词来源:
- 同义词词典(如中文的《同义词词林》)
- 词向量空间中的近邻词(如 Word2Vec 中距离最近的词)
- 预训练语言模型生成的候选词
替换词筛选标准:
- 语义相似度:替换词与原词的语义距离不能太远
- 语法正确性:替换后的句子必须语法通顺
- 攻击效果:替换后能够改变模型的判断
3.4 词级攻击的实际案例
案例:垃圾邮件过滤器绕过(2018)
背景:许多垃圾邮件过滤器依赖于关键词检测。如果邮件中包含"免费"、"中奖"、"优惠"等词语,就会被标记为垃圾邮件。
攻击过程:攻击者使用词级对抗攻击技术,将敏感词替换为同义词:
- "免费领取" → "无偿获得"
- "中奖通知" → "获奖提醒"
- "限时优惠" → "限期特价"
结果:经过这种处理的垃圾邮件成功绕过了多个主流邮件服务商的过滤系统。
启示:基于关键词的文本分类系统非常脆弱,需要采用更加鲁棒的语义理解方法。
4. 句级攻击:整体改写的策略
4.1 句级攻击的基本思想
句级攻击不再局限于修改个别字符或词语,而是对整个句子进行改写。
目标:在保持句子核心语义的前提下,生成一个表述方式完全不同的新句子。
优势:由于整个句子都被改写,模型很难通过简单的规则来检测和防御。
挑战:如何确保改写后的句子仍然表达原来的意思?
4.2 回译攻击:借助机器翻译的力量
翻译成另一种语言:例如将英语翻译成中文
再翻译回原语言:将中文翻译回英语
获得改写后的句子:由于机器翻译不完美,回译后的句子通常会与原句有所不同,但核心语义基本保持不变
示例:
- 原句:"The movie was absolutely fantastic"
- 英语 → 中文 → 英语
- 回译后:"This film was really wonderful"
回译特点
- 优点:操作简单,只需调用现成的机器翻译 API
- 缺点:翻译质量不稳定,有时会产生语义偏移或语法错误
4.3 句式变换:主动改写句子结构
主动语态与被动语态转换
- 原句:"研究人员发现了这个漏洞"
- 改写:"这个漏洞被研究人员发现了"
肯定句与双重否定句转换
- 原句:"这个方法很有效"
- 改写:"这个方法并非没有效果"
简单句与复合句转换
- 原句:"他很聪明。他很勤奋。"
- 改写:"他不仅聪明,而且勤奋。"
4.4 句级攻击的挑战与局限
| 挑战 | 说明 |
|---|---|
| 语义漂移 | 改写幅度较大,很难保证改写后的句子与原句表达完全相同的意思 |
| 计算成本高 | 无论是回译还是句式变换,都需要调用额外的模型或工具 |
| 适用场景受限 | 对于包含细微情感或复杂逻辑的句子,句级改写容易导致语义偏移 |
5. 三种攻击层次的对比
| 维度 | 字符级 | 词级 | 句级 |
|---|---|---|---|
| 修改粒度 | 最小 | 中等 | 最大 |
| 语义保持 | 较好 | 好 | 一般 |
| 可检测性 | 容易被检测 | 较难检测 | 最难检测 |
| 实现难度 | 简单 | 中等 | 复杂 |
| 攻击效果 | 一般 | 稳定 | 不确定 |
| 适用场景 | 简单过滤器绕过 | 情感分类、意图识别 | 高度自动化的改写 |
实践建议
在实际应用中,攻击者往往会结合多种方法,根据具体情况选择最合适的策略。例如,先使用词级攻击找到关键词,再结合字符级攻击进一步混淆。
本章小结
文本攻击的独特挑战:离散性和语义保持约束使得文本攻击比图像攻击更加困难
字符级攻击:通过替换、插入、删除或交换字符来扰动文本,实现简单但容易被检测
词级攻击:通过识别重要词并用同义词替换,是目前最主流的文本对抗攻击方法
句级攻击:通过回译或句式变换对整个句子进行改写,修改幅度大但语义保持困难
方法选择:每种攻击方法都有其适用场景和局限性,实际应用中往往需要结合使用
术语对照表
| 中文术语 | 英文术语 | 简要解释 |
|---|---|---|
| 离散性 | Discreteness | 文本由不可连续变化的符号组成的特性 |
| 语义保持 | Semantic Preservation | 修改文本时保持原始含义不变的约束 |
| 字符替换 | Character Substitution | 将文本中的字符替换为其他字符 |
| 同义词替换 | Synonym Substitution | 用意思相近的词替换原词 |
| 回译 | Back-Translation | 将文本翻译成另一种语言后再翻译回来 |
| 语义漂移 | Semantic Drift | 文本改写过程中语义发生偏移的现象 |
| 重要词 | Important Word | 对模型判断影响较大的词语 |