【深度学习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

相关文章

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

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

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

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

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操