NLP将自然语言转化为可以被神经网络识别的过程大约分为三步:
1、将自然语言文本分解为分词(不一定是自然语言意义上的单词);
2、将分词转化为词向量;
3、将转化为词向量后的自然语言文本作为样本输入。
Unicode编码安全
目前通用的unicode编码中包含了一百多万个字符,在这些字符中,有许多字符对应的字形都是十分相似的。例如,ascii编码中的小写字母l与大写字母I肉眼很难识别。这种字形的相似性可以被攻击者利用,曾有攻击者利用域名paypaI.com(用大写I来伪装小写l)伪装成域名paypal.com骗取用户的账号密码。再比如pаypаl.com看起来和paypal.com一模一样,实际上这两个域名的字符不一样,第一个域名中的а其实是Cyrillic字母,而不是英文字母a。
此外在unicode编码中,有很多字符是不会被显示的,如下图中原文举出的例子,在正常的文本中加入此类字符,肉眼无法看出此类文本与正常文本有任何差异。
生成敌对文本
利用这些视觉上无法察觉的字符,我们就可能生成一些看起来没有问题的敌对文本。
上图中利用了Unicode中的删除字符<backspace>,红色方框中敌对样本输入了字符a,又使用删除字符删除了a的显示。
上图中敌对样本使用了相似字形替换的方式替换了原文本,字母j被替换为U+3F3,字母i被替换为U+456,字母h被替换为U+4BB。
上图中敌对样本在原文本中插入了零宽度的不可见字符。
上图中的敌对样本使用了重排序控制符来使攻击样本和原文本在显示上一致,但实际读取该字符串时只能读到无序的编码。
攻击样本生成
本文使用了差分进化(Differential Evolution)算法生成敌对样本,也没有特别说明这个算法比起其它算法的优异性,因此在此处不多做叙述。
结果
对于机器翻译、敏感内容检测、文本含义分析、命名识别、情感分析类的NLP模型,本文生成的样本均有效果,可以显著降低其模型性能、提高模型分析时间。
原文始发于微信公众号(COMPASS Lab):Bad Characters:Imperceptible NLP Attacks