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

相关文章

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语言标准库中的一个同步原语,用于确保某个操

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06