安全AI挑战者计划第三期 - 文本分类对抗攻击——No.4 F-LAB-sparrow组 比赛攻略/开源代码

阿里清华联合天池算法比赛传送链接
官方论坛本文链接

1. 提交的部分对抗样本

原始文本: (以下为辱骂场景内容,少儿不宜)
安全AI挑战者计划第三期 - 文本分类对抗攻击——No.4 F-LAB-sparrow组 比赛攻略/开源代码
生成对抗文本:
安全AI挑战者计划第三期 - 文本分类对抗攻击——No.4 F-LAB-sparrow组 比赛攻略/开源代码

2. 比赛思路

本次比赛为在黑盒场景下的中文文本对抗攻击,应用场景为中文脏话分类,比赛对于生成的对抗样本有以下两个要求:被后台模型识别出错; 不影响人类识别。
我们要攻击的黑盒模型数量未知,算法未知。评测标准非常强悍,不但在评判得分时,设有四种相似度的距离度量用于评判攻击样本的得分, 而且设有新词挖掘机制,使得我们在设计算法时需要最小化对原文本的扰动。
在构建英文文本对抗样本论文中,生成对抗样本的方法有交换(交换单词中相邻两个字母。如:text→txet)、删除(删除原单词中某个字母。如:text→tet)、替换(选取在键盘上接近的字母来替换原文本中某个字母)、添加(在单词中随机位置添加其他字母)[1][2]。
因此,我们基于主办方提供的简易模型,参考了上述对英文文本生成对抗样本的方法,以及中文领域的对抗样本文献[3],在本次比赛中借鉴了构建英文文本对抗样本中的替换和添加的思想,并对其进行修改以便应用于中文文本。从以下三个方面(敏感词破坏、敏感词替换和敏感词剔除) 考虑设计了攻击算法,并取得了线上第五名的成绩。经过人工审核,辱骂性质保留的较好,最终获得了本次比赛的第四名。

3. 具体算法和攻击流程

a)整体方案思路

为了保证攻击后的语义完整性,我们不使用敏感词删除方法,因此我们的算法主要分为两部分,分别是基于数字的敏感词破坏基于同音同义词的敏感词替换
我们采用基于敏感词破坏的思路主要考虑到以下两点:中文词汇经常出现词语(由两个字或两个字以上组成),通过使用插入数字的方法即可对词语进行破坏,影响文本的预处理过程;目前大部分文本分类使用的都是 RNN 模型,考虑上下文的影响,在上下文插入一些不相关的字符,可能对模型的正确识别会产生影响。
同时考虑到,一段文本被划分为辱骂样本,那么该文本中必定存在对应的辱骂特征,如果可以将辱骂特征进行更改,那么一定可以降低模型的准确识别率。

b)基于数字的敏感词破坏

在文本中添加一些字符,类似与图像对抗中随机添加噪声扰动,这样做不仅不会影响辱骂文本的原本语义,还很有可能使得防御模型对其分类错误。敏感词破坏优先破坏中文的词,通过破坏直接影响其通过预处理函数(官方已给出)得到的结果,同时考虑到上下文的影响,故在某些字、词的上下文同样插入破坏字符。
一段原始文本进过预处理之后可表示为 X = { …, [ xk1,…,xkm] ,… },k 为最后预处理后的第 k 的词,m 为第 k 个词中含有的字符数。首先仅对文本这种的词语进行特殊字符破坏,假设特殊字符为 a,对抗样本可表示为 X’ = { …, [ xk1,a,…,a,xkm] ,… },接着对上下文进行无差别破坏(每两个字中都插入特殊字符),对抗样本表示为 X’’ = { …,a, [xk1,a,…,a,xkm] ,a,… } 。
结合真实样本“你这个大傻逼。最后处理成“ 你 a 这 a 个 a 大 a 傻a 逼 ”

c)基于敏感词的同音字替换

对文本进行替换也是文本对抗中的常见手法,在各类攻击算法中都能见到其踪影。
英文场景下的对抗样本构造中,研究者会使用同义词或错别字对关键字词进行替换。比如句子中的’good’替换为’nice’或’decent’,这就是同义词替换;句子中的’good’替换为’god’或’goods’,这就是错别字替换。
但在中文场景下,特别是中文辱骂场景下很难实现,因为辱骂的词汇往往同义词比较少,而中文错别字更是几乎没有。我们结合中文词汇的特点:具有同音字,采用同音字对中文的关键字进行替代。具体的替代操作流程如下:

i.筛选被替换的字

我们使用主办方提供的简易模型对中文常用汉字大约 7200 个进行了预测输出,按照辱骂标签的置信度从大到小对常用汉字进行排序。
显然,我们会把辱骂性质置信度较大的字优先进行替换。

ii.选择需要替换的字

每个汉字都有多个同音字,但是不同的同音字在本次比赛规则下距离不同。所以首先选取 5 个与需要替换字的同音字,接着按照以下公式计算,得分最高的即为替换的字。
 (P(A)P(Ai))αSiβ \ {(P(A)-P(A_i))}^{\alpha}{S_i}^{\beta}\,
其中 A 为被替换的汉字,Ai为第 i 个同音字。P(A)为字符输出的辱骂置信度。Si是根据主办方提供的评分规则计算得到的分数,用于评估 A 与Ai的相似度,相似度越近,得分越高。α、β 为超参数,可自行调整。
以上公式同时考虑降低替换后的置信度和最大化两个字之间的距离。通过筛选得到以下替换规则:傻→沙逼→必狗→购操→曹婊→镖

d)最终实现方案

i.使用特殊字符对原始文本进行切割破坏,经过测试验证,使用数字 3 对原始文本镜像切割破坏得到的分数最高;
ii.在使用数字 3 切割的前提下,对敏感字进行替换,经过测试验证, “逼→必”和“傻→沙”可以使分数明显上升(有限次测试得出);
iii.因为要保持在一个较好成绩下的最小化更改,所以我们团队只采取单字替换,并且在替换时,采用随机选择需要被替换的字,对于每一个字根据分数赋予相应的权重,同时对选中的汉字仍然进行一次随机处理,当大于某一个阈值时才进行替换;根据测试,最后得到在使用数字 3 对文本进行完全切割的前提下,仅选择“逼→必”的替换规则,并且是全文本进行替换,得到最高分 348.0354,其余随机结果得到的分数在 347 上下徘徊。

4. 代码分享

5. 团队简介

F-LAB-sparrow团队

6. 参考引用

[1]Belinkov Y, Glass J. Analysis Methods in Neural Language Processing: A Survey[J].Transactions of the Association for Computational Linguistics, 2019: 49-72.

[2]Pruthi D, Dhingra B, Lipton Z C, et al. Combating Adversarial Misspellings with Robust Word Recognition[C]. meeting of the association for computational linguistics, 2019: 5582-5591.

[3]王文琦, 汪润, 王丽娜, et al. 面向中文文本倾向性分类的对抗样本生成方法[J]. 软件学报, 2019(8).