【构建ML驱动的应用程序】第 8 章 :部署模型时的注意事项

news2024/9/20 1:21:50

   🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

数据问题

数据所有权

有偏见的数据

测试集

系统性偏见

建模问题

反馈回路

包容性模型性能

考虑上下文

对手

击败模特

利用模型

滥用问题和双重用途

Chris Harland:航运实验

结论


前面的章节涵盖了模型训练和泛化性能。这些是部署模型的必要步骤,但它们不足以保证 ML 驱动产品的成功。

部署中模型需要更深入地研究可能影响用户的故障模式。在构建从数据中学习的产品时,您应该回答以下几个问题:

  • 您使用的数据是如何收集的?

  • 通过从该数据集中学习,您的模型做出了哪些假设?

  • 这个数据集是否具有足够的代表性来生成有用的模型?

  • 您的工作成果如何被滥用?

  • 您的模型的预期用途和范围是什么?

这数据伦理学领域旨在回答其中一些问题,所使用的方法也在不断发展。如果您想深入了解,O'Reilly 有一份关于该主题的综合报告,道德与数据科学,由 Mike Loukides 等人撰写。

在本章中,我们将讨论有关数据收集和使用的一些问题,以及确保模型对每个人都能正常工作所涉及的挑战。我们将以实际访谈结束本节,涵盖将模型预测转化为用户反馈的技巧。

让我们从查看数据开始,首先涵盖所有权问题,然后转向偏见。

数据问题

在本节中,我们将首先概述存储、使用和生成数据时要牢记的提示。我们将从涵盖数据所有权和存储数据所带来的责任开始。然后,我们将讨论数据集中常见的偏差来源以及在构建模型时考虑这种偏差的方法。最后,我们将举例说明此类偏见的负面后果,以及减轻这些偏见的重要性。

数据所有权

数据所有权指与数据收集和使用相关的要求。以下是关于数据所有权需要考虑的几个重要方面:

  • 数据收集:您是否获得合法授权来收集和使用您要用于训练模型的数据集?

  • 数据使用和许可:您是否向用户清楚地解释了为什么需要他们的数据以及您希望如何使用这些数据,他们是否同意?

  • 数据存储:你如何存储你的数据,谁可以访问它,你什么时候删除它?

从用户那里收集数据有助于个性化和定制产品体验。它还意味着道德和法律责任。尽管始终存在保护用户提供的数据的道德义务,但新法规越来越多地将其合法化。例如,在欧洲,GDPR 法规现在就数据收集和处理制定了严格的指导方针。

对于存储大量数据的组织,数据泄露代表着重大的责任风险。此类违规行为既削弱了用户对组织的信任,又常常导致法律诉讼。限制收集的数据量从而限制法律风险。

为了在我们的 ML 编辑器中,我们将从使用公开可用的数据集开始,这些数据集是在用户同意的情况下收集并在线存储的。如果我们想记录额外的数据,例如记录我们的服务如何使用以改进它,我们必须明确定义数据收集策略并与用户共享。

除了数据收集和存储之外,重要的是要考虑使用收集的数据是否会导致性能不佳。数据集适用于某些情况,但不适用于其他情况。让我们探讨一下原因。

有偏见的数据

数据集是特定数据收集决策的结果。这些决定导致数据集呈现出有偏见的世界观。ML 模型从数据集中学习,因此会重现这些偏差。

例如,假设一个模型根据历史数据进行训练,根据包括性别在内的信息预测一个人成为 CEO 的可能性,从而预测领导技能。从历史上看,根据皮尤研究中心编制的“女性领导者数据”情况说明书,大多数财富 500 强 CEO 都是男性。使用这些数据来训练模型将导致它了解到男性是领导力的重要预测指标。由于社会原因,男性和首席执行官在所选数据集中是相关的,这导致女性被考虑担任此类角色的机会更少。通过盲目地根据这些数据训练模型并使用它进行预测,我们只会强化过去的偏见。

将数据视为基本事实可能很诱人。实际上,大多数数据集都是忽略更大上下文的近似测量值的集合。我们应该从任何数据集都存在偏差的假设开始,并估计这种偏差将如何影响我们的模型。然后,我们可以采取措施改进数据集,使其更具代表性,并调整模型以限制它们传播现有偏见的能力。

这里是数据集中错误和偏差的常见来源的几个示例:

  • 测量错误或损坏的数据:每个数据点由于用于生产它的方法而带来不确定性。大多数模型忽略了这种不确定性,因此可以传播系统测量误差。

  • 代表性:大多数数据集呈现了一个不具代表性的人口观点。许多早期的人脸识别数据集主要包含白人男性的图像。这导致模型在该人群中表现良好,但在其他人群中表现不佳。

  • 访问:有些数据集可能比其他数据集更难找到。例如,英语文本比其他语言更容易在线收集。这种易于访问导致大多数最先进的语言模型都专门针对英语数据进行训练。因此,与非英语人士相比,说英语的人将能够获得更好的 ML 支持的服务。这种差异通常是自我强化的,因为与其他语言的产品相比,英语产品的额外用户量有助于使这些模型更好。

测试集用于评估模型的性能。出于这个原因,您应该特别注意确保您的测试集尽可能准确和具有代表性。

系统性偏见

系统性偏见指导致某些人群受到不公平歧视的体制和结构性政策。由于这种歧视,此类人口在历史数据集中的代表性往往过高或过低。例如,如果社会因素导致某些人群在历史上在刑事逮捕数据库中的比例过高,则根据该数据训练的 ML 模型将对这种偏差进行编码,并将其带入现代预测。

这可能会产生灾难性的后果,并导致部分人口被边缘化。有关具体示例,请参阅 J. Angwin 等人的“机器偏见”ProPublica 报告,关于犯罪预测的 ML 偏见。

删除或限制数据集中的偏差具有挑战性。当试图防止模型对某些特征(如种族或性别)产生偏见时,一些人试图从模型用于进行预测的特征列表中删除相关属性。

实际上,简单地删除一个特征并不能防止模型对它产生偏见,因为大多数数据集包含许多与它密切相关的其他特征。例如,在美国,邮政编码和收入与种族高度相关。如果你只删除一个特征,模型可能同样有偏差,尽管以更难检测的方式。

相反,你应该明确说明您要强制执行哪些公平约束。例如,您可以遵循 MB Zafar 等人在论文“Fairness Constraints: Mechanisms for Fair Classification”中概述的方法,其中使用 p% 规则衡量模型的公平性。p% 规则定义为“具有特定敏感属性值的受试者百分比与不具有该值的受试者百分比之间的比率应不低于 p:100。” 使用这样的规则可以让我们量化偏差,从而更好地解决它,但它需要跟踪我们不希望模型产生偏差的特征。

除了评估数据集中的风险、偏差和错误之外,机器学习还需要评估模型。

建模问题

如何我们能否将模型引入不良偏差的风险降至最低?

模型可以通过多种方式对用户产生负面影响。首先,我们将解决失控的反馈循环,然后我们将探讨模型在一小部分人群中谨慎失败的风险。然后,我们将讨论为用户适当地结合 ML 预测的重要性,并在本节结束时介绍恶意行为者滥用模型的风险。

反馈回路

在大多数 ML 支持的系统中,让用户遵循模型的推荐将使未来的模型更有可能做出相同的推荐。如果任其发展,这种现象会导致模型进入自我强化的反馈循环。

例如,如果我们训练一个模型来向用户推荐视频,而我们的第一个版本的模型更倾向于推荐猫的视频而不是狗的视频,那么平均而言,用户会观看更多的猫视频而不是狗视频。如果我们使用历史推荐和点击数据集训练模型的第二个版本,我们会将第一个模型的偏差纳入我们的数据集中,而我们的第二个模型将更加偏爱猫。

自从内容推荐模型通常一天更新多次,我们最新版本的模型很快就会推荐专门的猫视频。您可以在图 8-1中看到这样的示例。由于猫视频最初很受欢迎,模型逐渐学习推荐更多猫视频,直到达到右侧的状态,只推荐猫视频。

图 8-1。反馈循环示例

互联网上充斥着猫的视频可能看起来并不像悲剧,但您可以想象这些机制如何迅速强化负面偏见并向毫无戒心的用户推荐不适当或危险的内容。事实上,试图最大化用户点击概率的模型将学习推荐点击诱饵内容,即非常诱人点击但不会为用户提供任何价值的内容。

反馈循环也倾向于引入偏向于少数非常活跃的用户。如果视频平台使用每个视频的点击次数来训练其推荐算法,则其推荐可能会过度适合代表绝大多数点击的最活跃用户。然后,该平台的所有其他用户都会看到相同的视频,而不管他们的个人偏好如何。

要限制反馈循环的负面影响,请选择不太容易产生此类循环的标签。点击量只衡量用户是否打开视频,而不是他们是否喜欢它。使用点击作为优化目标可以推荐更吸引眼球的内容,而无需担心其相关性。用与用户满意度更相关的观看时间代替目标指标将有助于缓解这种反馈循环。

即便如此,针对任何类型的参与度进行优化的推荐算法始终存在退化为反馈循环的风险,因为它们的唯一目标是最大化几乎无限的指标。例如,即使一种算法针对观看时间进行了优化以鼓励更多引人入胜的内容,但要使该指标最大化的世界状况是每个用户都会花一整天的时间观看视频。使用此类参与度指标可能有助于提高使用率,但这引发了一个问题,即这是否始终是一个值得优化的目标。

除了创建反馈循环的风险之外,尽管在离线验证指标上获得了令人信服的分数,但模型在生产中的性能也可能低于预期。

考虑上下文

用户不会总是意识到给定的信息片段源自 ML 模型的预测。只要有可能,您应该与用户分享预测的上下文,这样他们就可以就如何利用它做出明智的决定。为此,您可以先向他们描述模型是如何训练的。

目前还没有行业标准的“模型免责声明”格式,但该领域的积极研究显示了有前途的格式,例如模型卡(参见 M. Mitchell 等人的文章“模型报告的模型卡”),一个用于透明模型报告的文档系统。在提议的方法中,模型附带有关其训练方式、测试数据、预期用途等的元数据。

在我们的案例研究中,ML 编辑器根据特定的问题数据集提供反馈。如果我们要将其部署为产品,我们将包含一个免责声明,说明模型有望在哪些输入类型上表现良好。这样的免责声明可以像“本产品试图推荐更好的方式来表达问题。它是根据写作 Stack Exchange 中的问题进行训练的,因此可能反映了该社区的特定偏好。”

让善意的用户了解情况很重要。现在,让我们看看不太友好的用户可能带来的潜在挑战。

对手

一些 ML 项目需要考虑模型被对手击败的风险。欺诈者可能会试图欺骗负责检测可疑信用卡交易的模型。或者,对手可能想要探测经过训练的模型以收集他们不应被允许访问的有关基础训练数据的信息,例如敏感的用户信息。

滥用问题和双重用途

两用描述技术为一个目的而开发,但可以用于其他目的。由于 ML 能够在相似类型的数据集上表现良好(见图 2-3),ML 模型通常存在双重用途问题。

如果你建立了一个模型,允许人们改变他们的声音听起来像他们朋友的声音,它会被滥用来未经他们的同意冒充他人吗?如果您确实选择构建它,您如何提供适当的指导和资源以确保用户了解正确使用您的模型?

同样,任何可以准确分类人脸的模型都对监视具有双重用途。虽然这样的模型最初可能是为了启用智能门铃而构建的,但它随后可用于通过全市范围的摄像头网络自动跟踪个人。模型是使用给定数据集构建的,但在其他类似数据集上重新训练时可能会带来风险。

目前没有关于双重用途的明确最佳实践。如果您认为您的作品可能会被用于不道德的用途,我鼓励您考虑加大为此目的复制的难度,或者与社区进行深思熟虑的讨论。最近,OpenAI 决定不发布其最强大的语言模型,因为担心它可能会更容易在网上传播虚假信息(请参阅 OpenAI 的公告帖子“更好的语言模型及其含义”)。虽然这是一个相对新颖的决定,但如果以后更频繁地提出此类担忧,我也不会感到惊讶。

作为本章的总结,在下一节中,我将与 Chris Harland 进行讨论,他目前是 Textio 的工程总监,他在向用户部署模型并在足够的背景下展示结果以使其有用方面拥有丰富的经验。

Chris Harland:航运实验

克里斯拥有博士学位 拥有物理学博士学位,并从事各种机器学习任务,包括计算机视觉,以从收据中提取结构化信息以用于软件支出。他曾在 Microsoft 的搜索团队工作,在那里他意识到了 ML 工程的价值。Chris 随后加入了 Textio,这是一家开发增强型写作产品以帮助用户撰写更具吸引力的职位描述的公司。Chris 和我坐下来讨论他交付 ML 驱动产品的经验,以及他如何验证准确性指标以外的结果。

问:Textio 使用 ML 直接引导用户。这与其他 ML 任务有何不同?

答:当您只关注预测时,例如何时购买黄金或在 Twitter 上关注谁,您可以容忍一定程度的差异。当你做写作指导时,情况并非如此,因为你的建议带有很多潜台词。

如果你告诉我再写 200 个字,你的模型应该是一致的,并允许用户听从它的建议。一旦用户写了 150 个字,模型就不能改变主意并建议降低字数。

指导还需要明确:“将停用词删除 50%”是一个令人困惑的指示,但“减少这 3 个句子的长度”可能会以更可操作的方式帮助用户。然后,挑战就变成了在使用更易于理解的功能的同时保持性能。

本质上,ML 写作助手根据我们的模型引导用户从初始点到更好的特征空间。有时,这可能涉及通过更糟糕的点,这可能是令人沮丧的用户体验。需要在构建产品时考虑到这些限制。

问:执行此指导的好方法是什么?

A:对于指导,准确率比召回率更有趣。如果你想给一个人提供建议,recall 就是在所有潜在的相关领域和一些不相关的领域(其中有很多)提供建议的能力,而 precision 则是在一些有前途的领域提供建议而忽略其他潜在的领域.

给出建议的时候,错误的代价是非常高的,所以精准才是最有用的。用户还将从您的模型之前给出的建议中学习,并自动将它们应用到未来的输入中,这使得这些建议的准确性变得更加重要。

此外,由于我们展示了不同的因素,我们衡量用户是否真正利用了它们。如果不是,我们应该明白为什么不。一个实际的例子是我们的“主动与被动比率”功能,该功能未得到充分利用。我们意识到这是因为建议不够可操作,所以我们通过突出显示我们建议更改的词本身来改进它。

问:您如何找到新的方式来引导您的用户或新功能?

A:自上而下和自下而上的方法都很有价值。

自上而下的假设调查是领域知识驱动的,基本上由先前经验的特征匹配组成。例如,这可以来自产品或销售团队。自上而下的假设可能看起来像“我们相信招聘电子邮件的神秘方面有助于推动参与。” 自上而下的挑战通常是找到一种实用的方法来提取该特征。只有这样我们才能验证该特征是否具有预测性。

自下而上旨在反省分类管道以了解它发现的预测性内容。如果我们有文本的一般表示,例如词向量、标记和词性注释,然后我们将其提供给模型集合以分类为好文本或坏文本,那么哪些特征最能预测我们的分类?领域专家通常最有能力从模型的预测中识别这些模式。接下来的挑战是找到一种方法使这些功能易于人类理解。

问:您如何确定模型何时足够好?

答:您不应该低估相关语言的小型文本数据集对您的帮助。事实证明,对于许多用例而言,在您的域中仅使用一千个文档就足够了。能够标记这一小组数据是值得的。然后,您可以开始在样本外数据上测试您的模型。

你应该让运行实验变得容易。你关于改变产品的绝大部分想法最终都会产生无效的净效果,这应该让你对新功能的担心少一些。

最后,建立一个糟糕的模型是可以的,这是你应该开始的。修复不良模型将使您的产品对问题更加稳健,并帮助它更快地发展。

问:您如何看待模型投入生产后的表现?

A:在生产中,将模型的预测清楚地暴露给用户并让他们覆盖它。记录特征值、预测和覆盖,以便您可以监控它们并在以后进行分析。如果您的模型产生了一个分数,找到将这个分数与您的建议的使用情况进行比较的方法可能是一个额外的信号。例如,如果您要预测一封电子邮件是否会被打开,那么从您的用户那里获取真实数据非常有价值,这样您就可以改进您的模型。

最终的成功指标是客户成功,这是最延迟的,并且受到许多其他因素的影响。

结论

我们首先介绍了使用和存储数据的问题。然后,我们深入研究了数据集中产生偏差的原因以及识别和减少偏差的技巧。接下来,我们研究了模型在野外面临的挑战,以及如何降低将它们暴露给用户的相关风险。最后,我们研究了如何构建系统,以便将它们设计为对错误具有弹性。

这些都是复杂的问题,机器学习领域在解决所有潜在形式的滥用方面仍有许多工作要做。第一步是让所有从业者意识到这些问题,并在他们自己的项目中注意这些问题。

我们现在已准备好部署模型。首先,我们将在第 9 章探讨不同部署选项之间的权衡。然后,我们将在第 10 章介绍减轻与部署模型相关的一些风险的方法。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11个步骤完美排查服务器是否被入侵

随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至关重要,个人结合自己的工作经历,整理了几种常见的机器被黑情况供参考: 背景信息:以下情况是在CentOS 6.…

计算机的磁盘与中断介绍

磁盘 大多数计算机都有磁盘。这只是连接到I/O总线的另一个外围设备。磁盘的任务非常简单;它可以做两件事:存储你发给它的字节,它发送给你之前存储的字节。 大多数计算机都有磁盘有两个原因。首先,它们能够存储大量字节&#xff0c…

微信小程序实现一些优惠券/卡券

背景 👏 前几周有小伙伴问我如何用css实现一些优惠券/卡券,今天就来分享一波吧!速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现原理 2.1 实现内凹圆角 假设我们要实现这样的一个效果&#xf…

Java八股文

2022年接近年底了,想必绝大多数的小伙伴跳槽的心已经蠢蠢欲动。但一边又是互联网寒冬、大厂裁员,导致人心惶惶,想跳又不敢跳。但现在罡哥,给大家整理了八股文大厂面试真题和面试技巧。这里免费分享给大家。 资料包括:…

算法day29|491,46,47

491.递增子序列 class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:used [False]*len(nums)result []nums.sort()def backtracking(nums,path,startindex,used):nonlocal resultif len(path)>1:result.append(path[:])for i in range(s…

云原生系列 五【轻松入门容器基础操作】

✅作者简介: CSDN内容合伙人,全栈领域新星创作者,阿里云专家博主,华为云云享专家博主,掘金后端评审团成员 💕前言: 最近云原生领域热火朝天,那么云原生是什么?何为云原生…

C<6.1>函数习题(函数内测整形数组大小,递归

目录 1,数组比较 2,勒让德多项式 3,查询数组(sizeof问题 1,数组比较 1. 编写函数实现比较两个长度为 n(n 可变)的数组大小。比较逻 辑如下: 假设 a 和 b 为 n 个元素的整型数组&am…

Web(一)Web前端开发概述

第1关_Web前端开发相关的概念 相关知识 为了完成本关任务,你需要掌握:1.Web系统的组成;2.浏览器的概念;3.URL的概念;4.Web标准。 Web系统的组成:Web是Internet上最受欢迎的一种多媒体信息服务系统。 整个…

【LeetCode】string 类的几道简单题

​🌠 作者:阿亮joy. 🎆专栏:《阿亮爱刷题》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 👉仅反转字母&a…

Java源代码到用户使用都经历了哪些阶段

1、测试好的代码是如何部署给用户的。 首先:写好的代码通过打包生成jar包放到一个服务器上运行,服务器上需要有Java虚拟机,当然可以在存放jar包的服务器上安装数据库,或者把服务器放到另外一台服务器上也可以,但是在代…

SpringCloud-04-Feign

一、Feign介绍 Feign是一个声明式web服务客户机。它使编写web服务客户机更容易。要使用Feign创建一个接口并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插式编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持&#xff…

10个全球最佳免费土地覆被/土地利用数据资源

不知道大家有没有想过,在我们来到地球的一生时间中,地球会有多大的变化呢? 是在空旷的草地新建了公园,还是低矮的平房变成了一座座大厦? 这些林林总总的变化,总是令人应接不暇。然而,在漫长的人类历史历程中&#xf…

2022亚太数学杯数学建模竞赛A题(思路分析......)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

Java数据类型:基本数据类型和引用数据类型

Java 语言是强类型语言,编译器存储在变量中的数值具有适当的数据类型。学习任何一种编程语言都要了解其数据类型,下面将详细介绍 Java 中的数据类型。 Java 语言支持的数据类型分为两种:基本数据类型(Primitive Type)…

NET CORE Configuraion 使用详解

相关配置 <Project Sdk"Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>netcoreapp3.1</TargetFramework></PropertyGroup><ItemGroup><!--读取配置的核心包--><Packa…

谷歌浏览器自定义标签页 newtab

创建一个文件夹, 里面放置信息: 其中&#xff0c; manifest.json 不能变&#xff0c; home.html 是新的标签页信息 manifest.json 内容: {"chrome_url_overrides": {"newtab": "home.html"},"manifest_version": 2,"name"…

新知实验室TRTC 初体验

引言 随着短视频行业的不断发展&#xff0c;人们对实时音视频的需求越来越多。在线直播&#xff08;秀场直播、电商直播、赛事直播、新品发布会、路演、在线拍卖&#xff09;的相关产品不断涌现&#xff0c;百花齐放。对于业务来说&#xff0c;自研开发一个实时音视频服务&…

spring boot 过滤器拦截器与aop

目录 一、过滤器 (Filter) 1.1 什么是过滤器 1.2 springboot配置过滤器 方式一&#xff1a;使用WebFilter 二、拦截器(Interceptor) 2.1 什么是拦截器 2.2 使用拦截器方法 三、拦截器&过滤器与spring aop的区别 3.1 区别 3.2添加aop 适用场景&#xff1a; 拦截…

Vue3中jsx父子传值、provide和inject、v-memo指令、Teleport内置组件、KeepAlive缓存组件、transition过渡组件

文章目录1. jsx父子传值2. provide和inject3. v-memo指令4. Teleport内置组件5. KeepAlive缓存组件6. transition过渡组件1. jsx父子传值 父组件&#xff1a; <template><div><child :title"title" :setTitle"setTitle" /></div>…