出版时间及期刊、会议:2020

论文概述:TextAttack 是一个用于自然语言处理(NLP)的对抗性攻击、数据增强和对抗性训练的Python框架。它通过四个组件构建攻击:目标函数(goal function)、约束集合(constraints)、转换(transformation)和搜索方法(search method)。这种模块化设计使得研究人员能够轻松地从现有组件组合中构建攻击,并将其应用于标准化的模型和数据集进行基准测试和比较。TextAttack 提供了16种对抗性攻击的实现,并支持多种模型和数据集,包括 BERT 和其他 Transformer 模型,以及所有 GLUE 任务。此外,TextAttack 还包括数据增强和对抗性训练模块,用于提高模型的准确性和鲁棒性。

作者:Morris J X, Lifland E, Yoo J Y, et al. Textattack: A framework for adversarial attacks, data augmentation, and adversarial training in nlp[J]. arXiv preprint arXiv:2005.05909, 2020.

数据集和模型开源代码:https://github.com/QData/TextAttack

论文链接:https://arxiv.org/pdf/2005.05909

摘要

尽管已有大量研究利用对抗性攻击(这种攻击方法旨在通过在输入数据中故意添加细微的、难以察觉的扰动,来欺骗模型做出错误的预测或分类。)来分析自然语言处理模型,但每种攻击都实现于独立的代码库中。开发自然语言处理攻击并利用它们提升模型性能仍具挑战性。本文介绍TextAttack——一个用于自然语言处理领域对抗性攻击、数据增强和对抗训练的Python框架。TextAttack通过四个组件构建攻击:目标函数、约束条件集、转换方法和搜索方法。该框架的模块化设计使研究者能轻松组合新颖或现有组件来构建攻击方案。TextAttack实现了文献记载的16种对抗攻击,支持包括BERT等Transformer模型在内的多种模型和数据集,涵盖所有GLUE基准任务。该框架还包含数据增强和对抗训练模块,可利用对抗攻击组件提升模型准确性与鲁棒性。TextAttack正在实现自然语言处理的民主化:仅需几行代码,任何人都能在任意模型或数据集上尝试数据增强与对抗训练。代码与教程详见https://github.com/QData/TextAttack。

1 引言

近年来,研究者对自然语言处理模型对抗鲁棒性的探究兴趣日益增长,这既包括生成对抗样本的新方法,也涉及防御此类对抗的更优策略(Alzantot等人,2018;Jin等人,2019;Kuleshov等人,2018;Li等人,2019;Gao等人,2018;Wang等人,2019;Ebrahimi等人,2017;Zang等人,2020;Pruthi等人,2019)。由于这些攻击方法常在不同数据样本和受害模型上进行评估,很难直接公平地比较它们。由于源代码缺失,将前人工作复现为基线往往耗时且易错,而论文中遗漏的细节更使得精确复现结果变得复杂。这些障碍导致基准比较难以取信,严重阻碍了该领域的发展。 

图1:使用Jin等人(2019)提出的TextFooler针对基于BERT的情感分类器生成的对抗样本。将"perfect"替换为同义词"spotless"完全改变了模型的预测结果,尽管文本的深层含义并未发生改变。

为推动对抗鲁棒性领域的研究,我们推出TextAttack——一个支持自然语言处理中对抗攻击、数据增强和对抗训练的Python框架。

为统一各类对抗攻击方法,我们将自然语言处理攻击分解为四个组件:目标函数、约束条件集、文本转换方法和搜索策略。攻击通过扰动输入文本来实现:既要使模型输出满足目标函数(即判定攻击是否成功),又要保证扰动符合预设约束(如语法约束、语义相似性约束)。搜索策略则用于寻找能生成成功对抗样本的转换序列。

这种模块化设计让我们能轻松整合文献中的攻击方法,同时复用不同攻击间的共享组件。TextAttack清晰可读地实现了文献中的16种对抗攻击方法。这些攻击首次得以在标准化环境中进行基准测试、横向对比和系统分析。

TextAttack的设计还允许研究人员通过组合新颖和现有组件,轻松构建新的攻击方式。仅需几行代码,就能修改Jin等人(2019)在TextFooler中使用的搜索方法、转换和约束条件,转而攻击翻译模型以实现改变输出中每个单词的目标。

TextAttack与HuggingFace的transformers和nlp库直接集成,使用户能够测试针对模型和数据集的攻击。该工具提供了数十种在流行数据集上预训练的模型(包括长短期记忆网络、卷积神经网络和各种基于Transformer的模型),目前支持摘要生成、机器翻译以及GLUE基准测试中的所有九项任务。用户还可以导入自定义模型和数据集。

研究对抗攻击的终极目标是提升模型性能和鲁棒性。为此,TextAttack提供了易用的数据增强和对抗训练工具。其Augmenter类通过转换和约束条件生成数据增强所需的新样本,而攻击方案可在训练循环中重复使用,使模型能够基于对抗样本进行训练。这些工具能更便捷地训练出精确且稳健的模型。

TextAttack的主要应用场景包括: (所有功能均可通过<5行代码实现,详见附录A.1 )

• 在标准化模型和数据集上对既有NLP攻击方法进行基准测试与比较

• 通过复用丰富可用模块快速开发NLP攻击方法

• 对提出的攻击方案和数据增强方法进行组件消融研究

• 在增强数据集上训练模型(包括卷积神经网络、长短期记忆网络、BERT、RoBERTa等)

• 采用文献中的攻击方法进行对抗训练以提升模型鲁棒性

2 TextAttack框架

图2:TextAttack的主要功能特性

TextAttack旨在实现这样的攻击:给定一个自然语言处理模型,找到满足攻击目标且符合特定语言约束的输入序列扰动。通过这种方式,攻击自然语言处理模型可以被构建为一个组合搜索问题。攻击者必须在所有可能的转换中搜索,找到能生成成功对抗样本的转换序列。 

每次攻击可由四个组件构成:

1. 任务特定的目标函数 - 根据模型输出判断攻击是否成功。(输出错误则模型成功) 

示例:无目标分类、定向分类、非重叠输出、最小BLEU分数。

2. 约束条件集 - 判断扰动相对于原始输入是否有效。 (变化小)

示例:最大词嵌入距离、词性一致性、语法检查器、最小句子编码余弦相似度。

3. 转换方法 - 根据输入生成一组潜在扰动。

示例:词嵌入词替换、同义词词替换、同形异义字符替换。

4. 搜索方法 - 连续查询模型并从转换集中选择有希望的扰动。

示例:基于词重要性排序的贪婪算法、束搜索、遗传算法。

(关于TextAttack内置的每个目标函数、约束条件、转换方法和搜索方法的完整说明,请参阅附录A.2。)

3 使用TextAttack开发NLP攻击

图3:TextAttack网络界面运行TextBugger黑盒攻击的截图(李等人,2019年)

TextAttack可通过PyPI安装为Python包,也可直接从GitHub下载。该工具还提供网页演示界面(如图3所示)。Python用户可通过创建和操作Attack对象来测试攻击,命令行API提供textattack attack命令,允许用户从四个组件或单一攻击方案指定攻击方式,并在不同模型和数据集上进行测试。

TextAttack支持多种攻击结果输出格式:

• 标准输出打印

• 文本文件或CSV输出

• HTML表格形式呈现

• 可视化服务器(如Visdom或Weights & Biases)的数据表写入

3.1 使用攻击方案进行基准测试 

表1:按我们框架分类的TextAttack攻击配方:搜索方法、转换方式、目标函数、约束条件。所有攻击配方都包含一个额外约束条件,即禁止替换停用词。采用词重要性排序的贪婪搜索简称为Greedy-WIR。*表示多种转换方式的组合

TextAttack的模块化设计使我们能在统一框架中实现以往研究中的多种攻击方法,通常只需添加一两个新组件。如表1所示,16种攻击按目标函数、约束条件、转换方法和搜索策略进行分类。这些攻击均以"攻击方案"形式实现,仅需单条命令即可完成基准测试(A.3节展示了论文报告结果与TextAttack运行结果的对比)。

3.2 通过新旧组件组合创建新型攻击

如表1所示,NLP攻击常共享多个组件。新攻击往往复用既有组件,仅添加少量新元素。TextAttack让研究者能专注于新组件开发,而非重复已有成果。例如Jin等(2019)提出的TextFooler方法原本用于分类和蕴含模型攻击,若研究者想将其搜索策略、转换方法和约束条件应用于翻译模型,只需在TextAttack中实现翻译目标函数即可创建用于翻译模型分析的新型攻击方案。

3.3 在预训练模型上评估攻击

截至本文提交时,TextAttack提供82个预训练模型,包括词级LSTM、词级CNN、BERT及基于HuggingFace nlp数据集的其他Transformer模型。由于与nlp库集成,工具能自动加载对应预训练模型的测试/验证集。现有研究多聚焦分类和蕴含任务,而TextAttack的预训练模型支持对所有GLUE任务进行模型鲁棒性研究。

。

4 利用TextAttack提升 自然语言处理模型性能

4.1 自定义模型的鲁棒性评估

TextAttack具有模型无关性——这意味着它能够在任何深度学习框架实现的模型上运行攻击。模型对象必须能够接收字符串(或字符串列表)并返回可由目标函数处理的输出。例如,机器翻译模型接收字符串列表作为输入,并生成字符串列表作为输出;分类和蕴含模型则返回分数数组。只要用户模型符合此规范,即可与TextAttack兼容使用。

4.2 模型训练

TextAttack用户可通过 textattack train 命令,在nlp库的任何数据集上训练标准LSTM、CNN和基于Transformer的模型,或用户定制模型。与预训练模型类似,用户训练的模型可无缝适配 textattack attack 和 textattack eval 等命令。

4.3 数据增强

在搜索对抗样本时,TextAttack的转换组件会生成输入文本的扰动版本,并通过约束条件验证其有效性。这些工具可重复用于大幅扩展训练数据集——通过对现有样本生成扰动变体实现。 textattack augment 命令为用户提供多种预置数据增强方案,该功能为独立模块,可与任何模型或训练框架配合使用。当采用TextAttack的模型与训练流程时, textattack train --augment 会在训练开始前自动扩展数据集。用户可指定每个输入的修改比例及每个样本需生成的额外变体数量,从而便捷地在不同模型和数据集上应用现有增强方案,这也是评估新技术的理想基准方式。

图4:内置WordCNN模型在训练集规模递增的烂番茄数据集上的表现。当样本量极少时,EasyDataAugmenter数据增强方案(EDA,(魏和邹,2019))及嵌入技术效果最为显著。阴影区域代表N=5次运行的95%置信区间。

图4展示了我们使用TextAttack增强功能获得的实证结果:在小数据集上,TextAttack的增强功能使WordCNN模型的性能得到即时提升。

4.4 对抗训练

通过textattack train --attack命令,攻击方案可用于生成新的对抗样本训练集

对抗训练过程会先在干净训练集上进行多轮训练,随后攻击模块会为每个输入生成对抗样本版本。这个经过扰动的数据集将替代原始数据集,并根据模型当前弱点定期重新生成。最终得到的模型对训练所用攻击方法的鲁棒性可显著提升。表2展示了标准LSTM分类器在使用和不使用对抗训练时,针对TextAttack中不同攻击方案的准确率对比。

表2:基于SST2数据集3000个样本训练的默认长短期记忆网络模型。基线模型采用干净训练集的早停策略,对抗训练使用deepwordbug和textfooler攻击方法。评估集上报告了针对多种不同攻击类型的"受攻击时准确率"。

5 TextAttack底层架构

TextAttack在底层进行了深度优化,使得实现和运行对抗攻击变得简单高效。

AttackedText 模块 。自然语言处理攻击实现中常见的一个问题是:原始文本在分词后即被丢弃,导致后续变换操作只能在分词后的文本版本上进行。这会引发大小写处理和分词方面的诸多问题。例如,攻击可能将单词片段误替换为完整单词(如把 "aren't" 变形为 "aren'too")。

为解决这个问题,TextAttack 将每个输入存储为 AttackedText 对象,该对象不仅保留原始文本,还提供辅助方法,能在保持分词一致性的前提下进行文本变换。与处理字符串或张量不同,TextAttack中的类主要操作的是AttackedText对象。当单词被添加、替换或删除时,AttackedText能够保持正确的标点符号和大小写规范。该对象还集成了常见语言功能实现,例如将文本拆分为单词、分割成句子以及进行词性标注。

缓存机制。搜索方法在查找过程中经常会在不同节点遇到相同的输入。这种情况下,预存数值以避免不必要的计算是明智之举。TextAttack会对攻击过程中检测的每个输入缓存其模型输出结果,以及该输入是否通过所有约束条件。对于某些搜索方法而言,这种记忆化处理能节省大量时间。

6 相关工作

我们借鉴了Transformers库(Wolf等人,2019)作为设计精良的自然语言处理库的典范。TextAttack的部分模型和分词器正是基于Transformers实现。cleverhans(Papernot等人,2018)是专为计算机视觉模型生成对抗样本的库。与cleverhans类似,我们的目标是提供能跨多种模型和数据集生成对抗样本的方法。从某种意义上说,TextAttack致力于成为NLP领域的cleverhans解决方案。与cleverhans相同,TextAttack中的所有攻击都实现了基础Attack类。但不同于cleverhans将各类攻击分散在不同模块的实现方式,TextAttack通过共享组件库来构建攻击。

现有部分开源库涉及NLP领域的对抗样本研究。Trickster提出了基于图搜索的NLP模型攻击方法,但无法确保生成样本满足给定约束条件(Kulynych等人,2018)。TEAPOT是用于评估文本对抗扰动的库,但仅支持基于n元语法的比较方法来评估机器翻译模型的攻击效果(Michel等人,2019)。最新发布的AllenNLP Interpret包含对NLP模型进行对抗攻击的功能,但仅限可解释性研究用途,且仅支持通过输入缩减或基于贪心梯度的词语替换进行攻击(Wallace等人,2019)。TextAttack比上述所有库具有更广泛的适用范围:其设计可扩展至任何NLP攻击场景。

7 结论

我们提出了TextAttack——一个用于测试NLP模型鲁棒性的开源框架。该框架通过四个模块定义攻击行为:目标函数、约束条件列表、转换方法和搜索策略。这种架构使我们能够基于这些模块组合出各类攻击方案,并在统一环境中进行比较。这些攻击方案可复用于数据增强和对抗训练。随着新型攻击技术的开发,我们将持续将其组件整合至TextAttack。我们期望该框架能降低NLP领域鲁棒性研究和数据增强的入门门槛。

8 致谢

作者感谢所有为TextAttack项目做出贡献的成员,包括刘瀚宇、Kevin Ivey、张比尔、郑艾伦等。感谢IGA算法创造者(Wang等人,2019)为本框架贡献其算法实现。感谢HuggingFace团队开发如此易用的软件——没有他们的工作,TextAttack就不会有今日的成就。

A 附录

A.1 五行代码实现TextAttack

表3展示了通过bash或Python用五行或更少代码即可完成的任务示例。注意每个操作前都需先执行一行代码(pip install textattack)。

A.2 TextAttack组件架构

图5:TextAttack通过目标函数、搜索方法、转换模块和约束条件列表构建自然语言处理攻击方案。该图展示了使用TextAttack模块创建的Alzantot等人(2018年)与Jin等人(2019年)提出的攻击方法。

本节详解TextAttack框架的四大组件,并描述当前已实现的功能模块。图5展示了对两种经典攻击方法(Alzantot等人,2018;Jin等人,2019)的分解说明。

A.2.1 目标函数

目标函数接收输入x₀,判断其相对于原始输入x是否满足攻击成功条件。不同任务的目标函数各异:例如分类任务中,成功的对抗攻击可能是将模型输出改为特定标签。目标函数还会评估x₀对实现目标的"优劣"程度,该评分可作为搜索方法寻找最优解的启发式依据。 

TextAttack包含以下目标函数:

• 无目标分类:最小化正确分类标签的得分

• 定向分类:最大化指定错误分类标签的得分

• 输入精简(分类):在保持预测标签不变前提下尽可能减少文本字数

• 非重叠输出(文本生成):使输出文本与原始输出无词汇重叠

• 最小化BLEU分数(文本生成):使输出文本与原始输出的BLEU分数差值最小化(Papineni等人,2001)

A.2.2 约束条件

扰动文本需满足所有约束条件才被视为有效。TextAttack包含四类约束:

预转换约束

在扰动前预先限制x的修改方式:

• 停用词不可修改

• 已扰动词汇不可重复修改

• 最小词长限制(短于设定值的词不可修改)

• 最大词索引限制(超过设定位置的词不可修改)

• 输入列修改(对于文本蕴含等双部分输入任务,可限定仅修改假设部分或前提部分)

重叠度约束

通过以下字符级指标要求x与x_adv的重叠度低于阈值:

• 最大BLEU分数差(Papineni等人,2001)

• 最大chrF分数差(Popovic,2015)

• 最大METEOR分数差(Agarwal和Lavie,2008)

• 最大莱文斯坦编辑距离

• 最大词汇修改百分比

语法正确性 这些约束条件通常旨在防止攻击产生引入语法错误的扰动。TextAttack目前支持以下语法约束:

• 最大语法错误数限制(通过LanguageTool工具测量,Naber等人,2003年)

• 词性一致性:替换词应与原词保持相同词性。支持flair、SpaCy和NLTK提供的标注器

• 基于以下语言模型过滤不符合语境的词汇:

  

表3:通过TextAttack,仅需几行Bash或Python代码即可实现对抗攻击、数据增强和对抗训练。

• Google十亿词语言模型(Jozefowicz等人,2016年)

• 学习写作语言模型(Holtzman等人,2018年)(被Jia等人2019年采用)

• GPT-2语言模型(Radford等人,2019年)

语义保持 部分约束条件试图保持原始文本x与对抗文本x_adv之间的语义关系。TextAttack目前提供以下内置语义约束:

• 最大词向量替换距离(或最小余弦相似度)

• 由训练良好的句子编码器获得的句子表征的最小余弦相似度得分:

– 跳跃思维向量(Kiros等,2015年)

– 通用句子编码器(Cer等,2018年)

– 推理语句模型(Conneau等,2017年)

– 针对语义相似度训练的BERT模型(Reimers与Gurevych,2019年)

• 最小BERT评分(Zhang*等,2020年)

A.2.3 转换操作

转换操作接收输入并返回一组可能的扰动结果。该转换过程不依赖于目标函数和约束条件:它会返回所有可能的转换形式。

我们将转换方法分为两类:白盒与黑盒。白盒转换能够访问模型本身,可通过查询模型或检查其参数来确定转换方式。例如Ebrahimi等人(2017)的研究就是基于待替换位置处独热输入向量的梯度来确定潜在替换词汇。黑盒转换则是在完全不了解模型内部信息的情况下确定可能的扰动方式。

TextAttack目前支持以下文本转换方法:

• 基于反拟合嵌入空间最近邻的词替换(Mrksiˇ c等,2016)

• WordNet词库替换(Miller等,1990)

• 基于掩码语言模型提出的词替换方案(Garg与Ramakrishnan,2020;Li等,2020)

• 梯度引导词替换:用使模型损失最大化的词汇进行替换(Ebrahimi等,2017)(白盒攻击)

• 字符级文本变换(Gao等,2018):

• 字符删除

• 相邻字符位置互换

• 随机字符插入

• 随机字符替换

• 同形异义字符替换

• 键盘相邻字符替换(Pruthi等,2019)

• 词汇删除

• 基于知网(HowNet)的语义保持替换:选择相同词性且义原匹配的词汇进行替换(Dong等,2006)

• 复合转换:返回多种转换方法的组合结果

A.2.4 搜索方法

搜索方法旨在寻找满足攻击目标且符合约束条件的文本扰动方案。TextAttack实现了文献中几种经典组合搜索算法:

• 词重要性排序的贪心搜索:根据评分函数对所有词汇排序,按重要性降序逐个替换

• 束搜索:对所有可能转换进行初始评分,保留评分最高的b个转换(b为"束宽"超参数),迭代搜索束内所有序列的潜在转换

• 基础贪心搜索:对输入文本所有位置进行转换评分,优先执行最高得分的词替换(可视为束宽b=1的束搜索特例)

• 遗传算法:基于Alzantot等(2018)提出的算法,通过种群成员的贪心扰动和个体间交叉变异进行迭代优化,优先保留适应度高的个体(同时支持Wang等(2019)提出的"改进型遗传算法")

• 粒子群优化算法。一种基于种群的进化计算范式(Kennedy和Eberhart,1995年),通过相互作用的个体群体在特定空间内迭代搜索最优解(Zang等人,2020年)。该群体被称为"群",个体代理则称为"粒子"。每个粒子在搜索空间中具有位置属性,并以自适应速度移动。

A.3 TextAttack攻击复现结果

表4:我们重新实现的攻击方法与原始源代码在成功率(左侧数字)和扰动词占比(右侧数字)上的对比。文献中未提及的数据标记为“-”。从所有数据集中随机选取1000个样本进行评估(IMDB数据集除外,由于遗传算法和粒子群优化等攻击方法处理1000个样本需耗时超过4天,故IMDB仅使用100个样本)。

表4展示了在TextAttack中运行攻击时取得的结果与原论文报告数据的对比。所有TextAttack基准测试均在库提供的预训练模型上运行,可通过单条textattack attack命令复现。存在几项重要的实现差异:

• 遗传算法基准测试源自(Jia和Liang,2017)提出的快速遗传算法。与(Alzantot等人,2018)的原始算法不同,该实现采用快速语言模型,因此可查询最多5个单词的上下文。此外,困惑度是与原始单词而非前次扰动进行比较。由于这些更严格的语言约束,预期攻击成功率会较低。

• BAE(Garg和Ramakrishnan,2020)的LSTM模型采用反拟合GLoVe嵌入训练,而TextAttack的LSTM模型使用常规GLoVe嵌入训练。因此我们的模型对反拟合嵌入同义词替换的鲁棒性较弱,预期攻击成功率较高。

• TextAttack的PSO实现所使用的HowNet同义词集,是论文中三个同义词集的串联组合。由于TextAttack与数据集无关,无法为每个可能的数据集提供同义词集,这种处理是必要的。由于攻击可选择更多同义词,TextAttack的PSO实现成功率略高。

A.4 TextAttack攻击原型

本节展示TextAttack中每个攻击方案的"攻击原型"。这是打印给定攻击组件及其参数的简明方式。这些内容直接复制自运行TextAttack的输出结果。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐