误差分析|如何正确地做误差分析

误差分析(如何正确地做误差分析)

【误差分析|如何正确地做误差分析】

雷锋网 AI 科技评论按:尝试分析机器学习模型在什么时候、以什么方式、由于什么原因失效 , 我们把这称为「误差分析(error analysis)」 。对科研人员来说 , 他们需要通过误差分析选择后续的改进方向;模型的实际使用者们也需要根据误差分析来确定模型部署的许多细节 。由于误差分析对后续的行动方向有显著的影响 , 如果误差分析中出现了偏倚 , 或者误差分析不完整 , 很可能会带来我们不想看到的后果 。


NLP 任务误差分析的现状但是人们目前都是怎么做误差分析的呢?如果你翻翻自然语言处理顶级学术会议 ACL 的接收论文 , 你基本上会看到这样的叙述:
我们针对 100 个样本问题进行了误差分析……
我们随机选择了 50 个回答不正确的问题并把它们分为了 6 类……
我们找出了 100 个不正确的预测结果并尝试寻找共同的误差类别……
……
显然 , 这个领域内的研究人员们都不约而同地采用了这种做法:「我们随机选择了 50 到 100 个回答不正确的问题并把它们大致分为了 N 组」 。(斯坦福大学 NLP 组负责人 Christopher Manning 的画外音:问答任务的论文里选 100 个样本做错误分析的惯例恐怕出自我这里 —— 最初我们想做 200 个的 , 但我一直没有做分给我的那一半)
选择一部分错误样本做分析 , 看起来好像还有那么点道理对不对?但其实这种做法有很大问题 。比如 , 50 到 1百思特网00 的样本数量太小了 , 一般来说只占到误差总量的 5% 。这么小的采样数量很难代表真正的误差分布 。如果拿来做误差分析的采样样本里刚好没有体现出某个关键的模型问题(比如聊天助理机器人会对某些特定的语句给出不当的回答) , 然后就这么把没有得到修复的模型实际部署了 , 结果肯定会非常可怕 。
这还没完 , 样本数量小才仅仅是常见做法中出现的第一个问题而已 。在 ACL 2019 论文《Errudite: Scalable, Reproducible, and Testable Error Analysis》中 , 作者们详细列举了 NLP 误差分析中的许多个关键挑战 , 也提出了三个原则 , 希望大家能够把误差分析做得更准确 , 也具备更好的可重复、可拓展、可测试性 。作者们还设计了 Errudite , 这是一个实践了这些原则的交互式工具 , 它也可以逐个应对发现的问题 。
论文作者们也撰写了一篇介绍博客 , 根据通过一个具体的错误分析流程来说明当前基于一小批样本的手工、主观误差分析为什么容易得出模棱两可的、有偏倚的分析 , 并且可能弄错误差原因 , 以及如何借助 Errudite 避免这些错误 。他们的论文中还有更多的例子 。雷锋网 AI 科技评论对介绍博客做全文编译 。


从实际例子说起我们要对机器阅读理解(Machine Comprehension)的一个知名基准模型 BiDAF (
https://allenai.github.io/bi-att-flow/)做错误分析 。在这项任务中 , 首先给定一个问题和一段文本 , 机器阅读理解模型需要找到能正确回答问题的文本片段 。
误差分析|如何正确地做误差分析

在这个出自 SQuAD 数据集的例子中 , 加粗字体的 Murray Gold 创作了《Doctor Who(神秘博士)》的 2005 特别篇 。
作为语言理解的最重要测试任务之一 , 机器阅读理解中的误差分析非常关键但也有不少困难:研究人员们都希望能够找到先进模型中的弱点并进行改进 , 但是由于模型的输入(问题、文本段落)和输出(答案)都是非结构化的文本 , 能够用来分析解读数据集的特征就很少 。BiDAF 是研究机器阅读理解任务的学者们非常熟悉的一个模型了 , 下文中拿来举例的误差分析就都是出自研究人员们针对 BiDAF 的真实分析 。
在刚才这个例子中 , BiDAF 做了错误的预测 , 给出的答案是 John Debney (下划线)而不是 Murray Gold 。我们希望能够从这个错误做一些推广 , 更全面地理解模型的表现 。
在分析这个错误时 , 我们首先会问的问题就是:模型为什么会出现这种错误?一位专家给出了一个干扰词猜想:BiDAF 擅长把问题匹配到各种命名实体类别上 , 但是如果同时出现了同类型的其它实体的话 , BiDAF 就很容易被干扰 。以上面那个例子来说 , 我们问的问题是「谁」 , BiDAF 就知道我们需要一个人名 , 也确实回答了一个人名 , 只不过不是正确的那个人名 。