【TextAttack: A Framework for Adversarial Attacks in Natural Language Processing】
2014年的时候Szegedy发现对抗学习样本可以通过神经网络生成出来以帮助进行图像分类之后,研究者们就开始变着法的在其他的任务里面生成一些对抗样本,比如说语音识别和文本分类的过程之中。
作者提出了一种工具名为TextAttack,其主要的目标是对于任意的一个NLP的模型$F$,希望可以打乱其输入$x = (x_1,x_2,\cdots,x_m)$以得到一个序列$x_{adv}$,当然这个打乱也不是随机添加扰动,其也必须满足某一个目标函数以及特定的语言约束。
为了生成这样的一个$x_{adv}$,其需要进行一些Transformation,可以是添加单词,或者是删除单词,或者是替换单词,这都取决于我们的策略。可是不得不说,我们的可供选择的Transformation的策略实在是太多了。就算是对于每一个位置上仅仅考虑最好的$k$个替换,也会存在着指数级的替换可能。
因此对于一个NLP模型的攻击问题可能变成了一个Search问题,我们怎么在所有的可能之中选择出那些最优的方案来生成对抗样本呢?
Approach
作者认为,任何的一个对抗学习的方法都需要满足下面的四点,
- 对于任务Specific的Goal Function以评估我们的Attack的成功的程度。
- 一些Constraints以帮助我们判断这个Perturbation是不是有效的。
- Transformation的方法,帮助我们开始添加对抗样本
- Search上面所产生的对抗样本的方案
所以我们也要从下面的这四个方面进行简单的阐述。
Goal Function
我们的Goal Function得到了Input x并且评估是否Attack已经完成了。Goal的选择是与任务息息相关的问题,举个例子,比如说对于分类任务来说的话,我们可能会有两种Goal,第一种Goal是将对抗样本丢进模型之中,其预测出来的并非是原来的Class,或者是指定一个Goal,将对抗样本丢进模型之中,其预测出来的是一个Target Goal.
Constraints
模型的Input在满足某些约束的时候才会被认为是有效的。现在广泛的被运用的Constraints大概可以被分成下面的这三类。
第一类是Edit Distance,通过评估原来的x和生成的对抗样本的Edit Distance进行评估,比如说在翻译任务里面常用的BLEU。
还有一类是Grammaticality ,这是为了避免我们生成的对抗样本出现那些明显的语法上的错误。这可以参照一些POS上面的方法进行处理
最后一类当然也是比较玄学的一类就是Semantic上的考虑,这里一般的约束是通过Word Embedding上的余弦相似度的计量来处理或者是考虑整个句子的语义相似度。
Transformation
Transformation就是对于单词进行一些变换以生成对抗样本。而具体的过程可以分成两类,Black Box以及White Box,常见的Transformation的方法如下所示
- 从Word Embedding空间之中寻找那些距离比较近的单词
- 对于单词的Characters进行一定程度上的修改
Search
Search的目标是为了寻找到那些可以满足Goal以及Constraints的Transformation,常见的方法,如对于Word按照某些方式进行Ranking之后,按照Ranking选择被替换的单词.而当然一个简单的推广就是进行Beam Search的方式。更加Fancy的一些的方法就是使用遗传算法进行迭代处理了。
而作者就通过上面这样的分类生成了一个Python的包,大家如果有兴趣可以戳这个链接
https://github.com/QData/TextAttack
Comments
本文应该是一个对于自己的软件进行推广的文章吧哈哈,不过其中关于对抗学习的相关知识的梳理还是非常直观简洁的。作为入门的文章也确实是不错。
Reference
TextAttack: A Framework for Adversarial Attacks in Natural Language Processing
Comments
Leave a Comment