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


原文地址:https://blog.csdn.net/qq_36829091/article/details/81878373
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/402881

相关文章

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

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

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步