论文笔记:Learning to Discriminator Perturbations for Blocking Adversarial Attacks in Text Classification(在文本分类中学习辨别扰动阻止对抗攻击)
文章简要介绍
1.出处:EMNLP 2019
2.解决的问题:可以用于任何NLP任务,在不修改模型结构、训练过程的情况下,对字符级、词级的对抗攻击进行防御
3.思路:利用BERT,用一个扰动判别器识别文本中的token是否被扰动,再用嵌入估计器根据上下文恢复被扰动token的词嵌入,用KNN搜索选择替换的token。
引言
在这篇文章中,提出了Learning to Discriminate Perturbations (DISP)这个框架,来防御NLP任务中的对抗攻击。这种防御框架不修改模型结构以及训练过程。DISP包含三个要素:扰动鉴别器,嵌入估计器,分层导航小世界图。
简单操作流程:一个被扰动的训练数据,首先用一个扰动鉴别器识别出被扰动的token,并放到集合C中。对于集合C中每个被扰动的token,用嵌入估计器找一个嵌入向量来表示它的语义。**嵌入估计器是用token-embedding数据集训练得来的。**最后,用层次分类法进行有效的KNN搜索,对每个嵌入向量找到合适的替换token。
主要贡献:
1.第一篇不用retrain模型的NLP对抗攻击防御
2.提出了一个新的框架:DISP,在两个benchmark数据集上的防御性能高于其他基线方法。
相关工作
拼写检查(spelling correction)和语法错误检查(grammar error correction)可以有效组织编辑类对抗攻击,比如:交换、插入等。但是这些方式不能处理没有导致拼写和语法错误的word-level攻击。提出的**DISP是一个可以阻止字符级和词级对抗攻击的通用框架。**
DISP框架详细介绍
扰动:一个token中字符的删除或插入,一个token的同义词替换等。
DISP框架图如下所示:
DISP流程概述:在训练阶段,在干净的训练集D上训练扰动判别器,训练集D是原始语料库的一部分。 在预测阶段,对于测试数据中的每一个token,用扰动判别器判断这个token是否被扰动。对于每个可能被扰动的token,嵌入估计器生成一个近似的嵌入向量,然后在嵌入空间中找到和这个近似向量最近的向量,用对应的token来替代被扰动的token。最后,被恢复的测试数据可以用于预测。需要注意的是,这里的预测模型可以是任何NLP模型。DISP是一个防御文本对抗攻击的通用框架,对于判别器和估计器的模型选择也是灵活的。
Perturbation Discriminator扰动鉴别器
对
于
输
入
x
a
中
的
t
i
,
基
于
它
的
相
邻
t
o
k
e
n
来
判
断
t
i
是
否
受
到
扰
动
。
在
这
里
用
基
于
上
下
文
表
示
的
模
型
(
B
E
R
T
)
实
现
。
对于输入x_a中的t_i,基于它的相邻token来判断t_i是否受到扰动。在这里用基于上下文表示的模型(BERT)实现。
对于输入xa中的ti,基于它的相邻token来判断ti是否受到扰动。在这里用基于上下文表示的模型(BERT)实现。
输 入 的 每 个 t o k e n , 即 t i , 先 转 换 成 嵌 入 向 量 E i 后 , 经 过 上 下 文 表 示 编 码 器 转 换 成 d 维 上 下 文 表 示 向 量 T i D 输入的每个token,即t_i,先转换成嵌入向量E_i后,经过上下文表示编码器转换成d维上下文表示向量{T_i}^D 输入的每个token,即ti,先转换成嵌入向量Ei后,经过上下文表示编码器转换成d维上下文表示向量TiD
将生成的上下文表示向量经过一个二元逻辑分类器,判别对应的token是否被扰动,公式如下:
r
i
=
a
r
g
max
c
y
i
C
=
a
r
g
max
c
(
ω
c
⋅
T
i
D
+
b
c
)
r_i=arg\,\max_{c}{y_i}^C=arg\,\max_{c}(\omega_c\cdot{T_i}^D+b_c)
ri=argcmaxyiC=argcmax(ωc⋅TiD+bc)
扰
动
鉴
别
器
会
生
成
一
个
可
能
被
扰
动
的
t
o
k
e
n
的
集
合
R
,
R
=
t
i
∣
r
i
=
1
扰动鉴别器会生成一个可能被扰动的token的集合R,R={t_i|r_i=1}
扰动鉴别器会生成一个可能被扰动的token的集合R,R=ti∣ri=1
用嵌入估计进行有效的token恢复
假设:用一个与原始单词有相似含义的单词替换被扰动的词,这种做法可以让模型做出正确的预测。
DISP首先用基于上下文token的嵌入估计器为潜在扰动预测用于恢复的token的嵌入。之后,在token–embedding语料 库中用KNN搜索适当的恢复令牌。
嵌入估计器Embedding Estimator
用基于上下文的语言模型实现。如上图所示,对每个token
t
i
t_i
ti,转换成对应的嵌入向量
T
i
G
{T_i}^G
TiG后,作为嵌入估计器的输入。对于每个潜在扰动
t
i
∈
t_i\in
ti∈R,当选择窗口大小为
ω
\omega
ω的时候,选择2
ω
\omega
ω的相邻token作为上下文来估计近似嵌入向量。详细的说,就是当token
t
i
t_i
ti用【MASK】替代来表示这里是被扰动的token,从
t
i
−
w
t_i-w
ti−w到
t
i
+
w
t_i+w
ti+w的
2
w
+
1
2w+1
2w+1个token作为BERT的输入。
有效的token-level恢复
对于被扰动的文本
X
a
X_a
Xa用近似嵌入对应的token来进行恢复。一个token–embedding语料库,先在嵌入空间中找到和估计的近似嵌入邻近的嵌入向量,然后转换成对应的token,用这个找到的token 进行替换。
为了加速搜索过程,这里使用了分层导航小世界图(hierarchical navigable small world graphs, SWGS)进行快速近似KNN搜索。SWGS基于不同嵌入向量之间的相似性,将嵌入转换成一组SWGS。
算法如下所示:
学习&优化
为了得到鲁棒性较好的判别器,在每个training epoch中随机采样字符级和词级的对抗样本。损失函数优化使用交叉熵损失函数。判别器在分类时经过二元逻辑回归后,得到对应的概率,后接softmax函数。
训练嵌入估计器的过程类似于BERT的masked language model预训练任务。不同之处在于,masked language model是为了优化生成相同原始token的可能性,嵌入估计器是为了减少估计的嵌入向量和原始token的嵌入向量之间的距离。为了学习嵌入估计器,应用一个
(
2
ω
+
1
)
(2\omega+1)
(2ω+1)的滑动窗口来枚举
(
2
ω
+
1
)
(2\omega+1)
(2ω+1)-gram训练数据。
实验
1.数据集:SST-2,IMDB
2.攻击生成:3种字符级攻击和2种词级攻击
字符级攻击:插入、删除、交换。交换是翻转两个相邻的字符。
词级攻击:random,embed。random:随机选择一个词去替换目标词。embed:在词嵌入空间中,找到和目标词邻近的top_10个词进行替换。
为了获得有效的对抗样本。对每个测试文本,通过攻击生成50个对抗样本。从这50个对抗样本中,选取可以改变模型预测结果的样本,然后从中抽取一个样本。如果一个测试样本的50个对抗样本都不能让模型预测出错,选择这50个中在原始类别下概率最低的那个样本。
3.基线模型 :BERT
为了评估DISP的性能,用一下几种方法作为baseline:(1)对抗数据增强(ADA,Adversarial Data Augmentation):用对抗样本增加训练数据的多样性(2)对抗训练:在每个training epoch中添加对抗样本(3)拼写检查:作为扰动判别器和防御字符级攻击的基线算法
Note:对抗数据增强和对抗训练都需要用增强数据重新训练BERT,DISP和拼写检查在文本进入模型前进行修改。
4.评估指标:precision,recall,F1分数
True Positive(TP):将正预测为正
True Negativa(TN):将正预测为负
False Positive(FP):将负类预测为正类
False Negative(FN):将负类预测为负类
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision = \frac {TP}{TP+FP}
Precision=TP+FPTP
R
e
c
a
l
l
=
T
P
T
P
+
F
N
Recall = \frac {TP}{TP+FN}
Recall=TP+FNTP
F
1
=
2
∗
P
r
e
∗
R
e
c
P
r
e
+
R
e
c
F_1 = \frac {2*Pre*Rec}{Pre+Rec}
F1=Pre+Rec2∗Pre∗Rec=
2
T
P
2
T
P
+
F
P
+
F
N
\frac {2TP}{2TP+FP+FN}
2TP+FP+FN2TP
5.参数设置:在嵌入估计器那里,窗口参数
ω
\omega
ω设置为2。基线模型选择
B
E
R
T
b
a
s
e
BERT_{base}
BERTbase,transformer的块数为12,self-attention的头为12。
6.DISP在防御词级攻击时,防御random token攻击的性能要比防御embed token的性能要好。原因:原始token 的嵌入向量与随机token的嵌入向量之间的欧氏距离要明显大于,原始token embedding与其他token embedding之间的欧式距离。
7.DISP在长文本(IMDB)上有较稳定的防御性能,即字符级攻击防御和词级攻击防御的性能差距不大。原因:长文本,BERT获得更多的上下文信息,有助于token 恢复。
8.DISP并不要求将所有被扰动的token都恢复成原始token,嵌入估计器在生成近似嵌入向量的时候对于获得原始语义有重要的作用。这里将嵌入估计器看做了一个回归问题,用RMSE(Root Mean Squared Error,均方根误差)进行评估。
存在的问题
1.看了实验部分后发现:DISP在鉴别扰动token时,短文本上(SST-2)的性能高于长文本(IMDB)。
2,DISP的性能依赖于上下文信息。当存在多个对抗词时,不正确的上下文会导致不满意的恢复token,这个是DISP一个缺点。