【深度学习NLP论文笔记】《Towards Crafting Text Adversarial Samples》

本文主要是介绍【深度学习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》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/402881

相关文章

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实