第三期安全AI挑战者计划-文本对抗赛后总结

第三期安全AI挑战者计划-文本对抗赛后总结

首页休闲益智成语挑战者更新时间:2024-10-22

简介

赛题:第三期安全AI挑战者计划-文本对抗

队名:我永远喜欢岩岩老婆

成员:学地理的祈酱

成绩:第七名

赛题分析

本次赛题设计背景为对脏话识别模型发起攻击,赛题中的句子平均长度为20-30字,为短句,要求在使后台数个脏话识别模型分类错误的情况下,使对抗样本与原句间相似度最大,且最大程度保留原句的辱骂性质不改变,在评测指标的选择上,主办方采用了以下四个指标的加权来作为最终的相似度,这样的评价指标既考虑到字面相似度,也考虑到原句和对抗样本映射到词向量后的语义相似度:

编辑相似度:1 - 编辑距离/原始文本长度的比值,小于0则视为0,取值范围[0, 1]。

词粒度Jaccard相似度:原始文本和对抗文本在分词后的Jaccard相似度,取值范围[0, 1]。

字符粒度Jaccard相似度:原始文本和对抗文本在分词后的Jaccard相似度,取值范围[0, 1]。

embedding cosine相似度:原始文本和对抗文本的embedding向量余弦相似度,取值范围[0, 1]。

02

算法思路

通常来说,基于梯度的攻击方法在对抗攻击中比较常见,但是由于文本需要映射到词向量的特性,基于梯度的方法产生的对抗样本未必具有真实的词语对应,而且且线上模型结构和训练数据均不公开,要通过猜测模型和基于梯度的方式攻击难度很大,外部模型在本赛题中的唯一作用可能是进行脏词的判别(从其他地方搜集到一定数量的脏话语料,训练比参考模型对脏词识别能力更强大的模型),虽然本队也曾微调过bert模型,但由于语料缺乏导致模型效果不好以及bert对算力要求较高,故最终没有采用,本队最终采用的思路是仅依据原始参考模型进行黑盒攻击。

1

曾考虑过的方案或比较有意思的tricks

(1).论文Jin, D., Jin, Z., Zhou, J.T., & Szolovits, P. (2019). Is BERT Really Robust? Natural Language Attack on Text Classification and Entailment. ArXiv, abs/1907.11932.提出了一种TextFooler,基本思想是将句子分词后,依次将每个词排除后送进模型预测,根据概率的变化来筛选出对模型识别结果比较重要的词,然后再根据词向量选择出跟重要词余弦相似度最大的top N个词,在这些词中再找出能使目标类别概率增大的词替换原词,以此来达到生成有效对抗样本的同时最大程度保留可读性,虽然本方法是一种较为先进的攻击方法,当然,经过实际测试,这种方法在赛题中并不奏效,否则它应该被放到下一个标题里去(摊手),不过这丝毫不妨碍它成为一种值得学习和探讨的方法。

(2).单使用参考模型配合脏词表进行脏词识别让人很不放心,毕竟搜集到的脏词不多,参考模型也很弱,所以我想到一种我称之为“联想”的trick来加强参考模型对脏词的检测能力,基本思想是对参考模型未识别为脏词的词,使用词向量取top N个近义词,然后使用参考模型检测所有的这些词,可以规定这些近义词中一定数量的词被识别为脏词则原来的词也为脏词。虽然这个trick在比赛中也没有带来什么实质性的效果提升,但是我觉得仍然不失为一种比较好的加强模型的手段。

2

最终方案

(1)信息收集

a.在网络上搜集各种脏词,整理成banlist.txt,用于匹配句子中的脏词,作为除参考模型之外脏词检测手段的扩充。

b.找到一份JSON版的新华字典,从中筛选出常用的3500字,生成word.json,主要用于保证对脏词进行同音字变异后还具有可读性。

(2)模型准备

由于脏话性质特殊,短时间内不能够收集到大量语料,不便于自行训练模型,且由于上文提到的情况,基于梯度的攻击可能不能得到较好效果,于是主要把注意力放在基于参考模型来进行脏词的识别与变异,意图根据参考模型识别出的脏词或脏字进行具有可迁移性的攻击。

(3)攻击

对每一句输入的脏话,使用jieba分词,对于分词结果中长度大于1的词使用参考模型进行预测,如果判定为辱骂性质,则对该词中的每一个字都采用"(()"进行分隔来干扰后台模型对于脏词的检测,重复这个步骤直到该句完全被处理后,遍历banlist.txt中的脏词,如果脏词在本句内,则对脏词中的每一个字都尝试在word.json中找出同音字,为了规避新词挖掘,故先筛选出所有同音字,然后随机选择一个,如果没有找到同音字,则使用pypinyin将字转化为拼音,使用Pinyin2Hanzi来查询更多同音字或者拼音相同但声调不同的字,随机选择一个进行替换,如果仍然没有匹配的结果,则继续使用原字,每个字后同样加入"(()"进行干扰,经测试,线上有一个或多个模型对空格敏感,加入空格攻击效果较为显著,故最后随机向处理完成后的句子中插入48个空格,完成一个对抗样本的生成。

这种攻击方法虽然可能会使生成的对抗样本长度超过100导致评测时被截断,这样看似会降低得分,但其实不然,从两方面分析:第一,即使被截断,原句的大部分内容也会得到保留,在攻击成功的情况下,语义相似度上也能够得到不错的分数,第二,很多具有强烈辱骂性质的词语常在句子尾部出现,被截断可能会导致这样的总结性辱骂词语不会最终进入到后台模型参与预测,降低了辱骂类别的置信度,能够提高攻击成功率。

03

参考及引用

sensitive-stop-words:https://github.com/fwwdn/sensitive-stop-words?spm=5176.12282029.0.0.627d6c59bqCikS

bannedwords:https://github.com/spetacular/bannedwords?spm=5176.12282029.0.0.627d6c59bqCikS

chinese-xinhua:https://github.com/pwxcoo/chinese-xinhua?spm=5176.12282029.0.0.627d6c59bqCikS

CommonChineseCharacter:https://github.com/DavidSheh/CommonChineseCharacter?spm=5176.12282029.0.0.627d6c59bqCikS

Is BERT Really Robust? A Strong Baseline for Natural Language Attack on Text Classification and Entailment:https://arxiv.org/abs/1907.11932?spm=5176.12282029.0.0.627d6c59bqCikS&file=1907.11932

更多优质内容请关注wx公众号“跟小帅学代码”,一起交流进步!

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved