词级生成
现有的词级攻击主要基于从一些预先给定的候选词集中搜索替换词。我们的生成攻击方法会提示PLM在恶意触发文本的影响下修改原始输入中的某些单词。与这些基于搜索的攻击不同,我们的方法不从给定的集合中选择替换,而是在给定的上下文中生成替换。因此,它可以生成更丰富、更流畅的句子。PAT包括两个主要步骤:即时构建和候选生成。
我们提出了一种变体提示构造方法,该方法包含两个主要步骤:屏蔽x中的某些位置以获得x0,以及将x0与恶意触发器连接。为了引导掩码填充过程改变下游模型的预测,应该设计一个触发器,它是包含攻击者恶意目的的附加文本。这种触发器可能与标签有关。给出一个普通示例x,这两个步骤可以简单地写为:
fp(x0, label) 表示将x0与标签相关触发器连接的操作。
对于分类任务,触发器可以是描述目标标签的简单句子。情绪分类任务的fp(x0,标签)的一个可能选择是:
对于自然语言推理任务,它旨在学习两个文本(前提x1和假设x2)之间的关系:蕴涵、矛盾或中性。攻击通常在x2上进行。因此,我们只能将屏蔽x2和fp(x’,label)设计为:
fp(x',neutral )可以是上图任一
在提示构建之后,我们要求PLM填写提示xp中的空白。在触发和原始上下文的结合作用下,PLM可以用上下文一致的单词填空,使句子保持流畅,但语义嵌入会向触发方向移动。为了避免触发引起的语义倒置,我们使用WordNet的反义词词典[Miller,1995]来防止反义词的产生。在填空之后,我们移除触发器,得到对抗性的示例候选人。攻击过程不需要对受害者模型进行迭代查询。
句子生成
对于句子级攻击,一个自然的想法是在原始输入中插入一系列空格,并要求PLM在恶意触发器的指导下填充这些空格。然而,由于语境的松散约束,连续的空位可能会被语义变化的短语填满。因此,我们的句子级攻击分两步实施。我们首先使用PLM继续写一个句子,或者在原始输入x中插入一个句子。这一步可以被视为一种带有空触发器的提示方法。在得到新的连接文本ex后,我们将这个问题重新表述为单词级攻击。因此,句子级攻击的大纲是:
第一步的目的是在原始文本x中添加一个语义一致、上下文自然的句子。第二步的目的是修改文本ex,从而误导模型的输出。为了添加自然句子,GPT2是一个很好的选择,因为它是一个在大规模语料库上训练的自回归语言模型,并且在给定开始的句子更新方面表现出了很好的性能。一个简单但有效的技巧是用逗号替换输入文本末尾的停止标记,这意味着一个未完成的句子。
我们首先生成几个受害者模型的对抗性示例。对于每一个对抗性的例子,我们都mask与原始样本相比发生变化的位置,(改变mask位置)并向其添加一个触发器。我们要求PLM填空,并用交叉熵损失预测对抗实例的原始令牌。图1的第二部分是我们培训方法的示意图。
鲁棒性
提高稳健性的一个自然想法是向训练集中添加对抗性示例,并重新训练模型。然而,为大型训练集生成对抗性样本可能非常耗时,即使每个对抗性样本生成只需几秒钟。PLM通常会输出一个句子嵌入,这是下游任务的关键。因此,我们可以微调嵌入空间,使原始输入的嵌入与其对抗性示例更接近。由于在我们的方法中,对抗性示例是从提示中解码的,因此我们省略了解码过程,直接微调提示的嵌入。如图2所示,对于每对原始输入x及其提示符xp,它们的句子嵌入由一个表示为f(x)的LM输出。训练的目的是使两个句子的嵌入更加紧密。可行的损失函数可以是均方误差损失:
我们假设Lo是下游任务使用的原始损失,那么最终的训练损失可以修改为:
其中,参数α用于在两种损失之间进行权衡。损失的第一部分是为了保持干净的精度,第二部分是为了提高稳健性。我们的训练方法可以看作是一种对抗性的数据论证,但对抗性的例子隐含在这个过程中。由于我们只需要为每个训练实例添加一个触发器并屏蔽几个位置,因此成本非常低廉。