构建可靠的机器学习系统
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 数据即责任

关于机器学习的文章都表明数据是机器学习系统中的重要资产。这种观点是合理的:没有数据就不可能有机器学习系统。如图2-1所示,具有更多(和更高质量)的训练数据的简单(甚至简单化)机器学习系统通常可以胜过具有较少或代表性较差的数据的更复杂系统[2]

各个组织都会继续争先恐后地收集尽可能多的数据,希望找到将这些数据转化为价值的方法。事实上,许多组织已经将其变成了一种非常成功的商业模型。想想Netflix,它向客户推荐高质量节目和电影的能力是其早期的独特之处。据说Netflix在进入内容制作方面的业务后还使用了这些数据,在详细了解人们想看什么之后,以此为根据来确定为哪些观众制作什么节目。

当然,就像任何东西都可能是资产一样,在正确(错误)的场景下,它也可能是负债。就数据而言,最重要的是,数据的获取、收集和管理可能会暴露数据中意想不到的细微差别和复杂性。不考虑这些对我们和我们的用户来说可能会有潜在隐患。所有方法都必须根据数据类型确定数据的范围,例如,医疗记录的数据也许需要不同于工作经历数据的处理方式。当然,天下没有免费的午餐,最佳数据管理方式的成本一定高昂。

本节的目的不是让本书成为数据收集、存储、报告和删除实践方面的权威著作。这远远超出了本节甚至本书的范围。这里的目的是列举足够多的关于复杂性的问题,以阻止任何读者简单地认为“更多数据==更好”或认为“这东西很简单”。让我们回顾一下数据的生命周期,看一下挑战来自哪里。

图2-1:数据规模、模型的错误率以及出现数据问题的可能性之间的权衡参考

首先,数据的收集必须符合适用的法律,这些法律可能是基于我们的组织所在地,数据的来源地,以及组织政策。我们必须考虑清楚这一点(并与我们可能所在的经营地的所有管辖区的律师咨询)。对于什么是关于人的数据,如何获得存储数据的许可,如何存储和检索被授予的许可,我们是否需要以及在什么情况下向提供数据的人提供访问权,都有严格限制。这些限制可能来自法律、行业惯例、保险条例、公司管理政策或其他来源。在一些司法管辖区,常见限制的例子包括禁止在未经个人明确书面同意的情况下收集个人身份信息(PII),同时要在数据主体要求下删除该数据。是否收集数据以及如何收集数据不是技术问题。它是一个政策和管理的问题(这个问题会在第6章进行更详尽的介绍)。

如果我们被允许收集和存储数据,那么必须禁止外部访问以保证这些数据的安全。泄露用户的私人数据很少会给企业带来什么好处。此外,访问必须受到限制,甚至对员工也是如此。员工不应该在没有详细记录的情况下无限制地查看或更改私人用户数据。

另一种减少数据访问权限和审计方面的问题的方法是对数据进行匿名化。一个相对简单和有价值的选择是使用假名。在这里,私人识别码以一种可逆的方式被替换成其他识别码,逆转假名需要访问额外的数据或系统。这可以保护数据不被在管道上工作的工程师随意查看,但当我们发现自己需要逆转匿名化时,则允许查看。假名也希望能保留与我们的模型相关的数据的属性。换句话说,如果数据字段在特定情况下以某种方式相似是很重要的(例如,想想邮政编码,当位于同一城镇或同一个城市的同一地区时,它们的前缀是相同的),那么我们的假名可能需要保留这一点。尽管这种级别的保护可以防止随意检查,但重要的是,要将假名数据视为与完全非匿名数据一样有潜在风险的数据。历史上有很多这种假名数据暴露用户的真实私人信息的案例(案例请参阅下面的内容)。

不同级别匿名化的应用示例

根据被访问的数据的敏感性,需要对数据进行不同的控制。

原始数据

数据不包含PII,或者我们有极其严格的访问控制,而且PII本身也很关键(例如,医疗数据)。

假名数据

已经对其进行严格的访问控制。偶尔需要进行可控的人工检查,但PII数据本身与检查无关(例如,信用卡数据的前缀被清空或转换,只留下最后四位数字:XXXX-XX-1234——这仍然是非常多的数据,但有一些合理的保护措施使其不会被随意检查)。

匿名数据

其他所有情况下,我们收集PII,但不需要它来排除故障或提升模型性能。

一种更好的方法是永久地删除关于一个人的私人数据和我们用来训练的数据之间任何直接相关的联系。如果我们能够永久地删除私人数据和个人之间的联系,数据的风险就会大大降低,处理数据的灵活性也会增加。当然,这并不像看起来那么简单[3]。以一种不是简单可逆但仍有价值的方式做到这一点可能很困难。虽然存在许多优秀的技术,但一个公认的基本观点是将拥有的数据结合到一起,以确保任何报告的数据都与任何真实的个人唯一标识符没有联系。这是许多严肃的人口研究组织所采取的方法,特别是美国人口调查局。然而,要做到这一点,还有很多细微的地方需要注意。尽管我们会参考什么是正确的匿名化,但它是一个超出本书范围的话题。

不要将自己的身份匿名化

在过去的几年里,有几个非常受关注的失败案例已经让匿名化的难点变得十分清晰。特别是哈佛大学政府系的Latanya Sweeney博士http://latanyasweeney.org的著作值得一读。Sweeney博士轻松地证明,尽管当时的马萨诸塞州州长威廉·韦尔德的健康记录是“匿名”的,但只需知道他的性别、年龄和邮政编码(可从选民记录中免费获得),就可以识别出他的健康记录。Sweeney博士进一步证明,美国87%的人只需通过三条信息(性别、年龄和邮政编码)就能被唯一识别,更多细节可参见Nate Anderson“Anonymized Data Really Isn’t——and Here’s Why Not”(https://oreil.ly/V39HT)。

类似的研究表明,浏览器用户代理字符串与邮政编码或其他几种信息相结合,可以唯一地识别一个人。这个故事的寓意是匿名化的实现十分困难,你肯定需要自学这方面的知识,或将其外包给擅长此事的人或平台。匿名化本身就是一个重要的专业。如何正确地匿名化与一些数学上的复杂话题密切相关,如密码学,它是一个独立的专业。

最终,我们需要能够删除这些数据。我们可能会根据个人用户的要求、当地法律、欧盟《通用数据保护条例》(GDPR;https://gdpr-info.eu)等法规而这样做,或者在其他情况下,我们不再有存储这部分数据的权限。事实证明,删除数据并使其真正地被删除很困难。

这至少从早期的MS-DOS时代就开始了,当时删除一个文件只是删除了对它的引用,而不是实际数据本身,这意味着你可以凭借足够的决心和运气重建文件。从不得不追踪数据的多个副本到元数据管理,今天的计算环境的一切都使删除比当年要更困难。在大多数分布式存储系统中,数据被分割成许多部分,并存储在不同的物理机器上。根据实际情况来说,要确定每一个可能有数据写入的耐用存储设备(机械硬盘或固态硬盘),基本上是不可能的。

重要的是,人们确定他们想要没有任何阻碍地删除自己的数据。平衡这一点的一种方法是在真正删除数据之前施加一个短暂的延迟。用户在要求删除数据后,可能会被授予几小时甚至几天的时间来取消该请求。但在某些时候,一旦我们确认该请求是确定的、合法的,我们就需要追踪该数据的每一份副本并将其剔除。根据它的存储方式、数据结构、索引和备份可能会被重建,以使访问与之相关的数据和删除之前一样高效可靠。

与大多数任务相同,删除数据的任务要经过细致的思考之后才能完成。如果你的系统没有考虑那么多,你可以使用一些变通方法。这里有两个常见的优化方法:

定期重写数据

当存在一个重新生成数据的过程时,我们可以利用前面提到的“不要立即删除数据”的策略,在下次重写数据时排除“已删除”的数据。这假设数据再生的周期与预期的可接受的删除延迟相匹配。这也假设数据的重写能有效地实际删除数据,虽然现实情况很可能根本不是这样。

对所有数据进行加密并销毁一部分密钥

以这种方式设计的系统有一些明显的优势。特别是,它可以保护“静态”的私人数据(写入持久性存储)。删除数据也很简单:如果失去了用户数据的密钥,我们就不能再读取这些数据。弊端大多是可以避免的,但值得认真考虑:任何采用这种策略的人都需要非常可靠的密钥处理系统,因为如果密钥丢失,所有的数据都会丢失。这也会使可靠地从密钥系统的每个备份中删除密钥变得困难。