2. 评测算法详细介绍

平台已集成的文本情感分析模型评测(以下简称文本评测)算法及简要说明如下所示(使用算法缩写字典序排序)。评测依据主要是模型抵抗文本攻击的能力。

2.1. TextFooler算法 1

算法介绍

TextFooler 算法是一个黑盒的单词粒度级别的文本自然语言处理攻击算法,主要针对的是文本分类以及文本蕴含推理两类任务的模型。执行算法 TextFooler 需要预先有一个大的词汇表 Vocab,单词嵌入(向量化)模型 WordEmb 以及句子嵌入(向量化)模型 SenEmbTextFooler 主要的思想可以总结如下:

根据模型 F 可以给出单词 w 在句子 X 中的重要度(Importance),定义如下

Iw:={FY(X)FY(Xw), 若 F(X)=F(Xw)=Y(FY(X)FY(Xw))+(FY~(Xw)FY~(X)), 若 F(X)=Y,F(Xw)=Y~,YY~

上式中的 Xw 为句子 X 去掉单词 w 之后所得的句子, F(X) 为模型 F 对于句子 X 的分类结果(或者文本蕴含推理结果), FY(X) 为模型 F 对于句子 X 预测结果为 Y 的概率。

将初始的对抗样本置为 Xadv=X 。将 X 中单词依照重要度由高到低进行排序,依次执行如下的贪婪搜索(greedy search):从词汇表`Vocab`中挑出与单词 w 向量化之后余弦相似度最高的 N 个单词,并去掉经过替换后在句子中与原单词 w 词性不一致的单词,组成备选集合 Cw

对于集合 Cw 中的单词 c ,在句子 Xadv 中将单词 w 替换为 c ,得到新的句子 Xc 。如果 SenEmb(Xadv)SenEmb(X) 的余弦距离大于预设的阈值,则将 c 保留在集合 Cw 中,否则剔除。假设 Cw 最终非空集,记这个集合为

Cw={ck | 0kNw}

Nw 为某个大于等于1的整数。与此同时,我们会得到两个序列

Yk:=F(Xck)Pk:=FYk(Xck)

此时,若存在某个 k ,使得 YkY=F(X) ,那么令

c:=argmaxck{CosSim(SenEmb(X),SenEmb(Xck)) | YkY}

在此时的 Xadv 中将单词 w 替换为 c ,得到新的 Xadv ,即为满足要求的对抗样本。此时可以跳出循环,返回 Xadv 。反过来,若序列 Yk 中的每个元素都等于原预测值 Y ,则检查如下条件是否满足

min0kNwPk<FY(Xadv)

若满足,则令

c:=argmaxck{Pk}

并将 Xadv 中的单词 w 替换为 c ,进入下一个单词的循环,直到满足条件(即 F(Xadv)Y )的对抗样本 Xadv 产生,或所有单词都完成了搜索。当遍历所有单词都无法生成满足条件的对抗样本 Xadv ,则生成对抗样本失败,返回空值 None

参数说明

  1. max_candidates: 单次搜索产生的待选对抗样本数目上限

  2. min_cos_sim: 有效对抗样本与原样本进行的词替换的词嵌入向量的最小余弦距离

  3. use_threshold: 有效对抗样本与原样本的句嵌入(使用 Universal Sentence Encoder)向量的最小余弦距离

2.2. HotFlip算法 2

算法介绍

HotFlip 算法是一种白盒攻击算法,可以进行字符级别的攻击,也可以进行词级别的攻击。 HotFlip 算法对句子 X 进行的操作主要是词(或者字符)的替换(原文中称作翻转,flip),插入与删除也可视作特殊的替换操作。对于替换词(字符)的选取,主要通过极大化计算损失函数的方向导数得到:

argmaxsXL(X,y)Tvis=argmaxsXL(X,y)TXL(X,y)T[i]

其中 L 为损失函数,向量 vis 为替换第 i 个词(字符)为词汇表(字符表)中第 s 个词(字符)对应的向量,具体来说等于第 i 位值为-1,第 s 位值为1,其余位置值为0的向量, i 为要替换的句子中的第 i 个词(字符)在词汇表(字符表)中的下标。 argmaxs 可以替换为排名前n个对应的下标。一般来说,对于白盒对抗攻击,我们希望沿着梯度方向 XL(X,y)T 极大化损失函数,但由于文本的特殊性,我们只能取一些带限制(例如只有一个词被替换)的特殊的离散的方向,极大化这些方向与梯度的内积(即方向导数)。

HotFlip 算法搜索对抗样本的方法为束搜索(beam search),为:code:TextFooler 算法中使用的贪婪搜索(greedy search)的改良。束搜索每次循环会保留使模型正确预测概率最低的若干个(贪婪搜索是1个)备选对抗样本,进行下一个词(字符)的翻转搜索。

参数说明

  1. top_n: 单次搜索产生的备选替换词(字符)数目

  2. max_num_words: 有效对抗样本被替换的词(字符)的数目上限

  3. min_cos_sim: 有效对抗样本与原样本进行的词替换的词嵌入向量的最小余弦距离

  4. beam_width: 束搜索每次搜索之后保留的备选对抗样本的数目

2.3. PWWS算法 3

算法介绍

PWWS 算法全称是Probability Weighted Word Saliency,是一种词级别的黑盒攻击算法,主要针对的是文本分类模型。 PWWS 的主要方法是通过 WordNet 选取词的近义词进行替换,通过综合考虑词替换带来的正确预测概率的改变量以及原词在整个句子中的显著度(Saliency)进行筛选,得到对抗样本。词 wi 在句子 X=w1w2wiwd 中的显著度定义如下

S(X,wi)=P(ytrue|X)P(ytrue|X^)

其中 X^=w1w2[UNK]wd 为在句子 X=w1w2wiwd 中将词 wi 替换为一个特殊的token [UNK] 得到的句子(这个token也可以是任何不在要攻击模型(的tokenizer)的词汇表中的词)。对于每个句子 X ,可以通过这种方式得到它的词显著度向量 S(X)=(S(w1),,S(wd))。 要注意的是 PWWS 算法中使用词显著度(Saliency)与 TextFooler算法 中使用的的词重要度(Importance)的异同之处。 PWWS 算法的流程如下

  1. 对于待攻击的句子 X=w1w2wiwd 中的每个词 wi ,计算其显著度 S(X,wi) 。同时,从 WordNet 中选取它的近义词集合 Li 。若 wi 是专名,则从集合 NEadv 中选出与其词性相同的词,并入 Li 中。 NEadv 为数据集中预测正确句子中出现过的专名组成集合,在词汇表中所有专名集合中的补集。(一般这条比较难实现,在代码实现中并未考虑添加 NEadv )。通过如下的公式从集合 Li 中取出词 wi 的替换词 wi

    wi=R(wi,Li)=argmaxwiLi{P(ytrue|X)P(ytrue|Xi)}

    其中 Xi=w1w2wiwd 。这样可以得到对抗样本 Xi=w1w2wiwd ,并令

    ΔPi=P(ytrue|X)P(ytrue|Xi)
  2. 将词 w1,w2,,wd 按如下定义的分数从高到低排序

    H(X,Xi,wi)=operatornameSoftmax(S(X))iΔPi

    其中 S(X) 为之前定义的句子 X 的词显著度向量。之后开始执行如下的贪婪搜索(greedy search)。从 i=1 开始,用排好序的前 i 个词用第1步中找到的替换词进行替换,得到句子 X(i) ,直到被攻击模型在 X(i) 上产生分类错误,从而得到对抗样本。若遍历给定可进行替换词数量上界仍没有造成模型分类错误,那么攻击失败,获取对抗样本失败。

参数说明

2.4. BAE算法 4

算法介绍

BAE 算法全称是BERT-Based Adversarial Examples,是一种词级别的黑盒攻击算法,主要针对的是文本分类模型。BAE 算法产生对抗样本的方法主要是利用掩码语言模型(masked language model, MLM, 例如 BERT )产生备选词,插入被对抗样本,或者替换被对抗样本中的词。BAE 算法具体流程如下:

  1. 计算句子 X=w1w2wd 中每个词的重要度(Importance),并按降序排列。词重要度的计算方法与 TextFooler算法 中的词重要度计算方法一致。

  2. 初始化对抗样本为 Xadv=X 。执行如下的贪婪搜索(greedy search)。从 i=1 开始,依次取词重要度排名第 i (这里为了记号方便,仍然记为 wi),利用掩码语言模型,计算如下带掩码的句子

    Xadv[1:i1][Mask]Xadv[i+1:d]或者Xadv[1:i][Mask]Xadv[i+1:d]

    [Mask] 处概率排名前 k 的词,替换 [Mask] ,得到备选对抗样本的集合,记为 L[i] 。这里的 Xadv[1:i1] 为 当前对抗样本 Xadv 在词 wi 之前的词组成的序列,其他记号的意义依此类推。上式的前一种模式被称作词替换模式,后一种模式被称作词插入模式。在生成备选对抗样本的时候,两种模式可以采用二者中的一种,或者混用。对于备选对抗样本的集合 L[i] ,进一步使用 Universal Sentence Encoder 计算与原句子 X 的语义相似度,筛选出相似度高于预设阈值的备选对抗样本。如果是替换模式,则需要额外检查替换词与被替换词的词性,剔除词性不一致的替换词对应的备选对抗样本。

  3. 检查备选对抗样本的集合 L[i] ,看其中的句子能否使模型产生分类错误。如果有,则取其中与原句子语义相似度最高的作为最终产生的对抗样本,并结束循环。若 L[i] 所有备选对抗样本都不能使模型产生分类错误,那么取其中使得模型正确分类概率最低的作为 Xadv ,进入下一循环。直到产生使模型分类错误的对抗样本,或者遍历所有词后扔不能生成产生使模型分类错误的对抗样本,获取对抗样本失败。

参数说明

  1. max_candidates: 单次搜索(使用掩码语言模型)产生的待选对抗样本数目上限

  2. use_threshold: 有效对抗样本与原样本的句嵌入(使用 Universal Sentence Encoder)向量的最小余弦距离

2.5. BERT-Attack算法 5

算法介绍

BERT-Attack 算法与 BAE算法 算法原理与流程类似,以下仅列出不同点:

  1. BERT-Attack 算法的词重要度的计算方法与 PWWS 算法的词显著度计算方法一致,即将要计算的词用特定的token进行替换;而 BAE 算法则是与 TextFooler 算法一致,将要计算的词删除。

  2. 生成备选对抗样本集合的方式不同。 BERT-Attack 算法并不像 BAE 算法那样对原句进行掩码的操作,而是对使用字节对编码(Bytes-Pair-Encoding, BPE)之后得到的token序列进行掩码,通过掩码语言模型 BERT 获取这些token的替换列表。这些token可能是词,也可能是子词(sub-word)。当某个token不是词的时候,需要将这个token所在词覆盖的token的替换列表进行组合,对这些组合进行编码逆操作获取词的替换词,并按混乱度(perplexity,由 BERT 获取)倒排。

参数说明

  1. max_candidates: 单次搜索(使用掩码语言模型)产生的待选对抗样本数目上限

  2. use_threshold: 有效对抗样本与原样本的句嵌入(使用 Universal Sentence Encoder)向量的最小余弦距离

  3. max_perturb_percent: 词替换比例最高值,一个有效的对抗样本相较原句子中词被替换的比例不能超过这个值

2.6. DeepWordBug算法 6

算法介绍

DeepWordBug 算法是字符级别的黑盒攻击算法。 DeepWordBug 算法利用类似 TextFooler算法 中的方法,计算句子中每个词的重要度,按此排序之后进行贪婪搜索。由于 DeepWordBug 算法是字符级别的攻击算法,其产生替换词的方法有如下几种

  1. 词中相邻字符交换

  2. 随机往词中插入字符

  3. 随机删除词中字符

  4. 随机替换词中字符

参数说明

  1. use_all_transformations: 布尔值的参数,如果置为真(True),则使用所有4种产生替换词的方法;否则仅使用最后一种产生替换词的方法,即随机替换词中字符。

  2. max_edit_distance: 有效对抗样本与原样本的编辑距离最大值

2.7. FD算法 7

算法介绍

FD 算法是一种词级别的白盒攻击算法。其对于一个被攻击样本(句子)中的词进行随机的选取与替换,产生新的备选的对抗样本。FD 算法产生替换词的方法结合了基于词嵌入模型的方法与基于被攻击模型梯度的方法。具体来说,该算法首先利用词嵌入模型,例如 CounterFittedEmbeddingChineseWord2Vec 等,产生最近邻的一些替换词,在利用被攻击模型的梯度信息,在这些词中筛选使得下式极小化的词

argminwsign(Emb(X[i])Emb(w))sign(JF(X)[i])1

其中 X 为被攻击样本, X 为当前备选对抗样本, Emb 是被攻击模型的词嵌入层(不是第一步产生初步备选词的词嵌入模型), JF(X)[i] 是梯度信息, 1 为1-范数。

参数说明

  1. top_n: 单次搜索,最终产生的备选替换词数目

2.8. PSO算法 8

算法介绍

PSO 算法是一种词级别的黑盒攻击算法,得名自其采用的搜索对抗样本的方法,即粒子群算法(Particle Swarm Optimization)。粒子群算法与遗传算法都属于进化算法这一大类。在 PSO 算法中,每一迭代轮次的样本全体被称作一个群(swarm),一个样本被称作一个粒子(particle),每个粒子对应的词序列被称作搜索空间中的一个位置(position)。

PSO 算法的另一个创新之处在于,它的词替换方法,又称变异(mutation)操作为,利用知识图谱 HowNet 中义素(sememes)相同的词进行词替换。

PSO 算法具体流程如下:

  1. 初始化(Initialize):对被攻击样本(句子) X=w1w2wD 随机替换一个词,生成 N 新的样本,并给每个新样本随机赋予一个初始速度(velocity),以此为第一代开始进行循环迭代。初始速度为一个 D 维向量,其元素取值范围为 (Vmax,Vmax) ,代表的是对应位置的词被新词替换的概率。

  2. 记录(Record):每一迭代轮次完成之后,单个粒子都记录一次个体最佳位置(individual best position),对应于该粒子达到的优化目标函数的最高值(例如被攻击模型正确预测概率的相反数);同时记录整个群的整体最佳位置(global best position)。

  3. 更新(Update):在每一轮迭代中,按下式更新(第 n 个粒子)的速度向量

    vdn=wvdn+(1w)×[I(pdn,xdn)+I(pdg,xdn)],d=1,,D

    其中 xn 为粒子 n 当前位置; pn 为粒子 n 的个体最佳位置; pg 为整体最佳位置; w 为惯性权重(inertia weight),按如下方式更新

    w=(wmaxwmin)×TtT+wmin,0<wmin<wmax<1

    其中 T 为迭代总轮数, t 为当前轮数; I(a,b) 为如下定义的函数

    I(a,b)={1,a=b1,ab

    粒子 n 的更新按如下方式进行:首先,按概率

    Pi=PmaxtT×(PmaxPmin),0<Pmin<Pmax<1

    确定是否向个体最佳位置移动。若移动,则依概率向量 sigmoid(v1n,,vDn) 向个体最佳位置移动,即第 d 个词以概率 sigmoid(vdn) 替换为个体最佳位置的第 d 个词。接下来按概率

    Pg=Pmin+tT×(PmaxPmin)

    确定是否向整体最佳位置移动。若移动,则同样依概率向量 sigmoid(v1n,,vDn) 向整体最佳位置移动。完成移动之后,每个粒子以概率

    Pm(xn)=max(0,1kE(xn,x0)D)

    进行变异操作。更新(Update)全部完成之后,返回第二部进行记录(Record)操作,即记录此时的所有个体最佳位置以及整体最佳位置。

  4. 终止(Terminate)条件为:整体最佳位置对应的优化目标达到,例如被攻击模型分类错误。

参数说明

  1. max_candidates: 单次搜索(使用词嵌入模型)产生的待选对抗样本数目上限

  2. max_iters: 遗传算法迭代最大次数

  3. pop_size: 遗传算法每一代个体(备选对抗样本)的数目上限

2.9. TextBugger算法 9

算法介绍

TextBugger 算法是一种字符级别与词级别混合的攻击算法,可以进行黑盒攻击也可以进行白盒攻击。

TextBugger 算法的白盒攻击方法如下:对于样本 (X,y) ,其中 X=w1w2wd 为句子,y 为其分类标签。通过如下的偏导数计算其中每个词:math:w_i 的重要度(Importance)

Cwi=Fy(X)wi

其中 F 为被攻击的分类模型, Fy 为该模型分类为 y 的概率。对句子中的词按如此定义的重要度重排之后,按顺序进行贪婪搜索。

TextBugger 算法的黑盒攻击方法与 TextFooler算法 的原理类似,也是采取删除词的方法计算该词在句子中的重要度,将词按重要度排序之后,按顺序进行贪婪搜索。

TextBugger 算法在字符级别生成新的备选对抗样本的方法有

  1. 词中相邻字符交换

  2. 随机往词中插入字符

  3. 随机删除词中字符

  4. 同形字符(homoglyph)替换

TextBugger 算法在词级别生成新的备选对抗样本的方法与 FD算法 等类似,使用词嵌入模型,寻找嵌入向量距离最近的替换词进行词替换,从而得到备选对抗样本。

参数说明

  1. max_candidates: 使用词嵌入模型产生的待选对抗样本数目上限

  2. use_threshold: 有效对抗样本与原样本的句嵌入(使用 Universal Sentence Encoder)向量的最小余弦距离

2.10. VIPPER算法 10

算法介绍

VIPPER 算法全称是 VIsual PERturber,是一种字符级别的黑盒攻击方法。该算法按照被攻击样本(句子)中词的顺序,对词中字符进行替换生成新的备选对抗样本,并执行贪婪搜索。VIPPER 算法生成新的备选对抗样本的方法有 1. 同形字符(homoglyph)替换 2. DCES(Description-based character embedding space)字符替换 其中第2种方法是 VIPPER 算法特有的方法。这种方法并不是通常的字符嵌入方法,而是根据 Unicode 11.0.0 final names list,依照字符描述的语义构建的临近字符(nearest neighbors)知识库。

参数说明

  1. use_eces: 这是一个布尔值的参数,若为真( True ),则使用同形字符替换方法,否则使用DCES字符替换方法

  2. dces_threshold: 每次生成新的对抗样本时,DCES方法产生备选新词数目的上限。这个参数仅当 use_eces 为假( False )时起作用。

2.11. A2T算法 11

算法介绍

A2T 算法全称是Attacking to Training,原本是为对抗训练(adversarial training)设计的方法,其核心部分是一套词级别的白盒对抗攻击算法。具体来说, A2T 算法依据被攻击样本中词的重要度,从低到高进行贪婪搜索。其中词的重要度计算方法是基于梯度的,与 TextBugger算法 的计算方法类似。对于替换词的选取, A2T 算法提供了2种可选的方法:

  1. 基于词嵌入模型,寻找嵌入向量相近的词作为替代词,具体参见 FD算法

  2. 基于掩码语言模型,将被替换词用掩码替换,用掩码语言模型对掩码的预测词作为替换词,具体参见 BAE算法

A2T 算法的另一个创新之处是,用了进行了模型蒸馏的句嵌入模型来度量备选对抗样本与原样本的语义距离(句嵌入向量距离),极大降低了显存需求,加快了计算速度。

参数说明

  1. max_candidates: 单次搜索(使用词嵌入模型或掩码语言模型)产生的待选对抗样本数目上限

  2. min_cos_sim: 有效对抗样本与原样本进行的词替换的词嵌入向量的最小余弦距离

  3. use_threshold: 有效对抗样本与原样本的句嵌入向量的最小余弦距离

  4. max_modification_rate:词维度的编辑距离(被替换词比例)

  5. mlm:布尔值的参数,若为真,则使用掩码语言模型用于替换词的生成,否则使用词嵌入模型生成替换词

2.12. 参考文献

1

Jin D, Jin Z, Zhou J T, et al. Is bert really robust? a strong baseline for natural language attack on text classification and entailment[C]//Proceedings of the AAAI conference on artificial intelligence. 2020, 34(05): 8018-8025.

2

Ebrahimi J, Rao A, Lowd D, et al. HotFlip: White-Box Adversarial Examples for Text Classification[C]//Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers). 2018: 31-36.

3

Ren S, Deng Y, He K, et al. Generating natural language adversarial examples through probability weighted word saliency[C]//Proceedings of the 57th annual meeting of the association for computational linguistics. 2019: 1085-1097.

4

Garg S, Ramakrishnan G. BAE: BERT-based Adversarial Examples for Text Classification[C]//Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP). 2020: 6174-6181.

5

Li L, Ma R, Guo Q, et al. BERT-ATTACK: Adversarial Attack against BERT Using BERT[C]//Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP). 2020: 6193-6202.

6

Gao J, Lanchantin J, Soffa M L, et al. Black-box generation of adversarial text sequences to evade deep learning classifiers[C]//2018 IEEE Security and Privacy Workshops (SPW). IEEE, 2018: 50-56.

7

Papernot N, McDaniel P, Swami A, et al. Crafting adversarial input sequences for recurrent neural networks[C]//MILCOM 2016-2016 IEEE Military Communications Conference. IEEE, 2016: 49-54.

8

Zang Y, Qi F, Yang C, et al. Word-level Textual Adversarial Attacking as Combinatorial Optimization[C]//Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics. 2020: 6066-6080.

9

Li J, Ji S, Du T, et al. TextBugger: Generating Adversarial Text Against Real-world Applications[C]//26th Annual Network and Distributed System Security Symposium. 2019.

10

Eger S, Şahin G G, Rücklé A, et al. Text Processing Like Humans Do: Visually Attacking and Shielding NLP Systems[C]//Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers). 2019: 1634-1647.

11

Yoo J Y, Qi Y. Towards Improving Adversarial Training of NLP Models[J]. arXiv preprint arXiv:2109.00544, 2021.