Beyond Accuracy: Behavior Testing of NLP Models with CheckList. Marco Tulio Ribeiro, Tongshuang Wu, Carlos Guestrin, Sameer Singh. ACL 2020

摘要

在测试集上评估模型,会高估模型;而其他的一些方法又只聚焦于单个任务或者模型的单个行为。

受到软件工程行为测试的一些原理的启发,本文提出checklist,一种任务不可知的NLP模型测试方法。它包含两个部分:(1)一个由通用语言学能力(capabilities)和测试类型(test type)构成的矩阵,有助于形成综合测试思维;(2)一个可以快速生成大量具有多样性的测试用例的软件工具。

本文在三个任务上通过测试来阐述checklist的效用,无论是学术界还是工业界SOTA模型,checklist都可以发现它们的致命错误。另外,本文还做了两个用户研究:(1)帮助商用情绪分析模型的负责团队(其实就是微软自家的团队)发现了他们之前没有发现的bug;(2)使用checklist的NLP从业人员创建的测试用例数量是没有使用checklist的两倍,发现的bug数量几乎是没有使用checklist的3倍。

测评矩阵

测评的过程就是填矩阵的各个单元格。矩阵的每一行对应一项能力,每一列对应一个测试类型。

作者列举了一些能力,当然使用者也可以继续添加:

  • Vocabulary+POS能力:识别任务中那些重要的词或者重要的词类型
  • Taxonomy
  • Robustness: 能够不受一些无关的改变的影响
  • NER:能够理解命名实体,即改变地名不会影响句子的情绪
  • Fairness
  • Temporal:改变事件的顺序
  • 否定(Negation):能够搞懂否定词带来的否定语义效果
  • Coreference:能够搞清楚共指/指代关系
  • 语义角色标注(Semantic Role Labeling)
  • 逻辑(Logic)

而在矩阵的列上,就是测试类型了。主要分为三大类:最小功能测试(Minimum Functionality test, MFT)、不变性测试(Invariance test, INV)和方向期望测试(Directional Expectation test, DIR)。

最小功能测试MFT

MFT来自于单元测试,对于复杂的输入,模型可能是走捷径处理了,实际上并没有掌握该能力。所以可以弄一些模板和词典来生成更多的样例,看看那些模型是否能够get到那些不变的核心词。vocabulary+POS就全是MFT。

INV和DIR测试

INV和DIR都是来自于软件变形测试(software metamorphic tests),INV是希望做一些小的扰动,但是标签应该保持不变,比如对于句子情绪分类,把其中的一个地名改成另一个地名,情绪的类别应该不变。而DIR则相反,通过制造一些扰动,希望模型预测的标签按照某个确定的方向改变。比如我们希望加了you are lame的句子的情绪不再是positive;再比如,如果有个句子对how many people are there in england和what is the population of england在改变后一个句子的地名为turkey后,句子对应该变成不再是duplicative。

INV和DIR都可以在无监督的数据上对模型进行测试。

总结:capababilities就是测试的内容,即回答了what to test,考查的就是模型的某种行为,它可以用在任何任务上;test type就是测试的方法了,回答了how to test。

接下来看一张图,看看这个矩阵到底长啥样以及这个矩阵是怎么填的:

每个单元格都要填写,每一行测试模型的一个能力。每一列都是一种测评方法。图下面是测试用例,A对应上面表格的A,negation是测试否定,按照模板来测试;B是测试NER,把地名更改,应该不会影响情绪,然而实际上都变了;C测试词汇,改了一些词,情绪应该变消极,但是实际上却从负面变成中立了。

打叉,说明当前测试样例不通过。

接下来看下直接在microsoft text analytics, google cloud's natrual language, amazon's comprehend三个工业模型以及bert, roberta两个学术模型上测试。在此之前请记住:Bert和roberta在SST-2数据集上的准确率分别是92.7%和94.8%,在QQP数据集上的准确率分别是91.1%和91.3%,在SQuAD上,本文测评了bert-large,它的F1是93.2%

通过这张图可以看到,在情绪分析任务上,negation的成绩很差。第一个是通过否定负面来达到积极或者中立,实现的方式是MFT,走的是模板,错误率还好;但是第三个,在结尾处否定负面来达到中立或者积极,结果错了很多;第四个,在句子中间加入中心的内容来否定积极,结果错的很明显,达到了100%的错误率。

再来看一张,另一个任务的,相同问题QQP任务

主动和被动的切换(active and passive),出错率也是挺高的。

再来看最后一个任务,阅读理解:

共指/指代关系那个功能,基本上预训练表现的很差。

软件工具

关于如何快速生成测试用例,这个暂时用不到,不展开陈述了,以后有兴趣再深入研究。

总结

本文被评为ACL2020 best paper,提出的checklist是一种新的NLP模型测试方法,第一次读起来感觉没有太多技术含量,但是它直面挑战了工业界和学术界的SOTA预训练模型并找出了他们的致命bug,在有些行为测试方面错误率甚至达到了100%,暴露出了算法的一些偏见和歧视(性别歧视、种族歧视等)

如果出现某个地名算法就更容易预测出某种情绪,如果出现某个肤色或者性别,就更容易出现某种结果,这就是一种歧视,也是算法的一种偏见。由于是大数据驱动的,所以这种问题再所难免。

所以checklist的意义不仅仅提出了新的模型测评范式,它还给未来的预训练研究指明了新的方向。


CheckList:ACL 2020 Best Paper的更多相关文章

  1. NAT转换、VLAN与Trunk(特典:ACL初步)

    一.NAT(网络地址转换) 即公有地址转换为私有地址 私有地址段(非公网地址,即公网不识别) A       10.0.0.0            10.255.255.255 B       17 ...

  2. MAML-Tracker: 目标跟踪分析:CVPR 2020(Oral)

    MAML-Tracker: 目标跟踪分析:CVPR 2020(Oral) Tracking by Instance Detection: A Meta-Learning Approach 论文链接:h ...

  3. linux:ACL权限

    ACL权限是为了防止权限不够用的情况,一般的权限有所有者.所属组.其他人这三种,当这三种满足不了我们的需求的时候就可以使用ACL权限: 比如:一个网络老师,给一个班的学员上课,他在linux的根目录下 ...

  4. Linux - 主机的细部权限规划:ACL 的使用

    ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限配置.ACL 可 ...

  5. consul之:ACL配置使用

    consul自带ACL控制功能,看了很多遍官方文档,没有配置步骤https://www.consul.io/docs/internals/acl.html 主要对各种配置参数解释,没有明确的步骤,当时 ...

  6. 一起来学linux:ACL

    传统的 权限设置只有user,group,other三种,并没有办法针对某一个用户或者某一个组来设定权限.ACL就是用于这个目的的 那 ACL 主要可以针对哪些方面来控制权限呢?他主要可以针对几个项目 ...

  7. Linux权限管理:ACL 权限

    1.ACL 是什么 ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表.它在UGO权限管理的基础上为文件系统提供一个额外的.更灵活的权限管理机 ...

  8. 实验16:ACL

    实验13-1:标准ACL Ø    实验目的通过本实验可以掌握:(1)ACL 设计原则和工作过程(2)定义标准ACL(3)应用ACL(4)标准ACL 调试 Ø    拓扑结构 本实验拒绝PC1 所在网 ...

  9. 初学者的checklist:对于QTP,你应该知道的9个基本概念

    学习QTP或者其他相关任何工具的方法都是首先把基本的概念过一遍.正所谓砍柴不怕磨刀功,一旦你对这些概念熟悉了,你就可以学习该工具的高级部分了.写这篇文章的目标是列出初学QTP的人应该掌握的所有基本概念 ...

随机推荐

  1. R星游戏如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 R星游戏如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载 ...

  2. 谁能告诉我如何通过Jenkins完成分布式环境搭建并执行自动化脚本

    ​今天我们接着昨天的内容,看一看如何完成Jenkins分布式环境的搭建和使用,因为我之前也是自己一个人摸索的,如果有不对的地方,请各位看官私信指出. 新增分布式部署节点 在系统管理/节点管理中点击新建 ...

  3. 大数据框架Hive优化方法

    常规调优手段 Fetch抓取 某些情况查询不必用MapReduce计算,比如select*,可以直接读取文件 本地模式 有时数据量比较小,hive可以通过本地模式在单台机器上处理所有任务,对于小数据集 ...

  4. 使用Faker库生成模拟数据

    一.相关文档 该库在laravel框架中默认已经存在,无需手动进行安装.使用参考文档: https://packagist.org/packages/fzaninotto/faker 二.简单示例 & ...

  5. random模块(验证码小程序)

    #!/usr/bin/env python #-*- coding:utf-8 -*- import random li=[] for i in range(6): #循环几次,就代表生成几位的验证码 ...

  6. AList的具体实现 #CS61B-sp18-2.5

    实现一个Array based list,其功能包括获取长度size,添加元素至最后addLast,得到元素get和去除最后一个元素. 设计思路及其实现: 我们都知道在获取数据的时候,直接调用缓存里面 ...

  7. PHP 实例 - AJAX 实时搜索-AJAX Live Search

    PHP 实例 - AJAX 实时搜索 AJAX 可为用户提供更友好.交互性更强的搜索体验. AJAX Live Search 在下面的实例中,我们将演示一个实时的搜索,在您键入数据的同时即可得到搜索结 ...

  8. PHP date_sunset() 函数

    ------------恢复内容开始------------ 实例 返回葡萄牙里斯本今天的日落时间: <?php// Lisbon, Portugal:// Latitude: 38.4 Nor ...

  9. PHP date_timezone_set() 函数

    ------------恢复内容开始------------ 实例 设置 DateTime 对象的时区: <?php$date=date_create("2013-05-25" ...

  10. PHP fileperms() 函数

    定义和用法 fileperms() 函数返回文件或目录的权限. 如果成功,该函数以数字形式返回权限.如果失败,则返回 FALSE. 语法 fileperms(filename) 参数 描述 filen ...