每天给你送来NLP技术干货!


来自:圆圆的算法笔记
在CV领域,研究者发现,通过对原始输入图片进行某些微小的扰动,扰动前后的图片人来看其实是没有差别的,但是输入到训练好的深度学习模型中,模型预测的结果会和原始样本的预测结果产生较大的差别。这表明这些深度学习模型容易受到这种样本的“攻击”。对抗攻击研究的就是如何对原始数据做最小的改动,在原始样本的含义完全不变的情况下,能让模型预测结果产生最大的loss,预测结果发生较大变化
研究对抗攻击可以帮助我们更深入理解和提升深度学习模型的鲁棒性,例如通过对抗攻击产生一些模型无法正确识别的样本作为训练样本,以提升模型鲁棒性。在图像领域,对抗攻击的研究已经比较成熟。而在NLP领域,输入文本是高度离散的数据结构,不像图像那样可以通过扰动每个像素点生成视觉上基本不变的图像。对于一个文本,即便是只替换一个字符,都有可能导致原来文本的语义发生变化,或者生成的文本不符合语法结构,生成的对抗样本无效。这导致NLP中很难生成一个合理的对抗样本。那么如何生成好的对抗样本,并以此作为训练数据提升nLP模型的鲁棒性呢?今天给大家介绍几篇NLP中对抗样本的典型工作,主要来自4个角度:黑盒对抗样本、白盒对抗样本、对抗样本和对比样本的关系、针对中文语言模型设计的对抗训练方法

1. 黑盒对抗样本:利用BERT生成对抗样本

最基础的生成对抗样本的规则是基于规则的方法,但是这样生成的对抗样本无法保证语言的流畅性和语义不变性。并且在这个基于规则的过程中,需要使用到NER、POS tagging等复杂模型识别句子中各个元素,这个流程的代价较大。BERT-ATTACK: Adversarial Attack Against BERT Using BERT(EMNLP 2020)提出使用BERT模型生成对抗样本,主要分为识别句子中的关键token以及关键token的替换两个步骤。
第一步是识别句子的关键token,即句子中哪些token被攻击后对模型的预测结果影响最大。对于一个句子,将每个单词分别替换成[MASK]后,输入到BERT中预测得分,选择得分和原始完整句子得分相差最大的单词。这些单词如果被替换掉,会对模型的预测结果造成很大的影响,因此也是后面要攻击的对象。
第二步利用BERT对第一步识别出的token进行替换,这一步同样利用BERT模型。将文本输入到BERT中,对于待替换单词对应的位置,BERT会给出各个单词的预测得分,选择打分topK作为替换单词的候选。将替换后的句子输入到BERT中,看是否能够欺骗模型让模型给出错误答案,如果可以的话这个样本就作为对抗样本。

2. 白盒对抗样本:义元+粒子群优化

Word-level textual adversarial attacking as combinatorial optimization(ACL 2020)提出的是更加白盒对抗样本生成方法,主要由基于sememes的同义词替换以及基于PSO(粒子群优化算法)的最优对抗样本搜索两个部分组成。
第一个模块是基于sememes的同义词替换。Sememes可以理解为一个单词的元语义,描述了单词最基本的含义。如果两个单词的元语义相同,那么这两个单词就是同义词。本文使用HowNet提供的数据识别同义词,在这个数据集中,所有词语的含义可以由更小的语义单位构成,这种语义单位也被称作义元。这种选择同义词的方法,相比使用语言模型word embedding的方式可解释性更强,并且能够保证所有同义词的质量。如下图所示,原始输入的每个单词都可以根据sememes获取到一些同义词,这些同义词就作为后续构造对抗样本的搜索空间。
第二个模块是基于PSO的最优对抗样本搜索。句子中每个单词都有很多同义替换词,我们希望快速寻找到能成功对模型进行攻击的对抗样本。PSO是一种最优搜索算法,假设我们有N个粒子,要在D维空间中寻找最优点,最基础的PSO算法由以下4个步骤组成:
  • Initialize:最开始随机初始化每个粒子的速度和位置;
  • Record:空间中的每个位置对应一个optimization score,记录每个例子走到现在位置最高的optimization score,以及所有例子走到现在位置最高的optimization score(全局最优点);
  • Terminate:当全局optimization score达到某个阈值时,跳出循环;
  • Update:如果没有达到目标阈值,则根据如下公式更新每个例子的速度和位置(根据每个例子的最优位置和全局最优位置进行移动)
将PSO的思路应用到对抗样本生成中,对于一个原始输入句子,所有可能的对抗样本就是整个搜索空间。PSO中的每个位置对应这里的每一个可能的对抗样本。每个位置(即对抗样本)对应着一个optimization score,可以理解为生成的对抗样本让模型预测出错误标签(和原样本预测的标签不同)的概率。句子中的每个单词视为一个粒子,每个单词被进行同义替换的概率对应PSO中的速度。接下来就可以套用PSO的思路进行最优对抗样本的搜索了。

3. 对抗样本 vs 对比样本

如果对一个句子进行微小扰动生成的句子,仍然和原句子的含义一致,但是模型预测的结果发生很大变化,这种样本就是前面说的对抗样本adversarial examples。而与此相对的,如果对句子的微小扰动直接影响了原来句子的含义,那么这种样本被称为对比样本contrastive examples。之前的工作大多数都集中在如何使用adversarial examples提升NLP模型效果,而Cline: Contrastive learning with semantic negative examples for natural language understanding(ACL 2021)这篇文章发现,引入adversarial examples虽然会提升模型抵御对抗样本的能力,但是会让模型在adversarial examples这种样本上效果变差。
例如情感分类,修改一个单词导致整个句子情感含义发生反转的情况,引入adversarial examples反而会让模型更预测不出来修改前后的差别。这是因为adversarial examples和contrastive examples本来就是相对立的两种样本。下面的实验结果就很好的验证了这点,引入对抗样本后,模型在对抗测试集(Adv)上效果提升,但是在对比测试集(Rev)上效果反而下降。
为了解决这个问题,Cline提出了一种新的训练方法,同时考虑对抗样本和对比样本。如下图所示,对于一个句子,通过改动部分token生成一个对抗样本(含义和原句子相近)和一个对比样本(含义和原样本相反)。采用对比学习的方式,让原样本和对抗样本的表示离得近,和对比样本的表示离得远。此外,除了BERT最基础的MLM任务外,文中还引入了一个word级别的预测任务,预测对比样本和对抗样本中哪些token被替换了,是一个二分类任务,但是这个任务对于最终的模型效果影响相对较小,主要收益还是来自对比学习的引入。

4. 针对中文语言模型的对抗训练方法

微信团队在ACL 2022发表了一篇文章RoCBert: Robust Chinese Bert with Multimodal Contrastive Pretraining(ACL 2022),利用对抗学习生成更多噪声数据,用来进行中文BERT模型的训练,得到鲁棒性更强的中文BERT模型。对于中文这种象形文字来说,对抗样本的构造更加复杂。下表列出了各种不同的对抗样本,其中包括谐音、形状相似、文字转拼音、文字偏旁部首拆分等多种类型。这些对抗样本在工业界实际的数据中比较常见,工业界的文本数据噪声很大,NLP模型在这种样本上表现往往较差。针对这种噪声较大的样本,解决办法要么就是增加一个前置的纠错模块,要么就是生成各种各样的对抗样本对模型进行finetune。
本文提出的RoCBERT在预训练语言模型的阶段就引入了对抗样本,基于对比学习的方式进行预训练。首先文中利用多种多样的规则生成不同类型的对抗样本,也会使用不同规则的组合生成更复杂的对抗样本。不同的规则包括:谐音、文字形状相似、一个文字切分成多个多个文字、同义词替换、文字转拼音等等。
接下来,在BERT预训练阶段,除了BERT最原始的Mask Language Model任务外,引入了对比学习loss,原样本和其对抗样本被视为正样本,batch内其他样本视为负样本。最后,在模型结构方面,除了token embedding外,引入了每个汉字的拼音表示以及图像表示,让一个汉字的输入信息更加丰富。其中,图像表示采用每个文字宋体的图像,利用ResNet提取图像特征。对于图像部分的编码器,使用了一个对比学习预训练,生成一个比较合理的图像编码器初始化参数。

5. 总结

NLP模型的鲁棒性是学术界和工业界持续关注的焦点,而对抗样本的引入是提升NLP模型鲁棒性的一个重要方法。这篇文章从4个角度介绍了对抗样本生成在NLP领域的进展。在工作中也可以思考如何利用对抗攻击等方法从样本角度让NLP模型更加鲁邦,往往样本上的优化是最有效的。
最近文章
继续阅读
阅读原文