NLP攻击文献阅读一——OpenAttack: An Open-source Textual Adversarial Attack Toolkit

系列文章目录


  1. NLP攻击文献阅读一——OpenAttack: An Open-source Textual Adversarial Attack

前言

文章:OpenAttack: An Open-source Textual Adversarial Attack Toolkit
发表会议:Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language
时间:2021年11月


1、介绍

  在自然语言处理 (NLP) 领域,已经提出了多种对抗性攻击模型 (Zhang et al, 2020)。这些模型在受害者模型的可访问性(从完全了解到完全无知)和扰动级别(字符、单词或句子级别)方面各不相同。此外,它们最初是为了在不同的评估协议下针对不同的 NLP 任务攻击不同的受害者模型而提出的。

  这种巨大的多样性导致不同攻击模型之间的公平和恰当比较严重困难,这不利于文本对抗攻击的发展。此外,尽管大多数攻击模型都是开源的,但它们使用不同的编程框架和设置,这导致在实施它们时会花费不必要的时间和精力。
  OpenAttack与TextAttack的区别和互补性主要体现在以下三个方面。

  • 支持所有的攻击: TextAttack利用了一个相对严谨的框架来统一不同的攻击模型。然而,这个框架自然不适合句子级别的对抗性攻击,这是一种重要而典型的文本对抗性攻击。因此,TextAttack中没有包含句子级攻击模型。相比之下,OpenAttack采用了一个更灵活的框架,支持所有类型的攻击,包括句子级攻击
  • 多语言性: TextAttack只涵盖英文文本攻击,而OpenAttack现在支持英文和中文。而且其可扩展的设计能够快速支持更多的语言。
  • 平行处理: 运行一些攻击模型可能非常耗时,例如,用SememePSO攻击模型攻击一个实例需要100多秒(Zang等人,2020)。为了解决这个问题,OpenAttack额外提供了对多进程运行攻击模型的支持,以提高攻击效率运行一些攻击模型可能非常耗时,例如,用SememePSO攻击模型攻击一个实例需要100多秒(Zang等人,2020)。为了解决这个问题,OpenAttack额外提供了对多进程运行攻击模型的支持,以提高攻击效率
      此外,OpenAttack与HuggingFace的transformers1和datasets2库完全集成,允许对不同数据集上的数千个非线性规划模型(尤其是预训练模型)进行方便的对抗性攻击。

  OpenAttack还具有很强的扩展性。无论使用何种编程框架(PyTorch、TensorFlow、Keras等),它都可以轻松地用于攻击任何自定义数据集上的任何自定义受害者模型。
  OpenAttack可用于(1)为攻击模型提供各种方便的基线;(2) 使用其全面评估指标全面评估攻击模型;(3) 协助快速开发新的攻击模型;(4) 评估非线性规划模型对各种对抗性攻击的鲁棒性;(5)进行对抗性训练(Goodfello等人,2015),通过使用生成的对抗性示例丰富训练数据来提高模型的稳健性。

2、文本对抗攻击的形式化和分类

  我们首先将文本对抗攻击任务形式化,用于文本分类,下面的形式化可以简单地适用于其他自然语言处理任务。对于被受害者模型F正确分类为其基本真值标签y的给定文本序列x,攻击模型a应通过小扰动将x转换为 x ^ \hat{x} x^,其基本真值标签仍然为y,但F给出的分类结果为 y ^ ≠ y \hat{y} \neq y y^=y。接下来,我们从三个角度介绍了文本对抗攻击模型的分类。
  根据攻击模型对受害者模型的可访问性,现有的攻击模型可分为四类,即基于梯度、基于分数、基于决策和盲模型。首先,基于梯度的攻击模型也称为白盒攻击模型,需要充分了解受害者模型才能进行梯度更新。其中大多数受到视觉对抗攻击中快速梯度符号法(Goodfello等人,2015)和前向导数法(Papernot等人,2016a)的启发。
  与白盒攻击模型相比,黑盒模型不需要受害者模型的完整信息,可以细分为基于分数、基于决策和盲模型。盲模型根本不知道受害者模型。基于分数的模型需要受害者模型的预测分数(例如分类概率),而基于决策的模型只需要最终决策(例如预测类别)。
  根据对原始输入的扰动程度,文本对抗性攻击模型可分为句子级、单词级和字符级模型。

  • 句子级攻击模型主要通过添加分散注意力的句子(Jia和Liang,2017)、转述(Iyyer等人,2018;Ribeiro等人,2018)或通过编码器-解码器生成文本(Zhao等人,2018)来制作对抗性例子。
  • 词级攻击模型大多进行词语替换,即用语义相同或相似的词语如同义词替换原始输入中的一些词语(Jin等人,2020;Ren等人,2019;Alzantot等人,2018)。一些词级攻击模型也使用包括删除和添加单词的操作(Zhang等人,2019;Garg和Ramakrishnan,2020)。
  • 字符级攻击模型通常进行包括交换、替换、删除、插入和重复的字符操作(Eger等人,2019;Ebrahimi等人,2018;Belinkov和Bisk,2018)。
      最后,根据受害者模型 y ^ \hat{y} y^给出的错误分类结果是否被预先指定,对抗性攻击模型还可以分为有针对性的和无针对性的模型(主要针对多类分类模型)。大多数现有的攻击模型都支持(通过微小的调整)有目标和无目标的攻击,我们在本文中没有特别关注攻击模型的这个属性。
      目前,OpenAttack包括15种不同的攻击模型,这些模型涵盖了所有受害者模型的可及性和扰动水平类型。表1列出了OpenAttack中涉及的攻击模型。
    在这里插入图片描述

表1:OpenAttack涉及的文本对抗攻击模型,其中三个句子级模型SEA、SCPN和GAN以及FD、UA T和VIPER暂时不包括在TextAttack中。"可及性 "是指受害者模型的可及性,"扰动 "是指扰动程度。“句子”、"单词 "和 "字符 "表示句子、单词和字符级别的扰动。在 "可及性 "和 "扰动 "两栏中,"A,B "表示攻击模型同时支持A和B,而 "A+B "表示攻击模型同时进行A和B。

OpenAttack所涉及的15种攻击模型的具体信息在这篇文章中

3 工具集合的设计和结构

  图1展示了所有模块的概况。
在这里插入图片描述

  • TextProcessor: 该模块旨在处理原始输入,以协助攻击模型生成对抗性实例。它由几个函数组成,用于标记化、词法化、去词法化、词义消歧(WSD)、命名实体识别(NER)和依赖分析。
      目前它支持英语和中文,对其他语言的支持可以通过重写TextProcessor基类来实现
  • Victim: 该模块封装了受害者模型。它支持由任何编程框架(特别是HuggingFace的转化器)实现的基于神经网络的模型和传统的机器学习模型。它主要由三个函数组成,用于获得与输入有关的梯度,预测分数和预测的受害者模型的类别。
  • Attacker: 这是OpenAttack的核心模块。它包括各种攻击模型,可以针对受害者模型的给定输入生成对抗性的例子。
  • AttackAssist: 这是Attacker的一个辅助模块。它主要包括不同的单词和字符替换方法,这些方法广泛用于单词和字符级别的攻击模型中。攻击者通过查询该模块来获得某个词或字符的替换。现在,它包括基于单词嵌入(Alzantot等人,2018;Jin等人,2020)、基于同义词(Ren等人,2019)和基于语义(Zang等人,2020)的单词替换方法,以及视觉字符替换方法(Eger等人,2019)。此外,还包括一些用于句子级攻击模型的有用组件,如基于反译的转述。
  • Metric: 该模块提供了几个对抗性例子的质量指标,可以作为攻击过程中对对抗性例子的约束,也可以作为评估对抗性攻击的评价指标。它目前包括以下指标:
  1. 谷歌十亿字语言模型(Jozefowicz等人)给出的上下文中某个单词的语言模型预测分数。2016)(该指标仅可用作对抗性例子的约束);
  2. 单词修改率,即对抗性例子与原始例子相比所修改的单词的百分比;
  3. 对抗性例子与原始例子之间的形式相似性,由Levenshtein编辑距离(Levenshtein, 1966)、字符和单词级别的Jaccard相似性(Jaccard, 1912)和BLEU分数(Papineni et al, 2002);
  4. 由Universal Sentence Encoder(Cer等人,2018)和Sentence Transformers(Reimers和Gurevych,2019)测量的对抗性例子和原始例子之间的语义相似性;
  5. 由GPT-2(Radford等人,2019)计算的perplexity测量的对抗性例子流畅性;
  6. 通过LanguageTool给出的语法错误来衡量语法性。

    表2:OpenAttack的评估指标。"高 "和 "低 "意味着指标越高/越低,攻击模型的表现就越好。
  • AttackEval: 该模块用于从不同角度评估文本对抗性攻击,包括攻击有效性、对抗性实例质量和攻击效率:(1)攻击有效性指标是攻击成功率,即成功愚弄受害者模型的攻击百分比;(2)对抗性实例质量由Metric模块中的后五个指标衡量;(3)攻击效率有两个指标,包括平均受害者模型查询时间和攻击一个实例的平均运行时间。表2列出了OpenAttack中的所有评估指标。
      在Python多处理库的帮助下,多处理的实现被纳入该模块。此外,该模块还可以对攻击结果进行可视化和保存,例如,显示原始输入和对抗性实例并强调它们的差异。
    DataManager: 此模块管理其他模块中使用的所有数据以及保存的模型。它支持访问和下载数据/模型。具体来说,它处理攻击辅助模块中使用的数据,如字符嵌入、文字嵌入和WordNet同义词,文本处理器模块中使用的模型,如NER模型和依存关系解析器,内置训练的受害者模型,以及攻击者中使用的辅助模型,如基于释义的攻击模型的释义模型。该模块有助于高效便捷地利用数据。

4、工具包使用

  OpenAttack提供了一组易于使用的界面,可以满足文本对抗攻击的几乎所有需求,例如预处理文本、生成攻击受害者模型的对抗示例和评估攻击模型。此外,OpenAttack具有很大的灵活性和可扩展性,并支持轻松定制受害者模型和攻击模型。接下来,我们展示了OpenAttack的一些基本用法。

4.1内置攻击和评估

  OpenAttack构建在一些常用的非线性规划模型中,如LSTM(Hochreiter和Schmidhuber,1997)和BERT(Devlin等人,2019),这些模型已经在常用的非线性规划数据集上进行了训练。用户可以使用内置的受害者模型快速进行对抗性攻击。以下代码片段显示了如何使用Genetic(Alzantot等人,2018)在SST-2(Socher等人,2013)的测试集上以4进程并行运行攻击BERT:
在这里插入图片描述  图2显示了上述代码中单个实例的打印攻击结果。我们可以看到OpenAttack打印原始输入以及与单词对齐的对抗示例,其中受干扰的单词是彩色的。此外,还列出了一系列攻击评估结果。在单个攻击结果的末尾,OpenAttack提供了一个攻击摘要,由所有实例中指定指标的平均评估结果组成,如图3所示。
看图2攻击结果,似乎是针对未去停用词的文本进行攻击的
在这里插入图片描述

图2:个别实例的部分攻击结果。

在这里插入图片描述
图3:攻击结果摘要

4.2、定制受害者模型

  用户通常会对自己在特定数据集上训练过的模型发起攻击,尤其是在评估受害者模型的稳健性时。不可能在所有受害者模型中完全构建。因此,轻松定制受害者模型非常重要。
  OpenAttack为受害者模型的定制提供了简单而方便的接口。对于用哪种编程框架实现的训练好的模型,用户只需要配置一些模型访问接口,在受害者类下提供攻击模型所需的可访问性。下面的代码片段显示了如何使用Genetic在SST的测试集上攻击一个定制的情感分析模型,这是一个NLTK(Bird等人,2009)的统计模型。
在这里插入图片描述5、评价
  我们使用SST-2作为评估数据集,并选择BERT,特别是BERTBASE,作为受害者模型。在训练集上进行微调后,BERT在测试集上取得了90.31的准确率。由于攻击模型的巨大多样性,我们很难像以前的工作那样对攻击施加许多限制,而这些限制主要集中在一种特定的攻击上。我们只将最大的受害者模型查询次数限制在500次 (黑盒查询吗)。此外,为了提高评估效率,我们从测试集中随机抽出1,000个正确分类的实例作为原始输入进行扰动。我们使用所有攻击模型的原始默认超参数设置。
  表3显示了评估结果。通过与最初报告的结果比较,我们确认了我们实现的正确性。我们还观察到,多处理 (多线程吗) 可以有效地提高大多数攻击模型的攻击效率(速度提升大于1)。对于一些非常高效的攻击模型,其平均运行时间相当短(如GAN),多处理带来的额外时间成本可能反而会降低效率

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值