丰色 发自 凹非寺
量子位 报道 | 公众号 QbitAI

Unicode码作为全世界文字的统一编码,使用范围广,用它去对NLP模型做对抗攻击,可谓中招一大片。

就比如下面这个谷歌翻译:

文字部分都没有啥问题,注意到账户数字4321翻译前后不一样吗?

为什么会发生这样的情况?

来看Unicode码是怎么捣的乱吧。

其实原句中就是1234,问题出现在左边:英文句子中数字前面插入了一个不可见的字符0x202E

这是一个可以把字符的文本方向倒转的Unicode码。

这样一来,左边的解析系统就会将该1234显示成4321。

而谷歌翻译引擎的机制是忽略Unicode码,也就是右边还显示原来的1234。

因此,两边就不一样了。

这个例子虽然没啥杀伤力,如果万一真有人将它用在了真实转账场景,后果会如何呢?

使用Unicode码对NLP模型进行对抗攻击

事实上,这种情况在真实场景中并不少见,通过在输入文本中插入一些看不见的Unicode码进行对抗攻击,就有可能骗过AI的语言处理系统去做一些“坏事”。

比如改账号、改收款人姓名、绕过评论审核发一些极端言论……

而且即使是微软、谷歌、IBM或Facebook这样的大公司开发的软件都可能会因为对Unicode码风险意识的缺乏,被一些精心设计的Unicode码骗过。

下面就来看一个发垃圾评论的例子:

“You are a coward and a fool” ,假如这样一个不友好的评论无法通过审核发出去,那么利用Unicode码,你只需这样加工一下:

You akU+8re aqU+8 AU+8coward and a fovU+8 JU+8ol.

也就是在一些字母中间加上一个多余的字母和U+8,就能让审核系统(The moderation system)忽略Unicode码、看到一串拼写错误的句子,从而将一些本不该出现的不友好评论放出来。

U+8:用于删除前一个字符的不可见Unicode字符。

这一招对谷歌的Perspective API和BMI的Toxic Content Classifier(两个语言审核系统)都有效。

再来一个同形文字的例子:

将“paypal”中第一个英文字母a换成西里尔字母a,尽管这俩人眼视觉上看起来是一样的,但Unicode码不同,谷歌俄语翻译最终就会将它翻译成 “папа”,也就是“爸爸”的意思。

这样一来,“有心之人”没准就能在有同样问题的AI程序中进行违规付款等操作。

如何防止此类情况的发生

来自英国剑桥大学和加拿大多伦多大学的研究人员发现了上述机器学习模型中对输入文本处理的这一问题,在今年6月发表的一篇论文中进行了阐述。

他们通过对包括微软谷歌旗下等在内的商业系统进行对抗攻击发现:

通过一次不可察觉的编码注入——比如一个不可见字符、同形符、重新排序或删除的操作字符——攻击者可以显著降低一些模型的性能,而经过三次注入,大多数模型都可能在功能上失灵。

利用视觉和逻辑表示之间的差异,仇恨言论、垃圾信息、损失财产的风险等操作会出现在任何机器学习用于自然语言处理的地方。

(当然,计算机视觉方面也早就出现过了一些类似原理的对抗攻击。比如下面这两个经过特殊处理的标志就会被自动驾驶系统认成限速标志。)

下图说明了文本可视化和NLP处理管道两者之间的差异是如何给对抗攻击留下可乘之机的:

一些NLP模型无法处理具有不同编码的控制序列或看起来相似的字母。

在具体过程中,NLP管道会将文本token化之后注释掉它不认识的token,这一步差异也就是造成问题出现的主要原因。

那面对自然语言模型的被对抗攻击,又该如何处理呢?

研究人员提出了一些见解:

要么处理输入时完全过滤掉特殊的Unicode字符

要么将Unicode传递给神经网络之前将其传递给解析器*(如果可行的话)*,这样才能保证用户看到的和神经网络处理的是同一个东西。

像那种从英文字母到西里尔字母的变化就更应该被严加注意。

相关论文:
https://arxiv.org/abs/2106.09898

参考链接:
https://forums.theregister.com/forum/all/2021/08/06/unicode_ai_bug/

看不见的Unicode码让敏感词轻松逃过审核,谷歌IBM都中招相关推荐

  1. 编写敏感词过滤程序 说明:在网络程序中,如聊天室、聊天软件等,经常需要对一些用户所提交的聊天内容中的敏感性词语进行过滤。 如“性”、“色情”、“爆炸”、“恐怖”、“枪”、“军火”等,这些都不可以在网

    编写敏感词过滤程序 说明:在网络程序中,如聊天室.聊天软件等,经常需要对一些用户所提交的聊天内容中的敏感性词语进行过滤. 如"性"."色情"."爆炸& ...

  2. php去掉excel看不见的空格,如何批量去除Excel中无法看不见的空格?

    Excel技巧:如何批量去除Excel中无法看不见的空格? 场景:企业人事.财务.市场部等需要数据整理的办公人士. 问题:如何批量去除Excel中无法看不见的空格? 解答:利用替换和专门"清 ...

  3. 如何从视频聊天软件源码下手,解决敏感词屏蔽问题

    视频聊天平台鱼龙混杂,用户素质良莠不齐,时常会出现用户名中出现的不雅字符.聊天室内出现不和谐文字的情况,因此在用户每次发言时,视频聊天软件源码都会自动对其文字进行验证,通过匹配"脏字库&qu ...

  4. 敏感词过滤的php代码,php实现敏感词过滤(Trie树)

    灵感来自于 [嘉兴ing](https://segmentfault.com/a/1190000019137933 "Trie树 php 实现敏感词过滤") 感谢分享. 本文主要是 ...

  5. 很全的敏感词匹配系统的设计与实践

    作者:vivo互联网服务器团队-Liang Kangwu 一.前言 谛听系统是vivo的内容审核平台,保障了vivo各互联网产品持续健康的发展.谛听支持审核多种内容类型,但日常主要审核的内容是文本,下 ...

  6. 深度原创丨揭开工业互联网看不见的手:从MindSphere+Mendix谈起

    关注ITValue,看企业级最新鲜.最具价值报道! 通过分析西门子" MindSphere + Mendix"布局,文章认为要透过看得见的集成平台,洞察工业应用软件,透过" ...

  7. 游戏敏感词屏蔽词过滤

    游戏和网站,都需要敏感词(屏蔽词)过滤,你懂的.而且敏感词库不断的增长,从十几年前的3000多词,已经增长到14000以上(各渠道获取的词库略有不同). 这1万多词的扫描处理,开销的性能就有点客观了. ...

  8. 对敏感词过滤(DFA算法)的思考与理解

    对敏感词过滤的思考与理解 一.技术概述 1.这个技术是干什么用的? 2.学习这个技术的原因 3.技术的难点在哪 二.技术详述 1.流程图 2.代码 三.技术过程中遇见的问题和解决过程 四.总结 五.参 ...

  9. 自媒体敏感词大全_让新媒体小编头疼的敏感词与错别字

    ​作为一个新媒体人,不知道小伙伴们对待错别字和敏感词持有什么样的态度呢? -来自新人的目光 蚊子算是看明白了,错别字和敏感词所引发的问题,小则扣"鸡腿"大则掉"饭碗&qu ...

最新文章

  1. 写一个操作系统有多难?自制 os 极简教程
  2. select、poll、poll的比较(转)
  3. 重构学习1-重命名方法、类、参数等
  4. Java中的访问限制符
  5. 【转】GigE Vision简介
  6. ipcfg报错_ipcplwhl.dll
  7. html语言代码游戏,常用html语言代码
  8. 假设linux分配给u盘设备名是,嵌入式linux开发基础试卷-应用物理A答案
  9. 使用MybatisPlus在实体中添加数据库表中不存在的字段
  10. 攻防世界逆向——key
  11. hadoop Configured Configrable Configuration Tool 源码详解
  12. UVA 11624 BFS
  13. SQL四种方法实现行列转换超详细
  14. 从Master到百度《最强大脑》人机大战:AI成坊间话题意味着什么?
  15. 算法在身边——学习算法从妈妈的菜谱开始
  16. 互联网电商大数据架构图
  17. 程序员装b指南(转)
  18. PostMan测试接口,出现415报错,Unsupported Media Type
  19. C++ Primer 读书笔记及知识点延伸 chapter2
  20. 揭秘三端型肖特基二极管检测好坏的方法

热门文章

  1. springboot获取getBean方法以及ApplicationContext空指针问题解决
  2. 如何检查字符串是否包含特定单词?
  3. 检查字符串是否为有效URL的最佳正则表达式是什么?
  4. 掘金Markdown使用
  5. CSS + DIV 让页脚始终底部
  6. PL/SQL学习笔记-过程
  7. jquery php 异步图片上传实例,php结合jquery异步上传图片(ajaxSubmit)
  8. 关于Oracle数据库19c中的关键字和保留字的说明
  9. 负载均衡探测器lbd
  10. Swift3.0语言教程使用Unicode范式标准化获取字符串