本文主要是介绍【深度学习NLP论文笔记】《Towards Crafting Text Adversarial Samples》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Abstract
文本fool的方法:修改原始样本:删除或替换一些重要的单词,或引入新的单词。我们的算法最适用于在每个类的例子中有子类别的数据集。基于情绪分析的IMDB电影评论数据集和性别检测的Twitter数据集的实验结果显示了我们所提出的方法的有效性。
1.introduction
使用Word2Vec方法进行数据预处理和特征提取。但是Word2Vec的离散特征使得将向量映射到单词变得困难。
生成对抗样本的另一个重要方面就是要保存样本的语义,从而使人难以分辨。
在研究IMDB影评数据集时发现,有一部分单词对判断文本属于哪个类别具有很高的贡献。比如“good、excellent、like”等表明了积极的评价,而且这些与电影的类型(the genre of the movie)无关。但有些词,比如“the movie was hilarious”,当电影是喜剧片时代表积极的评价,是惊悚片时代表消极的评价,这就与电影的类别有关。用于情感分析的分类器往往忽略类别信息,而做出全局评价。但是如果有子类信息(sub-category information),我们可以成功地做出对抗样本。
还有一种方式是,对于那些贡献大的单词,采用同义词(synonyms)替换,或者使用可能的拼写错误(possible typos),使错分类的概率提高。
经常出现的副词可以改变影评的情感。比如,如果是“the movie was fair”则正负面评价均有可能,但是如果是“the movie was extremetly fair”那就很可能是负面评价。
一个好的对抗样本应该是对文本做最少的修改,并最大程度地保留原文的语义。
2.related work
- Papernot提出了黑盒攻击和梯度掩码;
- Liang提出了FGSM直接应用在文本fool上会出现的问题,会产生混乱的文本。并且他们用反向传播的损失函数梯度确定了文本中的重要句子,并用语料库中的句子进行替换。但是找到正确语句并且用它们产生对抗样本需要一些启发算法(heuristics),这在论文中很模糊。
- 有一个代码库textfool可以使用这些想法产生同义短语和错误拼写。
- Hossein提出用一些特定的词来插入标点可以欺骗分类器,但是很容易被人发现。《Deceiving Google’s Perspective API Built for Detecting Toxic Comments》
3.proposed method
我们提出三种方式进行修改:替换、插入、移除。下面是伪代码:
计算每个单词对分类的贡献率,按从大到小排序。如果wi是个副词,且对分类贡献很大,那么删掉它;假设有一个对于wi的候选池,计算候选池中选择使贡献最小的单词pj。如果wi是个形容词且pj是个副词,那么把pj加到wi后面;否则用pj取代wi。
3.1 calculate contribution of each word towards determining class-label
一个单词有高贡献是指去掉它后文本将被分为当前类的概率大幅减小。所以可以这样计算贡献值:
其中是文本被分为yi的后验概率,代表没有这个关键字。
但是对于大多数文本来说,计算贡献很费时,我们可以借鉴FGSM的方法近似计算:
J是损失函数。
3.2 build candidate pool p for each word in sample text
- 同义语与拼写错误(synonyms and typos):对于每个单词,都建立候选池,里面包含了可以替换当前词的词语。比如good可以被换为nice、decent等等。由于拼写错误太显眼,而且出现太多不好,所以约定拼写错误都是有效词汇,比如good的是god、goods等等,都是有效得英语词汇。
- 特定类型的关键词(genre specific keywords):特定关键词是指在一类电影中被作为积极评价词,但在另一类电影中被作为负面评价词的单词。这些关键字通过在语料库中考虑词频(tf)来捕捉类的特征。如果这个单词在某一类的评价中出现的频率很高,但在另一类中频率很低,那么它就具有区分性。
表示第i类中的区分关键字(distinctive keywords)的集合。比如说有两个这样的集合分别对应第一类和第二类,把这些区分关键词这样加入候选池:
3.3 crafting the adversarial sample
使用三种启发式算法去修改文本:
- 移除单词(removal of word):上面算法提到的移除副词,因为副词起强调作用,而且对语法无影响。
- 增加单词(addition of word):上面算法提到的把副词加到形容词前。
- 替换单词(replacement of word):
- 迭代地对每个单词进行修改,直到原始样本的标签被替换。这实际上是使用到了贪婪算法(greedy method),争取做最少的修改,同时最大程度地保留句子结构。
4.experimental results
实验方面,使用IMBD数据集《Learning word vectors for sentiment analysis》做情感分析,使用推特数据集(kaggle上的)做性别分类。
我们用推特数据集和《Deep Text Classification Can be Fooled》论文做了对比,感觉这篇缺乏正确的解释(lack of proper explanation),实际效果不好。
4.1 IMDB movie review sentiment analysis
IMDB影评数据集包含对不同电影的评价(正面、负面各包含22500条)
-
data preprocessing and feature extraction: 我们找到每条影评对应电影的种类(genre of movies),并从中选择了动作‘Action’、喜剧‘Comedy’、喜剧‘Drama’。这些被当做用于选【特定类型关键词(genre specific keywords)】时需要的子类(sub-categories)
-
classifier used: CNN
-
result: 一个评价对抗样本的指标是衡量原样本和对抗样本之间的相似度。鼓励相似度尽可能大。相似度使用Spacy工具箱测量。另一个评价标准是替换词的数量,数量越少越好。
使用我们自己方法时,也和textfool进行了比较。
第3行Accuracy using original test set 是baseline的准确率(居然才74.53??)
第3列Proposed method using genre specific keywords 代表考虑特定类型关键词时的准确率;
第4列Proposed method w/o using genre specific keywords 代表在candidate pool中不考虑特定类型关键词时的准确率。第5行percentage of perturbed samples代表成功产生对抗样本的概率(the number of test samples converted to their corresponding adversarial samples successfully)。【这个成功产生,作者的解释是,由于语义约束,有的测试样本无法成功产生对抗样本】
使用/不使用genre specific keywords时产生的对抗样本和干净样本间的平均语义相似度分别为0.9164和0.9732。
这篇关于【深度学习NLP论文笔记】《Towards Crafting Text Adversarial Samples》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!