前天晚上ACL2020的Main Conference落下帷幕,今年的最佳论文颁给了这篇《Beyond Accuracy: Behavioral Testing of NLP Models with CHECKLIST》。在ACL录用的778篇论文中,这篇的标题并不起眼,属于看到就想直接跳过的类型。今天细读了一下,发现确实是很有意义的工作。在此与大家分享。
背景介绍
这篇paper解决的是NLP领域的模型评测问题。目前最主流的评测方法是从已有数据中划分出一部分作为测试集,然后测试模型准确率。但这并不能全面地评估一个模型的好坏,还有很多意想不到的情况:
- 测试集有部分数据和训练集相似度很高,模型如果overfit了也无法发现
- 测试集存在bias,与真实场景分布不一致
- 模型采用了某种shortcut才在数据集上表现良好
所以,模型的评估环节存在着不少风险,很难做出一个完美的benchmark。
近年来也涌现了大量关注NLP评测的工作。但之前的这些工作往往还是只能检测模型某种单方面的能力(例如,对噪音的鲁棒性),或者只是提出了针对某种特定任务的评测指标(例如针对NLG任务,测试生成文本前后逻辑一致性)。而且,这些新提出的测试方法往往实际操作起来并不容易。所以尽管传统方法诟病已久,却仍然大行其道。
本文提出的CHECKLIST是一种全新的、颠覆性的评测方式。作者认为:应当全方位对模型多项“能力”进行评估,每一项能力都应通过三项不同类别的检测。借助作者提供的[开源工具],(https://github.com/marcotcr/checklist),只需基本NLP经验即可快速生成大规模的测试样例。并且整个过程适用于几乎所有NLP任务(task-agnostic)。实践证明,与不采用CHECKLIST时相比,志愿者借助CheckList进行测试后,在极短的时间内就生成了多出一倍的测试样例,并从中发现了三倍未知的bug。
论文作者视频解析:https://slideslive.com/38929272/beyond-accuracy-behavioral-testing-of-nlp-models-with-checklist
原文链接: https://arxiv.org/abs/2005.04118
Github: https://github.com/marcotcr/checklist
CHECKLIST
CHECKLIST的思想借鉴了软件工程中的“黑盒测试”方法。它试图给出一套清晰完整的方法论,告诉你What to Test以及How to Test。
What to Test
对于一个软件,需要测试的是每一个function是否可以正确运行,但在NLP中并没有明确划分的function。CHECKLIST提出,我们应该测试model的各种“能力”。论文中列举了10种所有模型都应该具备的“基本功”,包括但不限于:
- Vocabulary+POS:是否熟练掌握任务相关的词汇
- Taxonomy:是否理解同义词、反义词
- NER:是否正确理解了named entity
- Logic:是否前后连贯一致
当然,根据具体任务,还要添加其他的特定能力。
How to Test
那么如何对各种能力进行测试呢?CHECKILIST提出对于每种能力都要尽可能地进行三种不同类型测试,分别是最小功能测试,不变性测试,定向期望测试。这里以情感分析任务为例,为大家具体说明这三种测试方式:
1. 最小功能测试(MFT, minimum functionality test): 类似软工中的“单元测试”,用大量简单但具有极强针对性的样例进行测试。例如下图,用模板生成带有否定词的句子,来测试模型NEGATION的能力。
2. 不变性测试(INT, invariance test):对原有数据做一些不影响结果的轻微变化。例如下图,当我们把句子中的一些named entity替换,模型应该不改变其输出结果。如果改变,则说明其鲁棒性存在问题。
3. 定向期望测试(DIR, directional expectation test):也是对原有数据做少许改动。改动后,模型的结果应该朝一个期望的方向变化。例如下图,对于负面情绪的句子,如果我们在其末尾继续添加负面的话语,模型不应该变得比原来“乐观”。
接下来的问题就是,有那么多测试要进行,如何针对每一项测试大规模生成测试样例呢?根据原文的说法,测试样例可以完全“无中生有”,也可以通过改动已有数据得到。而作者们已经给出了强大的开源工具,帮助你快速生成测试样例。整个工具完全可视化,操作性极强。下图就展示了它友好的操作界面。为了证明CHECKLIST有多好用,作者直接找到了Microsoft开发情感分析API的团队。CHECKLIST帮助他们在5个小时内找出了许多从未察觉的bug。又找了18个志愿者,在仅接受简单辅导的情况下,志愿者全部在2小时内测试出了SOTA模型的许多问题。
用CHECKLIST测试SOTA模型
作者在实验部分用CHECKLIST的方法在三个任务上进行了测试。抛弃传统的评测方式,在CHECKLIST面前那些所谓SOTA模型暴露出了各种各样的问题。即使面对最最简单的模板生成样例,也表现堪忧。
以情感分析任务为例,他们测试了Microsoft, Google, Amazon提供的情感分析付费API,以及Bert、RoBerta。在Negation这一项能力上,我们可以看到无论是工业界的成熟API、还是学术界的SOTA模型,都出奇的糟糕。比如第二行双重否定这一项上,只是用模板生成的简单双重否定,Bert和RoBerta的错误率高达98.4%、95.4%。而对于先抑后扬的情况,三个API的错误率高达100%、90.4%、100%。
再比如,在SQuad数据集上,如今的SOTA模型声称已超越了human performance。然而果真如此吗?作者对数据集中最简单的一类问题,也就是那些只对basic property提问的那些问题,进行反义词替换。Bert的回答就一下子牛头不对马嘴,错误率高达82.4%。
另外,CHECKLIST还发现了Bert存在种族歧视、性别歧视、性取向歧视…在做情感分析时,对于提到特定群体的句子,Bert会直接给出negative的标签。
在原文和github中,作者给出了各个模型极其详尽的CHECKLIST测试结果和典型错误样例。看着这些密密麻麻的数据,确实能感受到CHECKLIST更为全面地评估了模型的各方面能力。
小结
本文借鉴了软件工程的思想,提出了一套完整的NLP模型评测方法论,并提供了强大的开源工具,使整个测试过程得以快速实现。实验证明,CHECKLIST方式确实能够对NLP模型进行更为全面细致的评估。相比于原来仅用accuracy得到的评测结果,CHECKLIST给出了更多的insight,也让我们看到了在这些NLP任务上,我们真的还有很长很长的路要走…
来源:oschina
链接:https://my.oschina.net/u/4285472/blog/4355367