第 10 章 为模型建立保障
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
当 设计数据库或分布式系统时,软件工程师关注的是容错性,即当系统的某些组件发生故障时,系统继续工作的能力。在软件中,问题不在于系统的某个部分是否会发生故障,而在于何时发生故障。同样的原则也适用于 ML。无论模型有多好,它都会在某些示例中失效,因此您应该设计一个能够从容应对此类故障的系统。
在本章中,我们将介绍有助于防止或减轻故障的不同方法。首先,我们将了解如何验证我们接收和生成的数据的质量,并利用这种验证来决定如何向用户显示结果。然后,我们将了解如何使建模管道更加强大,以便能够高效地为众多用户提供服务。之后,我们将了解利用用户反馈和判断模型性能的方法。在本章的最后,我们将就部署最佳实践采访 Chris Moody。
围绕故障开展工程设计
让我们在 上介绍一下 ML 管道最有可能出现故障的几种方式。细心的读者会发现,这些失败案例与我们在"调试布线:可视化和测试 "中看到的调试技巧有些类似。事实上,在生产中向用户公开模型会遇到一系列挑战,这些挑战与调试模型时遇到的挑战如出一辙。
Bug 和错误可能出现在任何地方,但有三个方面尤其需要验证:流水线的输入、模型的置信度及其产生的输出。让我们按顺序逐一讨论。
输入和输出检查
任何 给定的模型都是在具有特定特征的特定数据集上训练出来的。训练数据具有一定数量的特征,每个特征都有一定的类型。此外,每个特征都遵循特定的分布,模型学习了这些分布才能准确执行。
正如我们在"新鲜度和分布偏移 "一文中所看到的,如果生产数据与模型所训练的数据不同,模型可能难以执行。为了解决这个问题,您应该检查管道的输入。
检查输入
一些 模型在面对数据分布的微小差异时仍能表现出色。但是,如果模型接收到的数据与训练数据差别很大,或者某些特征缺失或属于意想不到的类型,那么模型的表现就会大打折扣。
正如我们之前所看到的,即使输入不正确,ML 模型也能运行(只要这些输入的形状和类型正确)。模型会产生输出,但这些输出可能普遍不正确。请看图 10-1 中的示例。一个管道通过首先将句子矢量化,然后在矢量化表示上应用分类模型,将句子分类为两个主题之一。如果管道接收到一串随机字符,它仍会将其转换为向量,然后模型会做出预测。这种预测是荒谬的,但仅仅通过观察模型的结果是无法得知的。
图 10-1. 对于随机输入,模型仍会输出预测结果
为了防止模型在不正确的输出上运行,我们需要在将这些输入传递给模型之前检测出它们是不正确的。
这些检查涵盖的领域与"测试您的 ML 代码 "中的测试类似。按重要性排序,它们将
-
验证是否具备所有必要功能
-
检查每种功能类型
-
验证特征值
单独验证特征值可能很难,因为特征分布可能很复杂。进行这种验证的一个简单方法是定义一个特征值的合理范围,并验证它是否在该范围内。 ...