澎湃Logo
下载客户端

登录

  • +1

清华OpenAttack文本对抗工具包重大更新:支持中文、多进程、兼容HuggingFace

2021-09-26 18:01
来源:澎湃新闻·澎湃号·湃客
字号

机器之心发布

清华大学自然语言处理实验室OpenAttack 覆盖了所有类型的攻击,具备相对较好的扩展性。

近日,清华大学自然语言处理实验室(THUNLP)研发的文本对抗攻击工具包 OpenAttack 继相关论文在 ACL-IJCNLP 2021 Demo 发表后迎来大版本更新,不但重构了大量代码,完善了文档,更新增了多语言支持、多进程处理等重要功能。欢迎前往 GitHub 主页下载试用!

Github 链接:https://github.com/thunlp/OpenAttack

OpenAttack 论文:https://arxiv.org/abs/2009.09191

文本对抗逐渐成为 NLP 研究的热点之一,根据文本对抗论文列表 TAADPapers 的统计,仅 2021 年 ACL 就有 12 篇相关论文发表(含 Findings)。借助 OpenAttack 这样的文本对抗工具包,你可以方便快速地进行文本对抗相关的研究和开发,具体包括:

几行代码复现经典的文本对抗攻击基线模型,大大减少实验时复现基线模型的时间和难度;

基于其提供的全面的对抗攻击评测指标,对自己的攻击模型进行系统地评测;

评测自己的 NLP 模型面对各种类型攻击时的鲁棒性;

利用其中包含的常用攻击模型要素(如替换词生成、句子复述),迅速设计和开发新的攻击模型;

进行对抗训练以提高模型鲁棒性。

相比于图像领域有一系列对抗攻击工具包(如 CleverHans、Foolbox、ART),文本领域类似的对抗攻击工具包寥寥无几,除 OpenAttack 之外目前仅有 TextAttack 这一个文本对抗攻击工具包。然而 TextAttack 在对抗攻击类型覆盖度、多语言支持等方面有一定的局限性,相比之下 OpenAttack 则弥补了 TextAttack 的不足,并且有一些独特之处。

具体而言,最新版 OpenAttack 有如下几个特点:

攻击类型全覆盖。OpenAttack 是目前唯一支持所有攻击类型的文本对抗攻击工具包,覆盖了所有扰动粒度:字、词、句级别,以及所有的受害模型可见度:gradient-based、score-based、decision-based、blind;

多语言支持。OpenAttack 目前支持英文和中文两种语言的攻击。基于其模块化的文本预处理和攻击流程,它也可以很容易地实现对其他语言的支持;

多进程。OpenAttack 基于 Python 原生的多进程库实现了对抗攻击的多进程执行,大大加快攻击速度;

完全兼容 Hugging Face。最新版的 OpenAttack 完全兼容 Transformers 和 Datasets 库,无需自己训练模型或配置数据集,一行代码即可实现对 Hugging Face 已有模型的攻击;

高可扩展性。除了很多内置的攻击模型以及训练好的受害模型,你可以很容易地对自己的受害模型进行攻击,也可以利用 OpenAttack 提供的各种模块迅速设计开发新的攻击模型,设计新的攻击评测指标。

图 1 OpenAttack 输出对抗攻击结果示例

使用样例

OpenAttack 的使用并不复杂,要执行一次对抗攻击只需如下 5 步:

指定被攻击的受害模型。可以是 OpenAttack 内置的训好的模型,可以是 Transformers 中 fine-tune 好的模型,也可以是你自己训好的模型。

指定攻击数据集。可以是 Datasets 上的数据集,也可以是你自己的数据集。

指定攻击方法。可以从 OpenAttack 现有的 15 种经典攻击方法中选择一种,也可以使用你自己设计好的攻击方法。此外在这一步也需要指定语言(英文或中文)。

指定攻击评测指标。你可以从 OpenAttack 现有的 3 类(攻击成功率、对抗样本质量、攻击效率)共 9 种对抗攻击评测指标中自由组合,确定你所用的评测指标,也可以设计自己的评测指标。

进行对抗攻击。你可以在这一步指定进程数来使用多进程提高攻击效率;同时可以选择将评测过程及结果可视化(如图 1)或保存到文件中。

下面给出了几个代码段来演示 OpenAttack 的使用。

(1)基本用法

import OpenAttack as oa

import datasets

# 指定在SST-2上训练好的BERT作为受害模型

victim = oa.DataManager.loadVictim("BERT.SST")

# 指定SST-2作为评测数据集

dataset = datasets.load_dataset("sst")

# 指定PWWS作为攻击模型并进行初始化

attacker = oa.attackers.PWWSAttacker()

# 指定默认攻击评测指标

attack_eval = oa.AttackEval(attacker, victim)

# 进行攻击并输出可视化结果(如图1所示)

attack_eval.eval(dataset, visualize=True)

(2)从 Transformers 中选择受害模型

import OpenAttack as oa

import transformers

# 指定在SST-2上训练好的BERT作为受害模型(来自HuggingFace)

model_path = "echarlaix/bert-base-uncased-sst2-acc91.1-d37-hybrid"

tokenizer = transformers.AutoTokenizer.from_pretrained(model_path)

model = transformers.AutoModelForSequenceClassification.from_pretrained(model_path, num_labels=2, output_hidden_states=False)

victim = oa.classifiers.TransformersClassifier(model, tokenizer, model.bert.embeddings.word_embeddings)

(3)指定语言为中文

import OpenAttack as oa

# 首先指定中文受害模型和中文评测数据集

# 在选择攻击方法时设置语言为中文

attacker = oa.attackers.PWWSAttacker(lang="chinese")

(4)使用多进程

import OpenAttack as oa

# 只需要在第5步,进行攻击时指定进程数即可(num_workers=4)

attack_eval.eval(dataset, visualize=True, num_workers=4)

OpenAttack 还提供了其他示例代码来演示使用自己的评测数据集、自己设计攻击模型、对抗攻击、攻击句对分类(如 NLI)模型等功能,可以在其项目主页中看到。更详细的关于 OpenAttack 使用的问题可以参考其文档,或在 GitHub 中提出 issue。

图 2 OpenAttack 文档主页

结语

OpenAttack 工具包将会长期维护并保持更新,欢迎大家使用 OpenAttack 作为文本对抗攻击领域学术研究和应用开发的工具。在使用过程中有任何问题或是意见和建议都欢迎提出。也欢迎大家加入,共同开发、完善 OpenAttack 工具包。

机器之心 · 机动组

机动组是机器之心发起的人工智能技术社区,聚焦于学术研究与技术实践主题内容,为社区用户带来技术线上公开课、学术分享、技术实践、走近顶尖实验室等系列内容。机动组也将不定期举办线下学术交流会与组织人才服务、产业技术对接等活动,欢迎所有 AI 领域技术从业者加入。

© THE END

转载请联系本公众号获得授权

投稿或寻求报道:content@jiqizhixin.com

原标题:《清华OpenAttack文本对抗工具包重大更新:支持中文、多进程、兼容HuggingFace》

阅读原文

    本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问http://renzheng.thepaper.cn。

    +1
    收藏
    我要举报

            扫码下载澎湃新闻客户端

            沪ICP备14003370号

            沪公网安备31010602000299号

            互联网新闻信息服务许可证:31120170006

            增值电信业务经营许可证:沪B2-2017116

            © 2014-2024 上海东方报业有限公司

            反馈