赞
踩
论文来源:NDSS-2019
论文链接:https://arxiv.org/pdf/1812.05271.pdf
近年来,基于深度学习的文本理解(DLTU)技术已经被应用到了很多场景,如机器翻译、问答系统、文本分类等。尽管这些DLTU技术的应用场景很广,效果很好,但是它背后的安全性却是未知的。且这类技术越来越多地应用到一些security-sensitive的场景,如情感分析,有害内容检测等,这是令人担忧的一件事。
论文提出了一个用于生成对抗文本的通用对抗框架(TEXTBUGGER),实验验证了DLTU易于受到对抗文本攻击而预测错误的结果。相比之前的工作,TEXTBUGGER的优势:
1. 有效(effective): 攻击成功率超过之前的模型
2. 隐蔽(evasive): 保留了正常文本的特点
3. 高效(efficient: 高效生成对抗性文本,运算速度是文本长度的次线性
同时,作者利用TEXTBUGGER生成的对抗文本去测试了一些用于文本情感分析和有害内容检测的真实DLTU系统(如Google Cloud NLP, Microsoft Azure Text Analytics, IBM Watson Natural Language Understanding and Amazon AWS Comprehend, etc.),验证了TEXTBUGGER的有效性,隐蔽性,高效性。实验主要基于开源的IMDB数据集来测试,在4.61秒内实现了100%的攻击成功率,保留了97%的语义相似度。
最后还讨论了可能的防御机制来抵抗这种攻击,为未来的研究者提供一些研究方向。
深度神经网络DNNs虽牛虽应用广,但是最近被发现只要对输入样本做一些轻微扰动,便能够忽悠模型做出错误的决策,这说明了DNN还是蛮脆弱的。特别是将这些DNN部署到security-sensitive的场景中时,是不安全的。
因为论文主要是对基于深度学习的文本分类模型做了实验,所以论文的介绍部分有提到说,如今基于DL的文本分类任务在一些文本信息的理解和分析任务上越来越重要。比如一些线上的推荐系统就会根据用户留言的情感来分别做不同的推荐,还有就是一些线上的评论区,基于文本分类技术来检测一些低俗有害的评论。
在当时,对抗攻击在CV方向已经取得了很高的攻击成功率,且对一些基于DL的CV模型造成了严重的威胁,也因此出现了一系列的应对对抗攻击的研究。
然而当时关于对抗攻击的研究基本集中在CV领域,由于文本数据的离散性的原因(即对文本数据来说,其以离散的符号形式存在。每个token(token指分词器的输出,这里将其看作最小语义单元word:如单词、词语等)需要使用微妙的方式转换为向量),使得对抗攻击的研究非常具有挑战性。且在CV中,一张图像可能是由几千,几万甚至更多的像素点组成的,对其中几个像素点做一些轻微扰动生成对抗样本,我们其实是很难发觉这个图片被改过的。而在NLP中,你对一个句子的单词做了改变之后,是很容易察觉到这个句子被修改的。所以现有的一些CV领域的对抗攻击的方法不能直接应用到NLP领域的。
在当时,虽然也有一些针对NLP领域的开创性对抗攻击算法的提出,但是作者认为他们存在如下缺点:
1. 计算低效
2. 这些算法是在白盒测试下设计的
3. 需要人为因素的干预
4. 针对某个特定的NLP模型测试
TEXTBUGGER的一些对抗文本测试的例子如下:
1.提出了TEXTBUGGER,能够在白盒和黑河设置下有效且高效的生成对抗文本,且保留原文本信息的语义不变。
2.在一些SOTA的机器学习模型和线上的一些DLTU应用上对TEXTBUGGER进行评估,实验结果显示TEXTBUGGER十分有效和高效。
3.进行了一项user study,也就是证实TEXTBUGGER生成的对抗文本和原文本的语义相差不大,不影响人们的理解。
4.进一步讨论了两个潜在的防御这种对抗攻击的策略,以增强文本理解模型的鲁棒性。
首先,将这个对抗算法设计问题公式化,即主要满足图中圈出的两个条件:
1.对抗样本输入模型得到的标签和原样本输入模型得到的标签不相等。
2.对抗样本和原样本的语义相似度要大于某个阈值。
考虑白盒和黑盒设置来评估不同的对抗能力。
白盒攻击下,攻击者可以接触到模型的结构、输出、参数、梯度等一切信息,模型处于完全白盒的状态。因此白盒攻击能够暴露模型最坏情况下的漏洞。、
实验部分的白盒攻击针对LR、CNN 和 LSTM 模型。
黑盒攻击下,攻击者只能通过输出与模型进行交互,对模型的其他信息一无所知,模型始终处于黑盒状态。
实验部分,黑盒攻击针对真实线上模型,这些模型是一些公司在云服务器上部署好的线上模型,使用者通过调用相关的API即可使用。如Google Cloud NLP、IBM Watson等参数未知的模型。
其实这个TEXTBUGGER它的主要设计思路就是在轻微的改动原文本,又使其语义变化不大的同时,能够使模型预测出错。
注:Specifically, we call the slightly changed words “bugs”.
主要就是上图这个算法了,原理也十分简单,
步骤一(第2-5行)为每个单词计算重要性得分:
首先计算出模型的雅可比矩阵,根据雅可比矩阵得出输入文本中哪些词对输出的影响最大,排个序。
每个单词xi的重要性为:
步骤二(第6-14行)Bugs的生成(即对原单词进行修改):
论文对单词的修改分为了2种级别,character-level和word-level。毕竟只有对原本进行小改动,才能不让人察觉。
character-level:
在进行各项NLP任务时,我们知道,要先构建词典,然后向量化。因为这个词典是根据训练数据集构建的,当我们对单词的字母扰动时,那很可能会生成一个不再该词典中的词(即常说的OOV问题),这时我们根据预先的做法,我将其统一设置为单词“unknown”,并将其映射为对应的向量。即使有这个问题的存在,作者实验发现,这样简单的处理也能很有效的忽悠模型。
word-level:
将原单词替换为词向量空间中,tok 5个最近邻的单词,以保证其原始语义不改变。单词的词向量通过预训练好的GloVe模型得出。(14年斯坦福在EMNLP会议上提出的模型)
对于以上character-level和word-level的改动,作者主要提出了以下5种方法:
1.Insert:在单词中插入空格,因为在一个英文句子中,单词之间是通过空格分隔开的,所以在一个单词中插入空格,有一定可能性能够欺骗模型。
2.Delete:随机删除一个单词中的字母(除了首字母和尾字母)。
3.Swap:随机交换一个单词内的相邻字母(除了首字母和尾字母)。
4.Substitute-C:替换一个单词内一些字母为视觉上相似的字母(如o替换为0,l替换为1等),或者是键盘上相邻的字母(如m替换为n)。
5.Substitute-W:将原单词替换为词向量空间中,tok 5个最近邻的单词。
例子:
根据以上5种方法,生成了5种bug单词,我们要挑个最优的。也就是分别对原文本分别替换这5个bug单词得到5个对抗样本,将其输入模型,模型的输出置信度和原样本输入模型得到的置信度之差最大的,那就是最优的,也就是最牛的骗子。在Algorithm 1中,找到最优bug单词后,还要判断:
1.对抗样本输入模型得到的标签和原样本输入模型得到的标签不相等。
2.对抗样本和原样本的语义相似度要大于某个阈值。
如果不满足接着处理下一个单词。
在黑盒攻击下,我们无法得到模型的梯度信息,也就是不能像白盒攻击里计算出雅可比矩阵来分析句子中每个单词的重要性一样,所以只能对输入文本就行修改。黑盒攻击算法如下:
主要分为3步:
步骤一(第2-6行)找出重要的句子:
一般来说说,当人们表达自己的观点时,其实大部分的句子是在描述事实,主要的观点只依赖于其中的某几句话。所以为提高TEXTBUGGER的效率,先找出对模型预测结果贡献最大的句子,然后优先处理他们。
具体做法是用了一个python里常用的NLP工具包spacy,将输入文本里的每一句话分开,然后分别输入模型预测得到一个标签,若句子的标签和原始整个文本输入模型得到的那个标签不一样的,过滤掉。然后根据每个句子预测的置信度当成句子的重要性得分排序这些重要句子。
步骤二(第8-11行)找出重要的单词:
找到了重要的句子,那接下来就是在这些重要的句子中找重要的单词。(也是为了提高效率,优先修改重要的单词)
具体做法是:单词的重要性得分就是该句子输入模型得到的置信度和删除句子中某个单词后输入模型得到的置信度之差。差越大说明单词越重要。
如下面的例子:
步骤三(第12-20行)bug单词生成:
因为上一步得到了单词的重要性得分了,所以接下来的步骤就跟白盒攻击算法里的步骤类似了。
两个开源数据集:
1、IMDB
2、Rotten Tomatoes Movie Reviews (MR)
先用训练集训练,验证集验证。最后在测试集上生成对抗样本测试。
对于白盒攻击,使用如下3种模型
1、LR
2、TextCNN
3、LSTM
对于黑盒攻击,使用如下10种部署好的模型API接口:
1、Google Cloud NLP
2、IBM Waston Natural Language Understanding (IBM Watson)
3、Microsoft Azure Text Analytics (Microsoft Azure)
4、Amazon AWS Comprehend (Amazon AWS)
5、Facebook fastText (fastText)
6、ParallelDots
7、TheySay Sentiment
8、Aylien Sentiment
9、TextProcessing
10、Mashape Sentiment
白盒攻击的对比baselines:
1、Random
2、FGSM+Nearest Neighbor Search (NNS)
3、DeepFool+NNS
黑盒攻击的对比baselines:
1、DeepWordBug
使用了如下4种指标:
1、Edit Distance
也就是编辑距离,撸过动态规划算法题的应该比较清楚编辑距离了,也就是将一个单词变为另一个单词的最少操作数。(操作包括:删除、插入、替换字母)。
2、Jaccard Similarity Coefficient
杰卡德相似系数,就是交并比咯。
3、Euclidean Distance
欧氏距离,即两点的距离。
4、Semantic Similarity
以上3个指标无法计算两个句子的语义相似度。这里作者使用了个USE预训练模型来对句子编码,然后利用余弦相似度来计算两句子语义相似度。
【注:USE也就是 transformer 的encoder结构的预训练模型,因为通过这个模型,每个单词都能够
得到一个固定维数的向量表示,对这些向量取平均来表示这个句子的向量表示。】
Two Intel Xeon E5-2640 v4 CPUs running at 2.40GHz, 64 GB memory, 4TB HDD and a GeForce GTX 1080 Ti GPU card.
每个实验都重复5次然后取平均值,避免随机性。文本预处理阶段没有去除停用词,因为作者实验发现停用词的修改也会影响模型预测的结果。
白盒攻击的测试结果如下:
可以看到TEXTBUGGER的攻击成功率明显优于其他baselines,且只需要对原文本做出轻微改动。
黑盒攻击的测试结果如下:
一样的,也是可以看到TEXTBUGGER的攻击成功率明显优于其他baselines,且只需要对原文本做出轻微改动。
这里使用黑盒模型进行试验,毕竟是因为这些黑盒模型已经是部署好了用在实际中的,更具代表意义。
从图a可以看出对文本长度对命中率基本没啥影响。
进一步的更仔细地,看置信度之差来瞧瞧具体情况,从图b可以看到,诶在Google Cloud NLP模型上还真有一点下降,说明长文本会比短文本更难攻击一丢丢。
从图c可以看出文本越长,攻击耗时越长。这从直观上也蛮好理解,毕竟文本越长包含的信息越多,从论文的攻击算法原理也可知道,它要先找出重要的句子来再找重要单词,所以越长越慢。
作者测试了,对于超过60个词的文本,只需要不超过100秒的时间生成其对抗文本。(在如下3个平台中)
作者还测试了攻击前后,模型输出置信度的变化分布。从下图可以看到,被攻击过后,置信度整体确实朝着相反的方向变化了。
下图左边是白盒攻击的测试结果,右边黑盒攻击:
其实下面的结果都说明了TEXTBUGGER能够生成和原文本语义相差不大的对抗文本来攻击模型。
进一步的作者去测试了文本长度对对抗文本生成的影响:
可以看到文本越长,需要扰动的单词越多,从直观上也很好理解。
对生成的对抗文本的语义相似度没啥影响。
作者还统计分析了有害单词的分布,可以从图a的词云图中看到对于标签为消极的文本,通过攻击算法得出的一些重要单词也确实是一些消极单词。
而从图b可以看出5种扰动类型中,对于不同平台哪种扰动类型占比较多。Delete和Sub-W占比最小,毕竟这两种属于改动较大的,毕竟要满足语义变化不大,且保证置信度之差变化大。
这一部分就是在有害内容检测数据集上进行攻击测试咯。
数据集来源:Kaggle上的竞赛数据集Toxic Comment Classification competition。
包含6种标签:
“toxic”
“severe toxic”
“obscene”
“threat”
“insult”
“identity hate”
论文作者将该6分类问题归为2份类,即有害无害归为一类。同时从无害文本中随机采样和有害文本相同数量的样本,各12630条。
白盒攻击:
1、LR
2、TextCNN
3、LSTM
黑盒攻击:
1、Google Perspective
2、IBM Natural Language Classifier
3、Facebook fastText
4、ParallelDots AI
5、Aylien Offensive Detector
其中,IBM和fastText要自己训练,目测是因为这两个平台没有有毒内容预测的接口,需要自己训练。作者说这两个平台提供了训练和预测的接口。
从下图结果来看,白盒和黑盒攻击中,只需要扰动少量单词即可达到很高攻击成功率。
从下图可以看到,有害的文本被攻击后,有害置信度均被降低了。
其实下面的结果都说明了TEXTBUGGER能够生成和原文本语义相差不大的对抗文本来攻击模型。
从图a可知,在有害文本中,攻击算法计算出的重要单词确实是一些有害单词,所以扰动这些单词对有害置信度影响较大。
从图b可以看出5种扰动类型中,对于不同平台哪种扰动类型占比较多。Delete和Sub-W占比最小,毕竟这两种属于改动较大的,毕竟要满足语义变化不大,且保证置信度之差变化大。和前面情感分析类似的结果。
即在一个模型上生成对抗样本,去测试另外的模型,效果会如何。
从下图结果来看,额。。10%多-50%多的成功攻击率吧,说明还是有一定的transferability的。
还做了个用户测试,主要就是让人去辨别攻击前后的文本变化大不大,语义相似度如何。
数据共从IMDB和Kaggle数据集里分别抽取500条文本和其对应的对抗文本(一般是白盒攻击算法生成,一般黑盒生成。且都是成功攻击的对抗文本)。
297名参与人员,一共得到3177条标注结果。
实验结果:95.5%的原文本能够被正确分类,94.9%的对抗文本能够被分类成器原始标签。这说明了人去看是觉得语义没变化的,对人的决策没啥影响,而模型则预测错了。说明了TEXTBUGGER做的扰动能够很好的保正语义变化不大。
更具体地,如下图a,可以看到饼图的蓝色部分是原文本中员原来就存在的错误(如拼写错误,语法错误等),参与人员发现这类错误的比例为:38.0% (13.1%/34.5%)。而对抗算法生成的错误,参与人员发现这类错误的比例为:30.1% (19.7%/65.5%)。说明TEXTBUGGER生成的对抗样本不是很明显,伪装的很好哈哈。
从图b可以看出5类扰动中哪类扰动更容易被发现。
在当时,针对对抗文本攻击的防御机制还是很少的。作者实验探索了2个防御机制:
使用了context-aware spelling check service provided by Microsoft Azure。
从结果来看,即使对抗文本被纠错软件纠错后,TEXTBUGGER还是比DeepWordBug的成功攻击率高很多。
进一步地,分析了纠错工具能够成功纠正的对抗攻击算法的5类扰动中的类型分布:
可以看到Sub-W类型的是较难纠正的。毕竟DeepWordBug是随机从一堆生成的bugs中挑选出bug来替换,而TEXTBUGGER则是挑选出最优的能够使置信度变化最大的bug单词。
也就是对抗训练咯,用生成的对抗样本来训练模型,增强模型的鲁棒性。
从下图结果来看,用对抗样本训练的模型acc变化不大,而攻击命中率下降了。可能说明了对抗训练能够有效抵御TEXTBUGGER的攻击。
即使如上方法能够在一定程度上抵御TEXTBUGGER的攻击。攻击者可以采取一些策略来增强TEXTBUGGER的鲁棒性,如想办法增加Sub-W类型扰动的比例,毕竟纠错软件很难纠正这类错误。且攻击者频繁的改动攻击算法的一些参数来抵御对抗训练。
论文里的攻击都属于无目标攻击,即使目标模型预测出错即可。作者希望未来能够将TEXTBUGGER扩展到有目标攻击,即使模型能够使目标模型预测出错,并错成指定类型的错。可以通过前面所说的雅可比矩阵那部分,通过计算目标标签(即想使模型预测出错的标签)对输入的偏导来实现。
作者认为设计更复杂的算法来改善TEXTBUGGER的扰动策略,如可结合一些句法解析、命名体识别等技术来改进。或许可以将TEXTBUGGER的char-level和word-level的扰动扩展到phrase-level的改动等等。
额。。懒得敲,感兴趣的自己看看跟论文里一些相关工作的介绍。
总的来说,TEXTBUGGER的原理也比较简单。对我这种小白来说,实验设计、分析的部分能学到很多东西。
1.提出了TEXTBUGGER,并利用不同ML模型在白盒和黑盒攻击下测试了2个任务:情感分析和有害内容检测。
2、并和一些baseline攻击算法进行了对比,验证了TEXTBUGGER的有效性和高效性。
3、验证了TEXTBUGGER有一定的transferability。
4、并讨论了2种防御TEXTBUGGER的方法:纠正拼写错误和对抗训练。
5、探讨了未来的一些改进工作和研究方向。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。