• 论文阅读 | Is BERT Really Robust? A Strong Baseline for Natural Language Attack on Text Classification and Entailment


    参考:NLP重铸篇之对抗文本攻击

    [ 论文源码: github ]

    作者提出了一种对抗样本生成算法TEXTFOOLER。

    论文中,作者使用这种方法,对文本分类与文本蕴含两种任务做了测试,成功的攻击了这两种任务的相关模型,包括:BERT,CNN,LSTM,ESIM等等。

    问题定义

    一个有效的样本:和原样本近似。

    给定文本x,以及训练好的模型F,F(x)=y,一个有效的对抗样本要满足:

    其中是相似度函数,值域在[0,1],是最小相似度阈值。

     

    TEXTFOOLER

    论文的设定是黑盒模型,也就是说不知道模型的结构、参数、训练数据,能够知道的就是,输入文本给模型然后得到输出标签以及相关置信度得分。
    论文中生成对抗样本主要包含两个步骤:词语重要性排序,词语转换

     

     

    因为是黑盒,作者通过这种方式来算重要性。其中,Xwi = {w1, . . . , wi−1, wi+1, . . . wn},  就是去掉wi这个词,观察去掉wi前后的分数置信度的变化程度

    在过滤停用词时,去掉了the when more这种,使用的是NLTK2 和 spaCy3 库。

    词语转换

    论文作者认为,一个好的词语转换机制需要满足3个条件:

    跟原词有相近的语义,

    跟上下文比较融洽,

    能让模型做出错误的预测。

    同义词提取:论文作者根据【1】中的词向量,获取所有跟词wi最接近的N个且consine相似度大于一个阈值的词,以此作为候选词。N与阈值的大小都会影响到候选词的数量,论文实验中,将N设置为50,阈值设置为0.7。

    词性检查:在候选词中,只保留与wi词性相同的词。

    语义相似度检查:使用候选词中每个词替换原词wi,得到对抗样本x adv,论文使用UES【2】将句子编码向量化,然后计算与原句子向量之间的consine相似度,如果相似度大于阈值,则保留这个候选词。

    获取对抗样本:如果还有候选词,且存在候选词改动后的样本使得模型预测标签与原标签不一致,那么选择语义相似度最大的一个词生成对抗样本;否则,我们选择一个词,其改变之后让模型对原标签的置信度最低,将原词替换为此词,并根据重要性排序选择下一个词重复第二步(词语转换)。

     根据算法生成的对抗样本示例:

     语义相似度还是挺高的。

    实验

    实验选择了两种文本任务:文本分类,文本蕴含,使用的相关数据集为:

    实验中分别为两个任务选择了三个模型,模型的原始准确率如下:

     

    结果

    其中Original Accuracy表示原测试集准确性,After-Attack Accuracy表示对抗样本的准确性,% Perturbed Words表示对抗样本与原样本相比扰动的比例,Semantic Similarity表示对抗样本与原样本的相似度,Query Number表示使用模型F的次数(论文中未明确说明),m/mm中m表示匹配mm表示不匹配。
    论文中结论显示,成功地攻击了两种文本任务,使用低于20%的扰动率,将模型的准确率降低到15%以下;且观察到一个简单结果:模型的准确率越高,就越难被攻击。

    降低了好多。

    人工评价:

    论文作者随机抽取了MR与SNLI个100个对抗样本,进行人工评价(1-5分),结果表明对抗样本与原样本在语法上相近,绝大部分情况都有相同的属性,且他们之间的感知差异较小。

    讨论分析

    可迁移性

    论文作者使用一个模型生成的对抗样本去测试另外一个模型,结果表明这样生成的样本也会使其他模型一定程度上降低准确性。

    对抗训练

    论文中使用生成的对抗样本与原训练集一起重新训练模型,结果表明新得到的模型比原模型更难收到攻击,具有更好的鲁棒性。

    错误分析

    论文作者认为,他们的对抗样本容易收到三种类型的错误影响:词义歧义,语法错误,任务敏感的内容变换。

    总结

    在黑盒模型的情况下,以及在文本分类和文本蕴含任务中,该论文成功进行了对当前最优的模型的对抗攻击。实验表明,该论文提出的TEXTFOOLER方法能够生成有效的对抗样本,并且大部分都是人类易读的,且语法与语义上与原文本相似。

    论文之外

    在实际工作中,使用bert类模型做中文文本分类与文本蕴含任务的时候,也遇到了模型鲁棒性的问题,增加或删除一个字词,甚至只是一个标点符号,都可能会改变模型最终结果,这种修改导致模型结果不一致的可能性大概在3-4%(作者的任务中)。反过来说,如果解决这种及其微小扰动的鲁棒性问题,是不是直接可以提升模型准确率3-4个点?

    论文也给了代码,感觉很棒棒,之后想用在比赛中的对抗训练中试一试!

  • 相关阅读:
    C# 操作XML
    js把字符串(yyyymmdd)格式转换成日期格式(yyyy-mm-dd)
    解析GZIP压缩的网页
    访问修饰符
    c# 多态中 Virtual与override的作用
    C# 中 ref 和out 的区别
    C# .net 中文手册地址
    js获取URL参数
    几种Css前端框架资料
    android 检查能否上网
  • 原文地址:https://www.cnblogs.com/shona/p/13037406.html
Copyright © 2020-2023  润新知