面向机器学习的数据训练指南-全-
面向机器学习的数据训练指南(全)
原文:
zh.annas-archive.org/md5/f5764f2adb9c90789f895fba1d4014d2译者:飞龙
第一章:训练数据介绍
数据无处不在。视频、图像、文本、3D、地理空间、文档等等。然而,以其原始形式,这些数据对于监督式机器学习(ML)几乎无用。我们如何利用这些数据?我们如何记录我们的智慧,以便通过 ML 再现它?答案就是训练数据的艺术——使原始数据变得有用的学科。
在这本书中,您将学到:
-
全新的训练数据特定概念
-
训练数据的日常实践
-
如何提高训练数据的效率
-
真实世界案例研究
-
如何使您的团队更加 AI/ML 中心化
在我们能够涵盖这些概念之前,我们首先必须理解这一章将揭示的基础知识。
训练数据是将原始数据塑造、重塑、形成和消化成新形式的过程。从原始数据中创造新的含义以解决问题。这些创造和破坏的行为处于学科专业知识、业务需求和技术要求的交集。这是一组跨越多个领域的多样化活动。
所有这些活动的核心是注释。注释生成了结构化数据,可供机器学习模型使用。没有注释,原始数据被认为是非结构化且不可用的。这就是为什么现代机器学习用例,包括计算机视觉、自然语言处理和语音识别,都需要训练数据的原因。
要在一个例子中巩固这个概念,让我们详细考虑注释。当我们注释数据时,我们在捕获人类知识。通常,这个过程如下所示:提供一个媒体片段,比如图像、文本、视频、3D 或音频,并附上一组预定义的选项(标签)。人类审查媒体并确定最合适的答案。例如,声明图像的某个区域是“好”还是“坏”。这个标签提供了应用机器学习概念所需的上下文(图 1-1)。
但我们是如何做到的?我们是如何达到这一点的?正确的媒体元素与正确的预定义选项在正确的时间显示给正确的人?导致并随着注释或知识捕获实际发生的许多概念。总之,所有这些概念都是训练数据的艺术。

图 1-1. 训练数据过程
在这一章中,我们将介绍训练数据是什么,为什么它很重要,并深入探讨将构成本书其余部分基础的许多关键概念。
训练数据意图
您可以通过训练数据做什么?它最关心的是什么?人们希望通过训练数据实现什么?训练数据的目的因不同的用例、问题和场景而异。让我们探讨一些最常见的问题。
您可以通过训练数据做什么?
培训数据是 AI/ML 系统的基础 - 支撑这些系统运行的基础。
培训数据使您能够构建和维护现代 ML 系统,例如创建下一代自动化、改进现有产品,甚至创建全新产品。
为了有用,数据需要以结构化的方式呈现给 ML 程序。这就是培训数据的作用 - 添加和维护结构,使原始数据有用。如果你有出色的培训数据,你就在通向一个优秀的整体解决方案的道路上。
在实践中,常见的用例集中在
-
改进现有产品(例如性能),即使当前尚未包含 ML 部分
-
制造新产品,包括以有限或“一次性”方式运行的系统
-
研发
培训数据贯穿 ML 程序的所有部分。培训数据在您运行 ML 程序之前就出现了,在运行期间涉及输出和结果,甚至在分析和维护之后也是如此。此外,培训数据的关注点往往是长期存在的。例如,在启动并运行模型之后,维护培训数据是维护模型的重要组成部分。
本书的主要关注点是创建和维护新数据。某一时刻的数据集是培训数据复杂过程的输出。例如,一个训练/测试/验证分割是原始新颖集合的衍生物。而这个新颖集合本身只是一个快照,一个对更大培训数据过程的单一视角。类似于程序员决定打印或记录变量的方式,打印的变量只是输出,它并没有解释获取所需值所需的复杂函数集合。本书的目标之一是解释背后获取可用数据集的复杂过程。
注释,即人类直接注释样本的行为,是培训数据的重要组成部分。然而,它只是其中的一部分,培训数据的过程涉及后面本章中概述的许多其他部分。
培训数据最关心什么?
这本书涵盖了各种人员、组织和技术问题。我们将在稍后详细讨论每一个概念,但在此之前,让我们先思考培训数据关注的领域。
例如,模式 Schema 如何准确地表示您的注释与它们在您的用例中的意义之间的映射问题?如何确保原始数据被收集并以与问题相关的方式使用?如何应用人类验证、监控、控制和修正?
在存在如此多的人为因素时,如何重复达到和维持可接受的质量水平?它如何与其他技术集成,包括数据源和您的应用程序?
虽然不完美,为了帮助组织这一点,您可以广泛划分为以下主题:Schema、原始数据、质量、集成和人类角色。接下来,我将深入研究每个主题。
Schema
Schema 在训练数据的每个方面都是核心。Schema 是人类输入和您用例含义之间的映射。它定义了机器学习程序能够输出的内容。它是至关重要的链接,是将每个人的辛勤工作联系在一起的东西。所以显而易见的是,它很重要。
一个好的 Schema 对您的特定需求是有用和相关的。通常最好创建一个新的、定制的 Schema,然后针对您的具体情况进行迭代。在获取灵感时,从特定领域的数据库借鉴或填写某些详细级别是正常的,但务必在为新的、新颖的 Schema 提供指导的情况下完成。不要期望来自另一个上下文的现有 Schema 能在没有进一步更新的情况下适用于机器学习程序。
那么,为什么根据您的具体需求设计它很重要,而不是某些预定义集?
首先,Schema 既适用于人类注释又适用于机器学习。现有的领域特定 Schema 可能是为不同上下文的人类使用或经典非机器学习上下文的机器使用而设计的。这是其中一种情况,看起来输出很相似,但实际上形成方式完全不同。
就像两个输出相同值的不同数学函数,但运行在完全不同的逻辑上。Schema 的输出可能看起来相似,但其中的差异对于使其友好地用于注释和机器学习至关重要。
第二,如果 Schema 无用,即使很棒的模型预测也是无用的。Schema 设计的失败可能会导致整个系统的失败。这里的背景是,机器学习程序通常只能预测 Schema 中包含的内容。¹ 很少有机器学习程序能够产生比原始 Schema 更好的相关结果。同样罕见的是,它会预测出人类或人类群体在查看相同原始数据时无法预测到的内容。
经常看到有价值存疑的 Schema。因此,停下来仔细思考一下“如果我们自动使用这个 Schema 标记数据,它对我们是否真正有用?”以及“人类查看原始数据时,是否可以合理地从 Schema 中选择符合它的内容?”是非常值得的。
在本书的前几章中,我们将涵盖 Schema 的技术方面,并稍后通过实际示例回到 Schema 的关注点。
原始数据
当我们考虑原始数据时,最重要的是以与 Schema 相关的方式收集和使用它。
为了说明相关性的概念,让我们考虑在收听收音机中的体育比赛、在电视上看到它或亲自参加比赛之间的差异。无论使用哪种媒介,这是同一事件,但在每种情境下,你接收到的数据量是非常不同的。收集的上下文框定了数据的潜力。因此,例如,如果你试图自动确定球权,视觉数据可能比收音机数据更适合。
与软件相比,我们人类擅长自动进行上下文相关的相关性推断和处理嘈杂数据。我们做出许多假设,通常依赖于此时并非直接感知到的数据来源。理解上述直接感知视觉、声音等之上的上下文的能力,使得我们很难记住软件在这方面更为有限。
软件只能通过编程到其中的数据或代码获取到上下文。这意味着处理原始数据的真正挑战是克服我们对上下文的人类假设,以便使正确的数据可用。
那么你该怎么做呢?其中一种更成功的方法是从模式开始,然后将原始数据收集的想法映射到其中。它可以被视为一个问题 -> 模式 -> 原始数据的链条。模式的需求总是由问题或产品定义的。通过这种方式,总能轻松检查“给定模式和原始数据,人类能做出合理的判断吗?”
着眼于模式,还鼓励考虑收集数据的新方法,而不仅限于现有或最易获得的数据收集方法。随着时间的推移,模式和原始数据可以共同迭代,这只是一个开始。在产品方面,另一种关联方式是,模式代表了产品。因此,使用“产品市场匹配”的陈词滥调,这是“产品数据匹配”。
要将上述抽象概念具体化,以下是我在行业中最常见到的一些内容:
在开发和生产过程中使用的数据之间的差异是最常见的错误源之一。这是普遍的,因为它在某种程度上是不可避免的。这就是为什么在迭代过程的早期能够达到某种程度的“真实”数据是至关重要的。你必须期待生产数据将会不同,并将其作为你的数据整体收集策略的一部分进行规划。
数据程序只能看到原始数据和注释。只能看到给予它的东西。如果人类标注员依赖于无法从呈现的样本中理解的知识外的知识,那么数据程序可能不会具备这种上下文,它将失败。我们必须记住,所有必需的上下文必须存在,无论是在数据中还是在程序的代码行中。
总结一下:
-
原始数据需要与模式相关。
-
原始数据应尽可能与生产数据相似。
-
原始数据在样本本身应具有所需的所有上下文。
质量
训练数据质量自然是一个连续的过程。在一个情境中可接受的东西,在另一个情境中可能就不行了。
那么,影响训练数据质量的最大因素是什么?
我们已经讨论了其中两个:架构和原始数据。例如:
-
一个糟糕的架构可能比糟糕的标注者引起更多的质量问题。
-
如果在原始数据样本中概念不清楚,那么它很可能对机器学习程序来说也不清楚。
通常,标注质量是接下来最重要的一个项目。标注质量很重要,但也许不是你所期望的方式。具体来说,人们倾向于认为标注质量是“它是否被正确标注了”?但是“正确”通常是超出范围的。
要理解“正确答案”通常超出范围的方式,让我们想象我们正在标注交通灯,而你所呈现的样本中的灯是关掉的(例如停电),而我们的架构的选项只有活动交通灯的各种变化。显然,要么架构需要更新以包括“关掉”的交通灯,要么我们的生产系统永远无法在可能会发生交通灯停电的情境中使用。
要进入一个稍难以控制的案例,考虑交通灯是否非常远或者处于奇怪的角度,这也将限制正确标注的能力。通常这些情况听起来应该是容易管理的,但在实践中往往不是这样。因此,标注质量的真正问题往往是围绕着架构和原始数据的问题。因此,标注质量更多地是关于问题的沟通,标注者在架构和数据中表现出问题,而不仅仅是正确地标注。
希望这已经让大家深刻认识到架构和原始数据值得高度关注。然而,正确的标注仍然很重要,其中一种方法是让多人查看同一样本。这通常是昂贵的。必须有人解释对同一样本的多个意见的含义,这会进一步增加成本。对于一个有合理复杂度的架构的行业可用案例来说,对意见进行的元分析将是一个进一步的时间消耗。
想象一群人观看体育比赛的即时重播。试想着统计抽样他们的意见来获取“证据”来确定什么是“更正确”的。与此不同的是,我们有一位裁判单独审查情况并作出判断。这个判断可能是对的,也可能不对,但比试图调查群众更具成本效益,并且实际上运作更好。
类似地,通常更具成本效益的方法是随机抽样数据的百分比进行审查循环,并且标注者在出现问题时提出架构和原始数据匹配的问题。稍后将更深入地讨论这个审查循环和质量保证过程。
如果审查方法失败,并且您认为仍然需要多人参与,那么您可能存在糟糕的产品数据适配性,并且需要更改架构或原始数据收集以修复它。
从架构、原始数据和注释中放大,质量的另一个重要方面是数据的维护和与 ML 程序的集成点。质量包括成本考虑、预期使用和预期故障率。
总结一下,质量首先主要由架构和原始数据形成,然后由注释者和相关流程形成,最后由维护和集成来补充。
集成
许多时间和精力集中在“训练模型”上。然而,这经常忽略了一个主要因素,因为训练模型是一个主要的技术概念,主要集中在数据科学上。
那么训练数据的维护呢?ML 程序的输出结果如何,比如抽样、查找错误、减少工作量等,与训练模型无关?那么与结果的应用集成如何?技术如何测试和监控数据集?硬件?人类通知?技术如何打包到其他技术中?
训练模型只是其中一个组成部分。要成功构建一个 ML 程序、一个数据驱动程序,我们需要考虑所有技术组件如何协同工作。为了避免重复发明轮子,我们需要了解不断增长的训练数据生态系统。
关于处理集成的几个关键方面需要记住:
-
只有能够被某物消费的培训数据才有用,通常是在更大的程序中。
-
与数据科学的集成是多方面的,不仅仅是一些最终“输出”的注释。它关乎持续的人类控制、维护、架构、验证、生命周期、安全性等等。一批输出的注释就像是单个 SQL 查询的结果,它是对复杂数据库的单一、有限视角。
-
训练模型只是整体生态系统的一小部分。
人类角色
训练数据涉及人类、主题专家和注释者直接参与过程。人类通过数据进行编程、创建和控制。
人类通过控制训练数据来控制数据程序。这包括控制我们到目前为止讨论过的方面:架构、原始数据、质量以及与其他系统的集成。当然还包括注释本身,人类查看每个单独样本。
这种控制在许多阶段和许多人员中进行:从最初的训练数据到对数据科学输出的人类评估,验证数据科学结果。这么多人参与,与传统的机器学习非常不同。
我们有新的指标,比如接受了多少样本,每个任务花费多长时间,数据集的生命周期,原始数据的保真度,模式分布的分布情况等等。这些概念可能与数据科学概念重叠,比如类分布,但值得单独思考。例如,模型指标基于训练数据的地面真实性,因此如果数据错误,指标也会错误。正如在质量保证部分讨论的那样,围绕注释者一致性的指标,错过了模式和原始数据问题的更大点。
人工监督不仅仅关乎定量指标。它关乎定性理解。人类对模式、原始数据、单个样本等的观察和理解至关重要。这种定性视角延伸到业务和用例概念中。此外,这些验证和控制很快从易于定义的形式扩展到更多的艺术形式,成为创造行为。更不用说政治和社会对系统性能和输出的期望了。
处理训练数据是一个创造性的机会。以新的方式捕捉人类智慧和见解。在新的训练数据环境中构建问题。创造新的模式、新的原始数据捕捉和其他特定训练数据的方法。专家可以通过注释直接创建新的数据。
这种创造,这种控制,都是全新的。虽然我们已经为各种类型的人机交互建立了模式,但是对于人机学习程序交互的模式远没有那么成熟。对于人类监督数据驱动系统来说,人类可以直接修正和编程数据。
例如,我们期望普通办公室工作人员知道如何使用文字处理,但我们不指望他们使用视频编辑工具。训练数据需要专家。因此,就像今天医生必须学会使用计算机进行常见任务一样,他们现在必须学会使用标准的注释模式。随着人类控制的数据驱动程序的出现和普及,这些交互将继续增加其重要性和变化性。
训练数据机会
现在我们理解了许多基本原理,让我们来构思一些机会。
如果您正在考虑将训练数据添加到您的 ML/AI 程序中,您可能想问的一些问题是:
-
什么是最佳实践?
-
我们是否以“正确”的方式进行?
-
我的团队如何能更高效地使用训练数据?
-
训练数据中心项目可以解锁哪些商业机会?
-
我能把现有的工作流程,比如现有的质量保证流水线,转化为训练数据吗?如果我的所有训练数据都可以集中在一个地方,而不是从 A 到 B 到 C 不停地搬运数据,会怎样?如何更有效地利用训练数据工具?
广义上来说,企业可以:
-
通过推出新的 AI/ML 数据产品增加收入。
-
通过改进现有产品的性能来维持现有收入,通过 AI/ML 数据。
-
减少安全风险 — 降低因 AI/ML 数据暴露和丢失而造成的风险和成本。
-
通过将员工的工作进一步提升至自动化食物链的更高层次来提高生产力。例如,通过不断从数据中学习 — 创建您的 AI/ML 数据引擎。
所有这些元素都可以通过组织来实现转型,我将在接下来详细介绍。
业务转型
你团队和公司对训练数据的心态非常重要。在转型章节中我将提供更多细节,但现在,以下是一些开始思考的重要方式。
-
开始将公司所有现有的日常工作视为训练数据的机会
-
认识到未在训练数据系统中捕获的工作将会丢失
-
开始将注释作为每个一线工作人员日常工作的一部分进行转移
-
定义您的组织领导结构以更好地支持训练数据工作
-
在规模上管理您的训练数据流程。适用于单个数据科学家的方式与适用于团队的方式大不相同,而与拥有多个团队的公司更是不同。
为了实现所有这些目标,重要的是在您的团队和组织中实施强大的训练数据实践。为此,您需要在公司内部树立一个以训练数据为中心的思维方式。这可能很复杂,可能需要时间,但现在进行投资是值得的。
为此,要在项目计划讨论中涉及主题专家。他们将带来宝贵的见解,节省您团队未来的时间。使用工具来维护原始数据的收集、摄取和输出的抽象和集成也是非常重要的。您将需要新的库来实现特定的训练数据目的,以避免重复造轮子。确保您和您的团队报告和描述训练数据非常重要。了解做了什么、为什么这样做以及结果是什么,将为未来的项目提供信息。
现在这些可能听起来很困难,所以让我们再深入一步。当您开始使用训练数据时,您将学习到特定的新概念,这将带来心态的转变。例如,添加新数据和注释将成为您日常工作流程的一部分。当您开始获取初始数据集、架构和其他配置时,您将变得更加了解。本书将帮助您更熟悉新工具、新 API、新 SDK 等,使您能够将训练数据工具整合到您的工作流程中。
训练数据效率
训练数据的效率取决于多个因素。我们将在接下来的章节中详细探讨这一点,但现在,请考虑以下问题:
-
我们如何创建和维护更好的架构?
-
我们如何更好地捕获和维护原始数据?
-
我们如何更高效地进行注释?
-
我们如何减少相关样本数量,以便一开始就减少注释的工作量?
-
我们如何让人们快速掌握新工具?
-
我们如何将这项工作与我们的应用程序结合起来?有哪些集成点?
与大多数流程一样,有很多可以提高效率的地方,这本书将向您展示如何通过健全的训练数据实践来帮助您。
工具熟练度
新工具,如 Diffgram,现在提供了许多帮助实现你的训练数据目标的方法。随着这些工具复杂性的增加,掌握它们的能力变得更加重要。你可能拿起这本书是为了获取广泛的概述,或者优化特定的痛点。工具章节将深入探讨这些问题。
常见的痛点
突出一些常见的挑战,比如:
-
注释质量不佳,成本太高,手工操作过多,容易出错。
-
重复工作
-
主题专家劳动成本过高
-
太多例行或乏味的工作
-
很难获得足够的原始数据
-
原始数据量显然超出了任何手工查看的合理能力。
您希望通过训练数据实现什么目标?
为什么训练数据如此重要
在本节中,我将讨论为什么训练数据对您的组织如此重要。以及为什么强大的训练数据实践至关重要。这些是本书始终关注的核心主题,在今后的内容中您会再次看到它们。
首先,训练数据决定了你的 AI 程序、你的系统能做什么。没有训练数据就没有系统。有了训练数据,机会只受你的想象力限制。任何你能形成架构并记录原始数据的内容,系统都能重复。它可以学习任何东西。这意味着系统的智能和能力取决于架构的质量,以及你可以教给它的数据的数量和多样性。
其次,训练数据工作是上游工作,即在数据科学工作之前进行。这意味着数据科学依赖于训练数据。训练数据中的错误会影响到数据科学的结果。或者用老生常谈的话说 - 垃圾进,垃圾出。图 1-2 展示了这种数据流在实践中的工作原理。

图 1-2. 训练数据和数据科学的概念位置
第三,训练数据的艺术代表了如何思考构建 AI 系统的转变。我们不再过度关注改进数学算法,而是与此同时优化训练数据以更好地满足我们的需求。这是 AI 转型的核心,也是现代自动化的核心。知识工作首次被自动化。
机器学习应用正在成为主流
在 2005 年,一支大学团队采用了基于训练数据的方法,在一个长达 175 英里的沙漠赛道上实现了自动驾驶,赢得了DARPA 大挑战。大约 15 年后的 2020 年 10 月,一家汽车公司在公众中发布了一项具有争议的全自动驾驶技术(FSD),开启了消费者意识新时代。2021 年,数据标注问题开始在财报电话中被提及。换句话说,主流开始接触训练数据。
这种商业化超越了 AI 研究成果的头条新闻。在过去几年中,我们看到对技术的需求急剧增加。我们期望能与软件进行交流并被理解,自动获得良好的推荐和个性化内容。大型科技公司、初创企业和企业都越来越倾向于利用 AI 来解决这些应用案例组合的爆炸性增长。
AI 知识、工具和最佳实践迅速扩展。过去只有少数人的专属领域现在正在成为常识和预构建 API 调用。我们正处于过渡阶段,从研发演示到早期的真实世界行业使用案例阶段。
自动化期望正在被重新定义。对于新车购买者来说,定速巡航已经不再仅限于“保持恒定速度”,还包括“车道保持、距离保持等”。这些不是未来的考虑,而是当前消费者和企业的期望。这些是明确且迫切的需要,需要制定 AI 战略并在公司中具备 ML 和训练数据能力。
成功 AI 的基础
机器学习是关于从数据中学习的。从历史上看,这意味着创建类似日志或类似表格数据的数据集,比如“安东尼观看了一个视频”。
这些系统继续具有显著的价值。然而,它们也有一些限制。它们不能帮助我们做现代训练数据驱动的 AI 可以做的事情,比如构建理解 CT 扫描或其他医学图像的系统,理解足球战术,或者未来驾驶车辆。
这种新型 AI 背后的理念是人类明确地说“这是一个球员传球的示例是什么样子的”,“这是一个肿瘤的样子”,或者“这个苹果的这部分是腐烂的”。
这种表达形式类似于在课堂上老师向学生解释概念的方式:通过文字和例子。老师帮助填补教科书和学生随时间建立的多维度理解之间的差距。在训练数据中,标注者充当教师,填补模式和原始数据之间的差距。
数据集(定义)
数据集就像一个文件夹。通常它有一个特殊的含义,即在同一个地方有“原始”数据(例如图像)和注释。例如,一个包含 100 张图片和一个列出注释的文本文件的文件夹。在实践中,数据集是动态的,并部分存储在数据库形式中。
训练数据是不可或缺的
训练数据将会在很长一段时间内存在。从概念上讲,我认为训练数据的概念将在几十年甚至一个世纪后仍然存在。我如何能如此自信地说呢?让我们思考一下趋势。
正如前面提到的,现代人工智能/机器学习数据的用途正在从研发转向工业应用。我们处于业务周期的早期阶段。自然地,具体的细节迅速变化。然而,围绕将日常工作视为注释的概念、鼓励人们追求更独特工作的想法,以及监督日益强大的机器学习程序的概念,都将长期存在。
在研究方面,关于如何使用训练数据的算法和想法不断改进。例如,某些类型的模型越来越不需要大量数据就能发挥作用的趋势。模型所需的样本越少,就越重视创造广度和深度更大的训练数据。另一方面,在许多行业应用案例中,通常需要更多的数据才能实现业务目标。在这种商业背景下,需要更多人参与训练数据,进一步增加了工具的压力。
换句话说,研究和工业的扩展方向随着时间的推移越来越重视训练数据的重要性。
训练数据控制机器学习程序
任何系统中的问题是控制。控制在哪里?在正常的计算机代码中,这是以人为书写的逻辑形式存在,如循环,条件语句等等。这种逻辑定义了系统。
在经典的机器学习中,第一步包括定义感兴趣的特征和数据集。然后算法生成模型。虽然看起来算法控制一切,但真正的控制在于选择特征和数据。然后算法的自由度由特征和数据控制。
在深度学习系统中,算法自行进行特征选择。算法试图确定哪些特征与给定目标相关。这个目标由训练数据本身定义。事实上,训练数据是目标的整个定义。
它是如何工作的呢?算法的内部部分称为损失函数,描述了算法如何学习实现这一目标的关键部分。算法使用损失函数来确定它距离训练数据中定义的目标有多接近。
更技术化地说,损失是我们在训练期间希望最小化的错误。没有一些外部定义的目标(如训练数据),损失函数就无法工作。在某种意义上,这是一个“目标中的目标”。损失函数的目标是优化损失,但它只能通过有些参考点来实现,这些参考点由训练数据定义。
因此,训练数据是模型与人类定义的目标之间关系正确性的“真实情况”。
进一步理解这种情况的原因,考虑到在许多用例中,损失函数与任务密切相关。例如,给定的物体检测方法通常包括对特定损失函数的引用。也就是说,在“无监督”学习的情况下,损失函数可能更与目标相关。虽然这乍一看似乎是矛盾的,但在实际目的上,对于监督案例来说通常不相关。
新用户类型
在传统软件开发中,最终用户和工程之间存在一定程度的依赖关系。最终用户无法真正说出程序是否“正确”,工程师也无法。
最终用户很难在建立原型之前表达他们想要什么。因此,最终用户和工程师彼此依赖。这被称为循环依赖。改进软件的能力来自于两者的互动,能够共同迭代。
在训练数据方面,当进行文字监督时,人类控制系统的含义。数据科学家在处理模式时控制它,例如选择抽象化,如标签模板。
例如,如果我作为注释者在实际上一个良性的肿瘤被标记为癌症性,那么我将以有害的方式控制系统的输出。在这种情况下,值得理解的是,不可能完全消除这种控制的验证,工程技术无法做到这一点,既因为数据量,也因为缺乏主题专业知识。
曾经有这样一种假设,认为数据科学家知道什么是“正确”的。理论上,他们可以定义一些“正确”的例子,只要人类监督员大致遵循这一指南,他们就知道什么是正确的。问题是,一个说英语的数据科学家如何知道法语的翻译是否正确?数据科学家如何知道医生对 X 光图像的医学意见是否正确?简短的答案是 - 他们不能。随着 AI 系统角色的增长,学科专家越来越多地在超越数据科学的系统上行使控制。
要理解为什么这超出了“垃圾进,垃圾出”这一短语。考虑到在传统程序中,虽然最终用户可能不会感到满意,但工程师可以通过一个称为单元测试的概念,至少保证代码是“正确的”。这并不意味着它提供了最终用户所期望的输出,而只是代码是否执行了工程师认为它应该执行的操作。
在训练数据的背景下编写这种单元测试是不可能的——因为工程师可以控制的控件,如验证集,仍然基于个体 AI 监督员执行的控件。
此外,AI 监督员通常受到工程定义的控制,工程定义了他们允许使用的抽象。最终用户通过数据进行编码。在某种程度上,最终用户被编织到系统本身的结构中。
“内容”和“系统”之间的界限变得模糊是很重要的。
这与传统系统截然不同。例如,在社交媒体平台上,你的内容可能是价值所在,但系统的文字(你输入的框,你看到的结果等)和你发布的内容(文本,图片等)之间仍然清晰可见。
控制的例子包括:
-
抽象概念,比如模式,定义了一级控制。
-
标注,字面上看样本,定义了另一级控制。
虽然数据科学可能控制算法,但训练数据的控制通常以“监督”的角色存在,高于算法。
野外训练数据
到目前为止,我们已经涵盖了许多概念和理论,但实践中的训练数据可能是一件复杂和具有挑战性的事情。
什么使训练数据变得困难?
数据标注的显而易见的简单性掩盖了涉及的广泛复杂性,新颖的考虑因素,新概念和新形式的艺术。可能会出现这样的情况:看起来好像是一个人选择了适当的标签,数据经过了机器处理,然后,哇,我们有了一个解决方案,对吧?嗯,并不完全是这样。以下是一些可能令人困惑的常见元素。
-
当来自各个领域的专家必须紧密合作时。
-
主题专家(SME)正在与技术人员以及反过来的方式进行新的社交互动,这些新的社交互动引入了新的人际挑战。
-
专家有个人经历,信念,固有偏见和先前的经验。
-
用户正在操作具有少量共同期望的新颖标注界面,这些共同期望定义了标准设计的样式。
-
问题本身可能很难,答案不明确或解决方案定义不清晰。
-
即使知识在一个人的头脑中形成,而且该人熟悉标注界面,准确输入这些知识也可能是乏味且耗时的。
-
经常需要大量的数据标记工作,并管理多个数据集以及围绕存储,访问和查询新形式数据的技术挑战。
-
鉴于这是一个新的学科,缺乏组织经验和操作卓越,这些只能随着时间的推移逐步积累
-
拥有强大的传统机器学习文化的组织可能在适应这个基本上不同但在运营上至关重要的领域时遇到困难。这种盲点认为他们已经理解和实施了机器学习,而事实上这是完全不同的形式。
-
缺乏对正确训练数据工具的意识、访问或熟悉
-
作为一种新的艺术形式,一般的想法和概念并不广为人知
-
模式可能非常复杂,包括数千个元素,包括嵌套的条件结构
-
媒体格式带来了一些挑战,如系列、关系和 3D 导航
-
大多数自动化工具引入了新的挑战和困难
而这只是简短列表。
虽然挑战是多样的,有时也很困难,但我们将在本书中解决每一个,为您和您的组织提供可以实施以改进训练数据的路线图。
监督机器的艺术
到目前为止,我们已经涵盖了一些关于训练数据的基础知识和一些挑战。让我们暂时远离科学,专注于艺术。注释的表面简单掩盖了所涉及的大量工作。注释对训练数据来说就像打字对写作一样重要。如果没有人的参与和准确执行任务的动作,简单地在键盘上按键并不会提供价值。
训练数据是一个新的范例,正在涌现出一长串思维方式、理论、研究和标准。这涉及技术表示、人员决策、流程、工具、系统设计以及特定于它的各种新概念。
训练数据之所以如此特殊的一点是,它捕捉了用户的知识、意图、想法、概念,而不是指定“它们是如何”得到的。例如,如果我标记一个“鸟”,我并没有告诉计算机鸟是什么,鸟的历史等等——只是它是一只鸟。这种传达高层次意图的想法与大多数经典编程观点不同。在本书中,我将不断回到这种将训练数据视为一种新形式编码的思想。
一种新事物
训练数据不等同于数据科学。它们有不同的目标。训练数据产生结构化数据。数据科学则消费这些数据。训练数据是将人类知识从现实世界映射到计算机中。数据科学则将这些数据映射回现实世界。它们是同一枚硬币的两个不同面。
就像模型嵌入到应用程序中一样,即使是最小的输入/输出,为了有用,训练数据也必须被数据科学消费。事实上,它被这种方式使用不应该减损其差异性。仍然有将概念映射到数据科学可用形式的过程。关键是在它们之间有清晰定义的抽象,而不是在术语上的临时猜测。
把训练数据看作是所有其他专业实践的一种艺术,而不是把数据科学视为一切开始的起点,似乎更合理。考虑到有多少学科专家和非技术人员参与其中,那种相当荒谬的替代假设似乎是认为数据科学高高在上!
尽管称任何事物为新艺术形式可能是自作多情的,但我在于我只是在给已经做的事情贴标签。事实上,当我们将其视为独立的艺术形式并停止把它硬塞到其他已有的类别中时,一切就显得更合理了。
我在第七章“AI 转型”中详细介绍这个问题。
由于训练数据是新的,语言和定义仍然不确定。以下术语都密切相关:
-
训练数据
-
数据标记
-
人机监督
-
注释
-
数据程序
根据上下文,这些术语可以映射到各种定义:
-
训练数据的整体艺术。
-
注释行为,例如绘制几何形状和回答模式问题。
-
在机器学习(ML)系统中我们想要达到的定义,期望的理想状态,对 ML 系统的控制,包括纠正现有系统。
-
依赖于人类控制的数据系统。
例如,我可以说注释是训练数据整体概念的一个具体子组件。我也可以说“使用训练数据工作”,意味着进行注释的行为。作为一个新兴领域,人们可能会说数据标记,指的只是注释的基本文字意义,而其他人可能指整体的训练数据概念。
简而言之,不值得过多关注这些术语,通常需要了解其使用的上下文来理解含义。
媒体类型
数据有许多媒体类型。流行的媒体类型包括图像、视频、文本、PDF/文档、HTML、音频、时间序列、3D/DICOM、地理空间、传感器融合、多模态。虽然流行的媒体类型在实践中通常得到最好的支持,但理论上任何媒体类型都可以使用。注释的形式包括属性(详细选项)、几何形状、关系等。随着本书的进展,我们将详细介绍所有这些内容,但重要的是要注意,如果存在某种媒体类型,可能会有人试图从中提取数据。
ML 程序生态系统
训练数据与日益扩展的相邻程序和概念生态系统相互作用。通常会将数据从训练数据程序发送到 ML 建模程序。或者在训练数据平台上安装 ML 程序。生产数据,如预测结果,通常会发送到训练数据程序进行验证、审查和进一步控制。这些各种程序之间的联系继续扩展。本书后面将详细介绍数据的摄入和流处理的技术细节。
数据中心化机器学习
专业领域专家(SMEs)和数据录入人员可能每天每天花费 4-8 小时在诸如标注之类的训练数据任务上。这是一项耗时的任务,可能会成为他们的主要工作。在某些情况下,整个团队 99%的时间都花在训练数据上,而只有 1%花在建模过程上,例如使用 AutoML 类型的解决方案或拥有大型团队或 SMEs。⁵
数据中心化 AI 专注于将训练数据作为其重要组成部分。通过专业领域专家创建新数据、新架构、新原始数据捕捉和新注释。开发以训练数据为核心,并将训练数据深度整合到程序各个方面的程序。先有移动端优先,现在有数据优先。
在数据中心化的思维模式下,您可以:
-
使用或添加数据收集点。例如新传感器、新摄像头、捕捉文档的新方法等。
-
添加新的人类知识。
数据中心化方法背后的理念是:
-
大部分工作都在训练数据上,数据科学方面超出我们的控制。
-
在训练数据和建模中,比仅仅改进算法具有更多的自由度。
当我将数据中心化 AI 的这一思想与将训练数据的广度和深度视为一种艺术的想法相结合时,我开始看到广阔的机会领域。您将用训练数据构建什么?
失败
任何系统通常都会有各种各样的错误,但总体上“工作”。数据程序也是如此。例如,某些类别的失败是预期的,而其他类别则不是。让我们深入了解一下。
数据程序在其相关的假设集保持真实时运行。例如,关于架构和原始数据的假设。这些假设在创建时通常最为明显,但可以作为数据维护周期的一部分进行更改或修改。
要深入了解一个视觉示例,想象一下停车场检测系统。该系统可能有不同的视角,如图 1-3 所示。如果我们基于顶视图创建一个训练数据集(左侧),然后尝试使用汽车级视图(右侧),我们可能会遇到“意外”的失败类别。

图 1-3. 比较主要差异的原始数据,可能会导致意外失败
为什么会失败?一个仅训练于如左图所示的顶视图的机器学习系统,在如右图所示的前视图环境中运行时会遇到困难。换句话说,如果在训练期间从未见过这样的图像,系统将无法理解从前视图中看到的汽车和停车场的概念。
尽管这可能显而易见,但一个非常相似的问题导致了美国空军系统的 一次真实世界失败,使他们认为他们的系统比实际情况好得多。
我们如何预防这样的失败?对于这个具体的例子,重要的是我们使用来训练系统的数据与生产数据尽可能接近。那么,还有哪些未在书中明确列出的失败呢?
第一步是意识到训练数据的最佳实践。之前提到人类角色时,我提到了与标注者和主题专家的沟通的重要性。标注者需要能够标记问题。Schema 和原始数据之间的问题。以及表明指定说明和 Schema 范围之外的问题,例如“常识”,即某些事情不对劲。
管理员需要意识到创建一个新颖且命名良好的 Schema 的概念。原始数据应始终与 Schema 相关。数据的维护将是必要的。
在开发过程中,通过对 Schema、预期数据使用情况的讨论以及与标注者的讨论,会暴露出失败模式。
部署系统中的失败示例
鉴于一些系统的新颖性,我们很可能只见到了训练数据中最小的失败案例。
2020 年 4 月,Google 部署了一款医疗 AI 来帮助 COVID-19。⁶ 他们训练了比生产时可用的更高质量的扫描。所以当人们实际使用它时,他们经常不得不重新扫描,以达到预期的质量水平。即使在重新扫描的额外负担下,系统仍然拒绝了大约 25% 的情况。这就像一个电子邮件服务,使您不得不重新发送每第二封电子邮件,并且完全拒绝发送每第四封电子邮件。
当然,这个故事有其细微之处,但概念上显示了开发和生产数据对齐的重要性。系统训练的内容必须与实际使用的内容相似。换句话说,不要在开发集中使用“实验室”级别的扫描,然后期望智能手机摄像头在生产中表现良好。如果生产将使用智能手机摄像头,那么训练数据也需要来自于它。
未能实现期望的偏差
当我们考虑经典软件程序时,任何给定的程序都“偏向”于某些操作状态。例如,设计用于智能手机的应用程序具有特定的上下文,并且在某些方面可能比桌面应用程序更好或更差。电子表格应用程序可能更适合桌面使用。
这种偏差可能是有意的。例如,官方的汇款系统需要禁止随机编辑,而个人记事应用程序可能希望方便进行编辑。一旦编写了这样的程序,取消偏见就变得困难。以编辑为重点的程序建立在用户可以(通常)编辑内容的假设上。而汇款应用程序则建立在用户不能“撤销”交易的多个假设上。
训练数据中有一个类似的概念。让我们想象一个作物检查应用程序。假设它主要围绕影响马铃薯作物的疾病设计。对于从“原始”数据(例如,媒体是以某些高度捕获的)到疾病类型再到样本数量的一切做出了假设。它不太可能对其他类型的作物有效。因此,确保模式与你所需的应用目标和所需偏差匹配非常重要。
我将从多个角度讨论偏差,并提供如何利用训练数据来实现你所需偏差的实用技巧。
什么是训练数据
训练数据不是一个机器学习算法。它不与特定的机器学习方法捆绑在一起。
它不是我们想要实现的目标的定义。基本挑战在于有效地识别和映射所需的人类含义到机器可读形式。
训练数据的有效性主要取决于其与人类定义的含义的相关性以及其合理地代表实际模型使用方式。实际上,围绕训练数据的选择对有效训练模型的能力有着巨大影响。
生成 AI
生成 AI(GenAI)概念,如生成预训练转换器(GPT)和大语言模型(LLMs),在 2023 年初变得非常流行。在这里,我将简要介绍这些概念与训练数据的关系。
注意:在撰写本文时,这一领域正在迅速发展。主要的商业参与者在公开分享方面非常谨慎,因此存在大量猜测和炒作,但缺乏共识。因此,很可能到你阅读本文时,这个生成 AI 部分的一些内容已经过时。
首先,有无监督学习的概念。在 GenAI 的上下文中,无监督学习的广泛声明目标是在不需要新定义的人类制定标签的情况下工作。然而,LLMs 的“预训练”是基于人类来源材料的。因此,你仍然需要数据,通常是人为生成的数据,以获得对人类有意义的内容。不同之处在于,在“预训练”生成 AI 时,数据起初不需要标签来创建输出,亲切地称为无监督的“怪物”。如图 1.4 所示,这个“怪物”仍然需要人类监督来驯服。

图 1-4. 无监督学习与监督微调及人类对齐的关系
广义上说,这些是 GenAI 与人类监督互动的主要方式:
人类对齐
使用人类监督来构建和改进 GenAI 模型。
效率改进
使用 GenAI 模型改进繁琐的监督任务(如图像分割)。
与监督 AI 协同工作
使用 GenAI 模型来解释、结合、接口和使用监督输出。
AI 的一般意识。
AI 正在被主要新闻媒体和公司的财报电话中每天提及。围绕 AI 的一般兴奋情绪显著增加。
我将在下一小节详细阐述人类对齐的概念。
您还可以利用 GenAI 来帮助提高监督训练数据的效率。通过当前的 GenAI 系统,一些“低挂果实”的例子,如通用对象分割,广泛接受类别的通用分类等,都是可能的(带有一些警告)。我将在第八章更详细地讨论这一点,讨论自动化时。
与监督 AI 协同工作大多超出了本书的范围,除了简要说明几乎没有重叠之外。GenAI 和监督系统都是重要的构建模块。
GenAI 的进展再次成为头条新闻。因此,组织正在重新思考他们的 AI 目标,并在总体上更多地投入 AI 倡议,而不仅仅是 GenAI。要推出一个 GenAI 系统,需要人类对齐(即训练数据)。要推出一个完整的 AI 系统,通常需要 GenAI + SupervisedAI。学习本书中有关处理训练数据的技能将有助于实现这两个目标。
人类对齐即人类监督
人类监督,在本书中的重点,通常在 GenAI 背景下被称为人类对齐。本书讨论的大多数概念也适用于人类对齐,有一些案例特定的修改。
目标不是直接学习重复精确的表示,而是“引导”无监督结果。虽然关于人类对齐“引导”方法的具体细节存在激烈的辩论,但当前流行的人类对齐方法具体例子包括:
-
直接监督,例如问答对,排名输出(例如个人偏好从最佳到最差),以及标记明确迭代的关注点,例如不适宜工作。这种方法是 GPT-4 声名鹊起的关键。
-
间接监督,例如最终用户的赞成/反对投票,提供自由形式的反馈等。通常,此类输入必须经过额外的处理才能呈现给模型。
-
定义“宪法” 一套具体的人类监督(人类对齐)原则,供 GenAI 系统遵循。
-
Prompt Engineering,即定义“类代码”的提示,或者用自然语言编写代码。
-
整合到其他系统以检查结果的有效性。
在这里,最佳方法以及如何衡量结果等问题上没有太多共识。对于我个人而言,我特别想指出许多方法都集中在文本上,有限的多模态(但仍然是文本输出)和媒体生成上。虽然这可能看起来很广泛,但它只是更一般的人类将可重复的含义附加到任意现实世界概念的子集。
除了缺乏共识之外,在这个领域还存在矛盾的研究。例如,两种普遍的极端观点是一些人声称出现了新的行为模式,而另一些人则认为基准测试被精心挑选,这是一个错误的结果(例如,测试集与训练数据混淆)。尽管看起来人类监督对此有所影响,但到底影响到什么程度,以及如何影响,采用什么技术,这些在 GenAI 案例中都是一个开放的问题。事实上,一些结果显示,小型与人类对齐的模型可以与大型模型同样或更好地工作。
虽然您可能会注意到术语上的一些差异,但本书中的大多数原则仍适用于 GenAI 对齐。具体而言,所有形式的直接监督都是训练数据的监督。在总结 GenAI 覆盖范围之前的几点注意事项:本书未特别涵盖提示工程,也未涵盖其他 GenAI 特定概念。但是,如果您打算构建 GenAI 系统,仍然需要数据,而高质量的监督将继续是可预见的未来 GenAI 系统的关键组成部分。
总结
本章介绍了机器学习训练数据的高层次概念。
让我们回顾一下为什么训练数据如此重要:
-
消费者和企业对内置机器学习的期望正在增加,无论是现有系统还是新系统,都增加了对训练数据重要性的认识。
-
它作为开发和维护现代机器学习程序的基础。
-
训练数据是一门艺术和一种新的范式。这是一套关于新的、由数据驱动的程序的思想,由人类控制,与传统机器学习分开,由新的哲学、概念和实施组成。
-
它构成了新 AI/ML 产品的基础,通过 AI/ML 升级取代或改进现有业务线的成本,并且是研发的肥沃土壤。
-
作为技术专家或主题专家,现在拥有这一技能集是至关重要的。
训练数据的艺术与数据科学有所不同。它是系统的控制。系统学习的目标。训练数据不是一个算法或单一的数据集。它是一个跨越从主题专家、数据科学家到工程师等人的思维方式,开启新用例和机会的范式。
在继续阅读之前,我鼓励您对早些时候介绍的高层次概念感到自在:
-
架构、原始数据、质量、集成以及人类角色都是关键问题。
-
经典训练数据是关于发现,而现代训练数据是关于复制现有知识。
-
深度学习算法生成基于训练数据的模型。训练数据定义了目标,算法定义了如何朝着这个目标努力。
-
在实验室验证的训练数据很可能在现场失败。通过主要使用现场数据作为起点、通过调整系统设计,并期望快速更新模型,可以避免这种情况。
-
对训练数据理念、假设、过程和工具的高层次概念理解。
-
训练数据就像代码。
在下一章中,我们将介绍如何设置您的训练数据系统以及工具的权衡。
¹ 超出我们关注范围的进一步推论。
² 来自 en.wikipedia.org/wiki/Stanley_(vehicle),“斯坦利以基于机器学习的方法进行障碍物检测而闻名。在斯坦利早期开发中纠正的一个常见错误之后,斯坦福赛车队创建了一个记录‘人类反应和决策’的日志,并将数据馈送到与车辆控制连接的学习算法中;这一行动极大地减少了斯坦利的错误。人类驾驶的计算机日志还使得斯坦利在检测阴影方面更加准确,这是导致 2004 年 DARPA 大挑战中许多车辆失败的问题。”
³ 防务高级研究计划局(DARPA)
⁴ 有统计方法来协调专家意见,但这些方法始终是“额外的”,仍然需要有一个现有的观点。
⁵ 这里我进行了简化。更详细地说,关键区别在于,虽然数据科学的 AutoML 训练产品和托管本身可能很复杂,但参与的人数较少。
第二章:启动和运行
介绍
我们有数据库来顺利存储数据。Web 服务器来顺利提供数据。现在还有训练数据工具来顺利处理训练数据。
数据库与应用程序其余部分集成的已建立过程和期望。
那么训练数据怎么样?如何通过训练数据快速启动?从安装、注释设置、嵌入、最终用户、工作流程等方面,我将覆盖所有关键考虑因素。
我之所以说顺利是因为我不必使用数据库。我可以将数据写入文件并从中读取。为什么我需要 Postgres?因为 Postgres 提供了各种功能,比如保证我的数据不会轻易损坏,数据是可恢复的,数据可以高效地查询。训练数据工具也以类似的方式发展。
在这一章中,我将介绍
-
如何快速启动?
-
训练数据工具的范围
-
使用训练数据工具能带来哪些好处?
-
折衷方案
-
历史
大多数内容都集中在今天对您相关的事物上。我还包括一些关于历史和为何这些工具重要的简短部分。我还将回答其他常见问题,例如
-
训练数据工具的关键概念领域。
-
概述训练数据工具在您的堆栈中的位置。
我通常会将工具作为词语,即使它可能是一个更大的系统或平台。通过工具,我指的是任何帮助您实现训练数据目标的技术。例如,我认为 Diffgram 是一个系统、一个平台,但它也是一个工具。
启动和运行
下面的部分是将您的 ML 程序快速启动的最小可行路线图。出于方便,它被分成几个部分。通常,这些任务可以分配给不同的人员,并且许多可以并行执行。根据多种因素,可能需要数月时间才能完全设置好。
如果您是从一张干净的白纸开始的话,那么所有这些步骤都将适用。如果您的团队已经进展顺利,那么这提供了一个检查表,看看您现有的流程是否全面。
总体来说,总体启动任务包括:
-
安装
-
注释设置
-
最终用户设置
-
数据摄入设置
-
数据目录设置
-
工作流设置
-
初始使用
-
优化
这里的初始部分只是谈论常见的痛点和需要做的事情。稍后在考虑部分下,我将讨论特定项目的权衡。
如果这看起来很多,那么这就是建立成功系统所需的现实。
在大多数这些步骤中,存在一定程度的交叉,例如几乎任何步骤都可以通过 UI/SDK/API 完成,但在适当的情况下,我会注意常见的偏好。
安装
您的训练数据安装和配置由技术人员或团队完成。
安装的高级关注点包括:
-
供应硬件(云或其他)
-
执行初始安装
-
配置初始安全项,如身份提供者。
-
选择存储选项。
-
容量规划。
-
维护干预运行,如执行更新。
-
配置初始超级用户。
大多数团队在发布复杂的、影响收入的产品时,都会进行自己的安装。这仅仅是数据重要性和其与终端用户的深刻联系的现实。一般来说,数据设置比训练数据平台本身的安装更为灵活,因此数据设置被视为其自身的部分。例如,开始注释屏幕显示在图 2-1 中。
Diffgram 是商业开源并具有完整功能。您可以从diffgram.com下载 diffgram。

图 2-1. 示例 Diffgram 开发安装。
注释设置。
注释设置通常由管理员完成。
-
初始架构设置。
-
初始人工任务设置。
-
围绕相关方式的架构规划。随着这些工具的增长,选项越来越多,它变得像数据库设计一样。
根据复杂性,模式可以通过 SDK 或 API 加载。
注释在以下章节中有更详细的介绍:架构,第三章,注释管理员设置,第七章,以及注释概念,第八章。
终端用户设置。
某种方式,最终用户必须能够向系统输入数据。
这可以通过将数据收集嵌入到您的应用程序中来完成。
或通过专用门户。
-
规划。您将通过直接嵌入应用程序来收集数据吗?还是将其作为独立的门户?
-
开发团队添加数据收集。
-
定制注释门户的外观和感觉。
嵌入式。
您的用户通常是提供监督(注释)的最佳人选。您的用户已经具备了他们想要的上下文。您的用户可以“免费”提供监督,这比试图雇佣越来越大的中央注释团队更为可扩展。您或您的工程团队需要向应用程序添加一些代码以此方式收集数据。
门户
使用独立的门户通常是最简单的。这意味着注释者直接访问您的安装,例如通过网址进行注释。您可以在应用程序中“深度链接”到注释门户,例如链接到特定任务。
数据设置。
您必须以对系统有用的方式加载原始数据。
-
使用摄入工具。
-
集成到您的自定义应用程序中。
-
SDKs/APIs 的使用。
这将在摄入章节中详细介绍。
工作流设置。
您的数据必须能够与您的 ML 程序连接。可以通过手动过程或命名工作流的一部分来实现。
-
将多个操作步骤组合以创建表面化的过程。
-
将常见步骤自动化为流水线。
工作流在第五章中讨论。
数据目录设置。
某种方式,您必须能够查看注释工作的结果。并且必须以设定级别访问数据。
-
查询语言。领域特定的查询语言在训练数据中变得越来越流行。或者能够充分理解原始 SQL 结构以直接查询。
-
使用特定目标的训练数据库如数据发现、过滤等的训练数据专用库。
-
即使设置了工作流程,仍然需要数据目录类型的步骤。
初始使用
总是有一个初始使用期。这是注解者、最终用户、数据科学家、机器学习程序等操作和使用数据的阶段。
-
用户培训,特别是部署到内部用户
-
用户反馈,特别是部署到最终用户
优化
一旦基础设置完成,还有许多概念可以进一步优化。
-
日常工作的优化模式、原始数据和训练数据本身
-
注释熟练度、人体工程学等。
-
字面注释熟练度
-
将数据加载到机器学习工具、库和概念中
-
参与开源训练数据项目
-
对可用新工具的一般知识
工具概述
训练数据工具是必需的,用于部署您的 AI/ML 程序。关键领域包括
-
注释
-
目录
-
工作流
注释
最终用户使用注释工具注释数据。这个领域从注释作为应用程序的一部分到独立的纯注释工具都有涵盖。在最抽象的术语中,这是“数据输入”方面。
-
图像、视频、音频、文本等的字面注释 UI。
-
管理任务,质量保证等等。
目录
目录是数据集的搜索、存储、探索、策展和使用。这是“数据输出”方面,通常涉及一定程度的人类参与。例如查看数据集。
-
导入原始数据、预测数据、元数据等。
-
探索:从过滤不感兴趣的数据到视觉化查看等。
-
调试:调试现有数据,如预测和人工注释。
-
数据生命周期包括保留和删除、个人可识别信息、访问控制
工作流
工作流是训练数据的流程和数据流。它是注释、目录和其他系统之间的粘合剂。考虑集成、安装、插件等。这既涉及数据的输入又涉及输出,但通常更多是在“系统”级别。
-
技术生态系统。
-
注释自动化:改善注释性能的任何事物,如预标记或主动学习。更多深度请参阅第六章。
-
跨团队协作,涉及机器学习、产品、运营、管理等。
-
流向培训:将数据传送至你的模型。
有些产品在一个平台上涵盖了大多数这些领域。
用于机器学习的训练数据
通常机器学习建模和训练数据工具是不同的系统。
预先包含的 ML 程序支持越多,整体系统的灵活性和功能性就越低。
作为类比,在 Word 文档中我可以创建表格。这与电子表格应用程序带来的公式功能显然不同。
通常的解决方法是出色的集成,以便专注于训练数据质量、ML 建模等系统可以成为其自己的系统,但仍与训练数据紧密集成。
本章将重点讨论特定于训练数据的主要子领域,特别是假设模型训练由不同系统处理。
日益增多的工具选择
有越来越多显著的平台和工具可供选择。有些旨在提供广泛的覆盖范围,而其他人则涵盖每个领域中深入和特定的用例。每个主要类别都有数十个显著的工具。
随着对这些商业工具的需求继续增长,我预计市场上会涌现出许多新工具,并在一些更成熟的领域中进行整合。标注是其中一个更成熟的领域。在这个背景下,数据探索相对较新。
我鼓励您不断探索可用的选项,这可能会为您的团队和产品带来不同和改进的结果。
人、过程和数据
员工时间以任何形式经常是最大的成本中心。
良好部署的工具带来许多独特的效率提升,其中许多可以堆叠以创造数量级的性能提升。继续数据库的类比,把它看作是顺序扫描和索引之间的差异。一个可能永远无法完成,而另一个则快速!训练数据工具将您升级到索引的世界。训练数据工具使您能够:
-
直接将监督嵌入您的应用程序中。
-
在人类计算机监督的背景下增强人员、流程和数据的能力。
-
围绕共同核心规范化您的训练数据工作。
-
显现训练数据问题。
训练数据工具同样提供许多超出处理细枝末节的好处。例如,数据科学家可以查询由标注器训练的数据,而无需下载大量数据集并在本地手动筛选。但是,为了使其工作,必须首先设置训练数据系统。
嵌入式
当我们收到垃圾邮件时,我们会将其标记为垃圾邮件,教导系统。我们可以将单词添加到我们的拼写检查器中。这些都是终端用户参与的简单示例。随着时间的推移,越来越多的监督工作将被推动至接近终端用户并嵌入系统中。
最佳实践和能力水平
熟练掌握训练数据工具将需要与学习 DevOps 一样多的工作量。
您的训练数据学习是一个持续的旅程,而不是一个目的地。我提出这一点是为了说明,无论您有多熟悉,或者花费多少时间,始终有更多关于训练数据的学习内容 - 我自己也在不断学习!
人类计算机监督
你可能熟悉“人机交互”(HCI)的概念。用户如何与计算机程序进行交互和参与。通过训练数据,我引入了一个称为人机监督(HCS)的概念。这个想法是你在监督“计算机”。
“计算机”可以是一个机器学习模型,或者一个更大的系统。监督发生在多个层次上,从注释到批准数据集。
与此相对应,在 HCI 中,用户主要是“消费者”,而在 HCS 中,用户更多地是“生产者”。用户正在生产(在交互之上)的监督,这被 ML 程序所消耗。
这里的关键对比是通常的计算机交互是确定性的。如果我更新了什么,我期望它会更新。而与计算机监督不同,就像人类监督一样,它是非确定性的。存在一定的随机性。作为监督者,我可以提供修正,但对于每个新实例,计算机仍然会做出自己的预测。还有一个时间元素,通常 HCI 是“当下”的事情。而 HCS 在更长时间尺度上运行,在那里监督影响一个更模糊不可见的机器学习模型系统。
出于空间考虑,我不会深入探讨这种区别。随着时间的推移,这里的一般想法是继续区分这种新形式的人机监督工作(HCS)和常规计算机使用(HCI)之间的差异。
结束关注点的分离
训练数据工具将最终用户数据捕获问题与其他概念分离。例如,能够添加最终用户数据捕获监督,而无需担心数据流问题。
标准化
训练数据工具是有效运送你的机器学习产品的手段。作为这一复杂目标的手段,训练数据工具带有现代软件中任何领域最多样化的观点和假设之一。
工具有助于在噪声中带来一些标准化和清晰度。它们还帮助使本来可能没有比较基准的团队迅速见光。
-
为什么不让最终用户提供一些监督?
-
为什么要手动进行版本控制,当可以自动进行?
-
当可以流式传输所需的数据时,为什么要手动导出文件?
-
当可以使用单一统一数据存储库时,为什么要让不同团队存储具有略有不同标签的相同数据?
-
为什么要手动分配工作,当可以自动完成?
广泛的工具支持
尝试想象一下的一种方式是,训练数据工具:
Photoshop + Word + Premiere Pro + 任务管理 + 大数据特性存储 + 数据科学工具
-
标注者们期望能够像最好的绘图工具一样进行标注。
-
工程师们期望能够自定义它。
-
管理者们期望现代任务管理像一个专用的任务管理系统一样。
-
数据工程师希望能够有效地摄取和处理大量数据,实际上是一个完整的提取转换加载工具。
-
数据科学家期望能够像使用商业智能工具一样对其进行分析。
一体化系统。
没有合适的训练数据工具就像试图在没有工厂的情况下建造汽车一样。只有通过使用工具才能实现完全设置的训练数据系统。
我们往往习惯于认为熟悉的东西理所当然。这只是一辆车,或者只是一辆火车,或者只是一架飞机。它们都是各自的工程奇迹。我们同样低估了我们不了解的东西。“销售不能那么难”,工程师说。“如果我是总统”等等。我发现许多人不理解训练数据工具的广度。
-
注释的字面工作和任务管理被整合到一个系统中。
-
一套界面,与 Adobe 套件或 Office 相媲美,集成到一个系统中。
-
许多不同功能的系统必须与其他系统中直接使用的输入和输出以及集成的数据科学工具一起工作。
一个发布机器学习软件的范式
与 DevOps 思维方式类似,训练数据思维方式为您提供了一种发布机器学习软件的范式。用非常简单的话来说,这些工具:
-
处理训练数据的基本功能,如注释和数据集。这些事情如果没有工具将会是不切实际的。
-
提供界限以平衡您的项目。您是否真的在遵循训练数据的思维方式?
-
实现训练数据目标的手段,如管理成本、紧密的迭代时间到数据循环等。
权衡
如果您正在进行多个工具的生产使用比较的权衡,以下是一些需要考虑的事项。
在本书的其余部分,我们继续涵盖抽象概念。在这一节中,我停下来讨论真实世界行业的权衡,特别是围绕工具的问题。
成本
常见的成本包括嵌入式集成、终端用户输入开发和定制、商业软件许可证、硬件和支持。
除了商业成本外,所有工具都有托管和存储数据的硬件成本。此外,某些工具还会对使用特殊工具、计算使用等收费。
常见的成本降低方式:
-
终端用户输入(嵌入式)的成本显著低于雇佣更多注释者的成本。
-
尽可能将自动化推到前端。这样可以减少服务器端计算的成本。
-
将真实的数据科学训练成本与注释自动化分开。
常见的许可模型包括无限、按用户、按集群或其他更具体的度量单位。
一些商业开源产品可能允许试用以建立付费许可证的案例,或者个人或教育用途免费。
大多数 SaaS 训练数据服务在免费层有严格的限制。而且一些 SaaS 服务甚至可能有隐私条款,允许它们使用您的数据来构建对它们有利的“超级”模型。
安装版 vs 作为服务的软件
训练数据的数量与其他类型的软件相比非常高。比许多其他典型用例高出十到数千倍。其次,这些数据通常是敏感的,如医疗数据、身份证件、银行文件等。第三,由于训练数据是代码,并且通常包含独特的知识产权和专业知识,保护它非常重要。所以总结训练数据是:
-
高容量
-
敏感
-
包含独特的知识产权
结果是,在你自己的硬件上安装一个工具和使用 SaaS 之间存在巨大差异。
鉴于这些变量,从第一天起就可以在你的硬件上安装训练数据产品确实具有明显优势。请记住,“你的硬件”可能意味着你在流行云提供商中的集群。随着打包选项的改进,越来越容易在你自己的硬件上启动和运行。
这也是开源真正闪亮的另一个领域。虽然 SaaS 提供商有时会有更昂贵的版本可以在本地部署,但检查源代码的能力通常仍然有限(甚至为零!)。此外,这些用例通常相当死板:它是预设的设置和要求集。而那些设计成可以在任何地方运行的软件可以更灵活地满足你特定的部署需求。
开发系统
存在一个经典的“建造还是购买”的辩论。我认为这应该真正是定制化、定制化,还是定制化?
因为在这一点上,没有必要从头开始,因为已经有很多很好的选择可以作为起点。
-
一些选项,如 Diffgram,提供完整的开发系统,允许你在基线平台上构建自己的知识产权,包括在你的应用程序中嵌入注释收集。
-
一些选项有不同程度的开箱即用的定制化。
-
开源选项可以构建和扩展
例如,也许你的数据需求意味着某个工具的摄取或数据库不足够。或者你有独特的 UI 需求。真正的问题是:
-
我们应该自己做这件事吗?
-
让供应商为我们做这件事?
顺序依赖的发现
我喜欢想象的一个心理画面是站在一个大山或山脉的基地。从基地,我看不到下一个山丘。即使从那个山的顶上,我的视角也被下一个山脉所遮挡,以至于在穿越第二个山之前,我看不到第三座山,如图 2-2 所示。基本上,后续的发现依赖于先前的发现。

图 2-2。山丘上的视线,我只能看到下一个山脉。
训练数据工具帮助你顺利地穿越这些山脉,有时甚至能够“看透角落”,给你鸟瞰全局的视角。为了具体化,我只有在意识到随着时间推移,用于注释数据的组织方法通常与数据科学家的需求不一致时,才更好地理解了查询数据的需求。这意味着,无论最初的数据集组织有多好,仍然有必要事后回过头来探索它。
训练数据工具可能会带来意想不到的机会,以改进你的流程并交付更好的产品。它们提供了一个基准流程。它们帮助避免认为自己已经重新发明了轮子,只是意识到一个现成的系统已经做到了,并且更加精细。它们通过帮助你更快地交付、减少风险和提高效率来改进你的业务关键绩效指标。
当然,这些工具并非万能药。它们也并非没有 bug。像所有软件一样,它们会有小故障。在许多方面,这些工具仍处于早期阶段。
规模
迪士尼世界从一个类似于游戏厅的本地娱乐中心运作。对迪士尼有效的方法并不适用于游戏厅,反之亦然。
正如我在自动化章节中所述,在规模的极端端,一个完全设置好的训练数据系统允许你几乎按需重新训练你的模型。改进时间到数据的速度(数据到达后到模型部署之间的时间)接近零,可能意味着战术相关性或毫无价值的差异。
经常我们用于常规软件的规模思考的术语在监督式训练数据中并不像预期那样清晰定义。在这里,我花一点时间来设定一些关于规模的预期。
定义规模的有用性是什么?
首先要了解你所处的阶段,以帮助确定你的研究方向。其次,要了解不同规模的工具是为不同规模而设计的。一个粗略的类比可能是 sqlite 与 postgres。从简单到复杂有两个不同的目的。
一个大项目通常会有来自嵌入集合的注释比例最大。一个超大项目可能每月经过数十亿次注释。到了这个阶段,不再是单一模型的训练,而更多是关于路由和定制一组模型,甚至是用户特定模型。
另一方面,对于小项目来说,如果你打算完全使用你的数据,数据发现工具可能并不相关。
对于中等规模及以上的项目,如果团队将全天候地在其上工作,你可能更希望他们经过几个小时的培训,学习更复杂工具的最佳实践。
那么为什么这么难呢?首先,野外大多数数据集并不真正反映商业项目的相关内容,或者是误导。例如,它们可能是以一种对于常规商业数据集不切实际的成本水平收集的。这部分是为什么“数据集搜索”并不真的那么有意义,大多数公共数据集不会与你的用例相关,当然也不会为每个最终用户定制。此外,大多数公司对 AI 项目的深度技术细节保密程度显著高于常见项目。
所有项目仍然面临非常真实的挑战。表 2-1 将项目分为三个桶,并讨论了每个桶的共同属性。
表 2-1. 数据规模比较
| 项目 | 小型 | 中型 | 大型 |
|---|---|---|---|
| 嵌入式或中央门户 | 中央 | 混合(既嵌入式又中央) | 混合,其中>90%的注释来自嵌入式 |
| 在一定时间内的静态注释量。 | 数千 | 数百万 | 数十亿 |
| 媒体类型 | 单一,例如整个团队都集中在视觉上。 | 多种媒体类型,例如多个项目,如视觉,文本等。 | 多种媒体类型 |
| 注释人员(主题专家) | 单个人或小团队 | 最终用户和中等规模团队 | 主要是最终用户和多个团队的人员 |
| 从事数据工程,数据科学等角色的人员 | 单个人 | 一队人员数据帽子 | 多个人员队伍 |
| 建模概念 | 单一模型 | 一组命名模型。 | 自动将数据“路由”或通道到各种模型。每用户定制和建模。 |
| 模式复杂性 | 几个标签或几个属性。 <100 个元素 | 一组属性,可能有成千上万个元素 | 如产品需求所述复杂 |
| 受影响的收入 | 没有正式附加金额或纯粹研究 | 百万或数亿美元受工作影响 | 数百万美元或数十亿美元受工作影响 |
| 系统负载(每秒查询数)QPS | <1 QPS | <1000 QPS | >1000 QPS |
| 主要关注点 | 起步简单和易用性 工具成本(工具可能无需或低预算) | 工具效果,工具的支持和正常运行时间,开始考虑优化,可能计划转向大规模 | 嵌入式数据收集,数据量(“规模”),定制,安全性,团队间问题,假设每个团队已经在进行他们熟悉的优化。 |
当然,有许多例外和细微差别,但如果你试图确定项目范围,这可能是一个很好的起点。当你倾向于更大的用例时,以下内容变得更为重要:
-
嵌入式,最终用户注释
-
正常的系统扩展问题
-
以标准化方式与多个团队互动,例如对多种数据类型采用相似的流程
从小规模过渡到中等规模
这也适用于从零开始规划中等规模系统。
一些需要考虑的事情
-
工作流
-
集成
-
使用更多的数据探索工具
还请参阅关于主要规模的部分,以进行进一步的方向规划。并不是所有这些问题都会适用或可行,但了解它们是很有益的。
大规模思考
如果您计划在大规模运作,请记住以下几点:
如何将更多的监督工作交给最终用户?没有嵌入计划的中心团队是一个变动成本,它会随项目范围、质量期望和用户数量的增加而增加。而如果持续维护的重点是与最终用户嵌入,那么中心团队可以被视为固定的启动和质量保证成本。
数据在系统中移动的速度是多少?从新数据到升级的受监督数据,再到新模型需要多长时间?这类似于 DevOps 的速度。
在过去几年里,商业工具市场发生了巨大变化。几年前完全不可用的东西现在可能是现成的选择。现在正是重新思考每个团队的独特增值是什么的好时机。您是否可以更容易地定制一个正在进行的项目,而不是自己处理所有的基础设施?我们真的需要自己建造这个吗?
重新考虑与开源标准对齐对于那些可能在这些标准出现之前形成的大型团队尤其重要。
我们真的需要复制这些数据吗?在数据在这些阶段传输(例如通过事件)或者在静态时复制的情况下,我们是否有更集中的方式可以存储这些数据?如果您绘制出您的 ML 和训练数据的各个部分,您可能会对数据不必要地传输多少次感到非常惊讶。
您是否有现有的经典(以发现为重点)的训练数据系统?那里的概念和意识是否与这种新形式的人工监督相关?极为天真地说,您可以将一个给定的数据存储视为一个基础层,数据在其中分为受监督案例和发现案例。因此,无论您几年前制定的整体 ML 架构计划如何,如果它没有考虑到受监督注释,那么它需要完全重新设计。受监督学习与现有架构不匹配,试图强行塞入并不会很好地工作。相反,团队需要创建一个新的 ML 架构计划,将受监督学习置于其自己的架构中。
有多少人需要发现问题并对模型进行修正?例如,最不好的做法可能是:手动反馈过程,然后是中央人工注释员,然后是 ML 工程师,最后是经理。在这个过程中,可能需要数月才能发布模型的下一个迭代版本。(想象一下,如果每次用户想要向他们的拼写检查词典添加一个单词时都必须召集一个中央团队。)最佳实践是嵌入式数据收集,自动重新训练,自动验证和由中央质量保证团队进行抽查。
您对端用户监督数据分享的政策是什么?是否有声明的流程用于共享数据集投入生产?例如,这可能是您的应用程序中的专用逻辑,其中您的端用户、超级用户等拥有控制权。或者对于系统范围的数据,可能类似于批准拉取请求。您可能已经有了模型部署流程。查看数据实际训练的重要性也是很重要的。
评估数据的投资回报率,特别是增量添加或删除的数据。在较大的规模上,考虑新数据相对于业务目标的投资回报率更为实际和有用。例如:我们实际上使用了存储数据的百分之多少?这个数据集对收入有多大影响?
数据的形状真的是什么样子?例如,如果您为每个图像、音频文件等执行请求/响应循环,这真的有意义吗?相反,可以在一个中心位置查询数据,然后进行流式传输吗?
我的数据治理政策实际上是否在各个团队中得到实施?数据集存储是否像个别元素一样具备相同的过期控制意识?团队之间或工具配置是否对齐?
安装选项
选择包、存储和数据库是安装配置的关键部分。
打包
训练数据工具有各种包。代码打包的方式有时可以显示其目标受众,比如小型、中型或大型项目。
单一语言特定包
有些工具可能会安装一个单独的包,例如一个 Python 包。通常这些都是单点“插件”,而不是完整的系统。这些工具通常仅适用于小型项目。
Docker
许多工具将需要 Docker 容器、多个容器或类似的东西。Docker 是一种软件打包方式。Docker Compose 是一种组合多个包的方式。理论上,只要提供了 Docker 镜像,您可以根据需要管理这些镜像。
Kubernetes(K8s)
K8s 编排容器。这是生产环境的默认推荐,尽管还有许多其他选项。主要的云服务提供商在 Kubernetes 的实现上有明显不同。具体来说,某个平台上可能需要数小时的工作,在其他平台上可能更加容易。训练数据通常代表着巨大的数据量,因此关于数据访问、存储和使用的期望是新的,通常与许多预优化的云示例不符合。
存储
系统将在何处部署?如果您在另一个国家有用户,这如何影响您的性能和安全目标?如果云存储选项不可用,什么样的本地选项将满足您的需求?
数据库
Diffgram 默认使用 PostgreSQL。还有许多其他数据库可用。通常至少有 3 组不同的人参与设置和使用系统。
-
管理员
-
技术(工程,数据科学)
-
注释者
数据配置
针对特定媒体类型,有各种配置需要注意。例如,对于视频,按需存储单独的帧与否。更一般地,可能有关于存储何种“工件”的选择,比如缩略图或网页优化版本。
版本解决方案
有多少版本 - 可能是所有之前的注释都需要?每次更改都应记录吗?
在某些系统中,这可能是关键的,或者仅仅是一个有用的功能。作为一个经验法则,启用完整版本控制很可能会导致数据库至少 80%的内容由这些软删除的注释组成。
数据生命周期
是否必须在一定时间内删除数据?或者必须保留一段时间?一段时间后是否可以自动存档一些内容?
注释界面
自然而然,需要一个人类使用的接口来指导和监督机器。基于 Portal 和嵌入式注释界面仍在不断发展。在某些方面,界面趋向于具有相对相似的功能集,但这仍然是一个非常主观的领域。在我看来,最重要的一点是接口嵌入和呈现给最终用户的效果如何。用户能够在最相关的上下文中提供有意义的监督是至关重要的。
各种界面类型的复杂性光谱和尚未标准化的期望多样性,使得围绕注释界面的讨论变得具有挑战性。例如,围绕属性的注释(如常规表单)通常比视频和 3D 系统更为直接。然而,“表单”本身可能非常复杂。即使在视频领域内,仅仅播放视频作为参考点、对特定时间点进行注释以及更复杂的情况之间的期望,都有着不同的范围。
回到我们的项目规模概念,对于小规模项目,整体的风格感和开箱即用感可能很重要。对于大规模项目,嵌入式界面将被定制,并且更可能根据特定要求进行工程设计。例如选择哪些组件在何处显示,颜色和样式(CSS)主题等。因此,对于大项目,工具的定制能力、工程设计能力和开发能力很重要。
建模集成
您的培训数据系统需要与您的 ML 建模系统进行通信。使用 Diffgram,这通过后续章节中介绍的工作流程完成。虽然有时建模系统可能呈现一些表面上相似的视图,例如具有边界框的输出,但它们通常不支持严肃的培训数据工作。建模集成与流式数据相关,但它们是不同的概念。
多用户与单用户
现代系统,如 Diffgram,默认情况下是多用户的。面向单个用户的系统(例如 Sloth)可能不符合现代培训数据范式,并且可能专注于纯用户界面部分。需要多用户的主要原因是专业知识和数据量。系统可以由单个用户操作一个有限的原型,或者可以在单台本地机器上运行以供测试目的。本章大部分内容集中在多用户和团队系统上。
集成
有几个广泛的集成类别。
-
系统级、一次性设置
-
插件
-
可安装的东西,在框架上运行或者在您的培训数据平台硬件上运行。
培训数据工具的部分功能被深埋在技术堆栈中,而其他部分则暴露给最终用户。
最基本的概念是您必须能够输入原始数据和预测结果,并获得注释。考虑因素包括:
-
硬件。它能在我的环境中运行吗?能够与我的存储提供商一起工作吗?
-
软件基础设施。我是否可以使用所需的培训系统、分析工具、数据库等?
-
应用和服务。它与我的后端和前端系统集成得如何?
-
插件
-
通过 API 和 SDK 提供哪些类型的自定义集成?
-
如何将数据来回传递到培训数据系统?
一些系统提供更高程度的集成。基于 UI 的集成过程交互,不仅用于设置密钥,而且用于拉取和推送数据。
范围
随着这个生态系统的不断发展,在工具设计要处理的用户和数据范围之间存在着不断扩大的界限。一些工具可能涵盖多个范围。通常,工具倾向于向单个用户或真正多个用户倾斜。
如图 2-3 所示,将其视为一个具有两个主要极点的连续体 - 点解决方案和套件解决方案。

图 2-3. 点解决方案和套件连续体
注:书中解释了一些图标。任何系统自然会有输入输出的概念。因此,当我们有一个“Ingest”图标时,它表示整个团队在大公司上可能会处理的内容。进一步的图标,如“Secure”,指的是安全产品,如模糊、PII 等,而不是安全的一般概念。
平台和套件
适用于中型和大型团队以及具有多个团队的公司
从非常高的角度来看,这些系统在心理学上的主要区别:
#1 视培训数据为专门的学科
即使他们拥有其他集成的数据科学产品、服务等,他们也清楚地划分了什么是培训数据,什么不是。
#2 提供一套媒体类型和横向支持
通常,您可以判断它是否是一个更广泛的系统,因为它将覆盖更多 - 甚至所有 - 媒体类型。同样,对于像存储、流媒体到培训、探索等横向支持,可能会有更多的覆盖。考虑到空间的广泛性,我使用“覆盖”这个词,因为即使是最先进和最大的平台也存在漏洞。
#3 广度与深度
进一步扩展#2,一些解决方案可能在媒体类型上提供了很好的覆盖,但在相对表面的深度上。随着解决方案倾向于这一端,它在每个类别的提供深度继续增长。
定制化
这里的主要产品区别在于,这些工具通常假设它们将被定制化,要么通过配置提供更多内置定制选项,要么通过代码提供更多钩子和端点自然定制化。
一般来说,专为大规模设计的系统
-
定制化。几乎所有内容都可以进行用户配置,从注释界面的外观到工作流的结构等。
-
安装。假设安装将由客户至少监督完成。谁拥有加密密钥,数据在静止时存储在哪里等问题都是讨论的一部分。预期需要专门且明确的安全讨论。
-
进行性能期望和容量规划。任何软件,无论多么可扩展,仍然需要更多硬件来进行扩展。
-
预计有许多用户、团队、数据类型等。
-
不提供集成培训。通常是因为集成培训交付的质量低于期望。通常是因为有一个专门的团队致力于进行培训。
注意事项
-
这些系统可能非常复杂且强大。通常需要更多时间来设置、理解和优化以适应您的用例。
-
有时在特定功能的头对头比较中,较大的系统可能也不公平。一个原因是因为对于点解决方案来说,修复可能是高优先级的事情,而在较大系统的范围内可能是低优先级的事情。
-
即使拥有潜在更强的质量控制的大型系统,也会有更多的错误。由于复杂性,可能在小系统中很难破坏的东西,在大型系统中可能会破坏。
点解决方案
区分特征
-
经常混合训练数据和数据科学特性。例如,它可以被宣传为“端到端”或“更快速地训练模型”。
-
专注于单一或少数几种媒体类型。
-
适用于单个用户或小团队。这种使用假设影响到围绕谁创建标签、易用性等功能。
-
作为服务的软件或在一台机器上本地部署
使用
-
最合适的使用方式包括尝试端到端演示,或者如果它工作得足够好且您没有资源使用其他选项。
-
通常由于其简单性质,这些工具设置和获取“结果”更快。它是否会成为您想要的结果通常更加值得怀疑。
-
具有某种形式的内置自动训练。自动训练并不是自动否定,然而,通常中型和较大的团队希望更多控制,因此必须谨慎对待。
-
有时点解决方案在其特定领域的质量非常高。
注意事项
-
这些工具通常限制——无论是技术限制还是有意识的政治限制——可以实现的结果类型。例如,它们可能有一种方法来训练边界框,但没有关键点。反之亦然。这也适用于媒体类型,它们可能有处理图像的方法,但没有处理文本的方法。
-
通常不适合资源更丰富的团队。可能缺少许多主要功能领域,如专用任务工作流功能、摄取、任意存储和查询等。
-
相对于较重的解决方案,通常不太可扩展或定制化。
-
安全性和隐私通常是有限的。具体来说,例如服务条款可能允许这些公司使用您创建的数据来训练其他模型,有时如果不支付,则项目默认为公开等。最终必须信任服务提供商处理您的数据。
-
尽管质量可能很高,但通常需要将点解决方案与其他工具串联起来,这会增加额外的工作量。这在较大的公司尤为突出,其中该工具可能适用于一个团队,但不适用于另一个团队。
成本考虑
- 这些类型的工具通常有成本的“长尾”。它们可能每个标注都有成本。或者训练模型可能是免费的,但提供服务则需要成本(且无法下载)。
工具之间的平衡
一般大多数工具趋向于光谱的一端,如前面提到的较小的用例或稍后将涵盖的更大的用例。也有一些工具在这些极端之间。
一般来说,应该寻找的进展是:
-
更多意识到训练数据作为一个独立的、独立的概念。
-
更多意识到多种解决方案路径。不再是“唯一正确的路径”,而是更加灵活。
-
更大的景观覆盖百分比。例如,可能具有更多的集成和灵活性。
-
更具企业友好性的概念。可能提供本地安装或者客户控制的安装。更加关注定制和功能而不是金色路径心态。
-
可能存在一些关于新增数据的合同保证。
-
如果您的团队已经超越了较小的工具但还没有资源使用较大的工具,这些工具可能能够提供严肃的结果并且适用。
一套工具并不自动更好。然而,对于较小的工具来说,“跨越”到更高水平通常更难,而对于大多数较大系统来说,通常只能部分使用,它们在这个中间路径上相当合适。
机器学习在哪里?
最好的平台在“脆弱的单一 AutoML”和“无为而治”这两个极端之间提供了解决方案。
本质上这意味着专注于人类计算监督的一面。如何将数据传输到机器学习概念中,如何运行自己的模型,与其他系统集成,例如 AutoML、专用训练和托管系统,资源调度等。
隐藏的假设
训练数据工具带来许多好处,并且至关重要。然而,要获得这些好处,您仍然需要考虑这些假设。其中一些通常为 True,其他通常为 False。
在我们讨论常规考虑事项的详细信息之前,了解这些假设是值得的。
True: Meet the team
最终用户、管理员、专门的注释者、工程师、产品、管理人员等。这是一个许多组织中许多人触及的产品,通常有非常不同的目标、关注点和优先级。
True: You have someone technical on your team
必须有人安装、设置和维护系统。即使对于最新的全服务工具,也仍然假定至少有一个人具备技术能力,一个人理解训练数据。
True: You have to do setup.
大多数工具都需要设置。虽然有各种工具可以定义一个狭窄的区域并减少所需的工作量,但这实际上并不是数据编程,而只是消耗一个狭窄定义的服务。
True: You have a budget
所有工具都有一定的成本。现代商业开源工具有许可成本。所有工具都有硬件和设置成本。
True: You have time
一些工具的复杂性非常惊人。截至 2022 年,开源的 Diffgram 有超过 1,400 个文件和 500,000 行代码。
False: You must use graphics processing units GPUs
训练模型通常受益于具备像 GPU 这样的处理加速器。然而,在自动化中实际使用它并不需要 GPU。此外 - 在有限数据集的情况下训练并不会因为 GPU 的强大而获益太多,因为数据集较小。
False: You must use automations
自动化有时是有用的。但并非必须。不当使用可能会导致负面结果,产生糟糕的反馈循环。
安全性
根据 2022 年 Linux 基金会报告,“安全性是影响组织将使用的软件的首要因素。许可合规性是第二优先级。”¹
安全架构
对于高安全性安装来说,通常最好托管您自己的训练数据工具。这样可以完全控制设置您自己的安全实践。您可以控制加密访问密钥以及从网络到数据静止的系统所有方面的位置。当然,您还可以设置自己的自定义安全实践。
攻击面
安装是起点,因为网络是网络安全的基础。不可访问网络的攻击面较低。例如,如果您已经有一个硬化的集群,您可以在该网络内安装您的软件并使用它。
安全配置
您的安全状况取决于您的配置。例如,通过引用存储对象还是直接将其摄入到定义的存储桶中。使用 OIDC 与否。BLOB 签名的具体实现。您可以根据需求进行配置。
安装解决方案的安全性益处
-
您可以根据您的实际和当前的安全状况设置真实的安全性,包括所有密钥。
-
您控制网络安全性,注释数据库,原始数据,一切。
-
您控制整个密钥链。
-
您知晓其他威胁,并可以采取行动,例如固定特定版本。
-
您通常可以检查源代码
用户访问
最先考虑的一件事通常是用户访问样本的能力。考虑一家拥有智能助手设备的公司。也许在设备误触发并且麦克风意外打开时,审核员会听取音频数据。
或者考虑某人更正系统以检测婴儿照片等内容。同意有多个层次
在消费者端,通常有以下几个主要方面
-
没有同意直接使用(仅匿名化)
-
有同意用于训练模型 - 可能受时间限制
-
具有同意,但数据可能包含可能在模型中敏感的个人身份信息(PII)。
在商业方面,或更多面向企业的应用程序
- 可能包含机密客户数据。这些商业数据可能比任何单个消费者记录“更有价值”。
可能存在像 HIPAA 或其他合规要求的政府法规。
多乱啊?
可能出现的其他日常考虑事项:
-
注释者能否将数据下载到他们的本地机器上?
-
在注释者完成(提交)记录后,他们是否默认被锁定?
在软件方面,通常有两种主要模型,大多数方法都属于其中之一
仅任务可用性
这意味着作为注释者用户,我只能看到当前分配给我的任务(或任务集)。
项目级别
作为注释者,我可以看到一组任务,甚至多组任务。
作为项目管理员,两个重要的决策基本上围绕着
-
构建数据流程,使得只有被标记为已获得同意的数据,和/或满足其他个人身份识别信息(PII)要求的数据,才能进入注释任务流程。
-
决定注释者能够看到任务的层级。
数据科学访问
自然地,数据科学必须在某些时候访问这些数据以进行处理。通常,数据科学在“查看”数据方面有相当大的自由。更严格的系统可能只允许发送查询并接收样本,大部分数据直接发送到训练设备,而不经过数据科学家的本地机器或用户特定服务器。
值得考虑的是,数据科学家访问的单个违规行为通常比注释者严重得多,数量级更高。即使注释者能够绕过各种安全机制并存储他们所看到的所有数据,他们可能只能看到大型项目数据的一小部分。而数据科学家可能会有数百倍的访问权限。
根级别访问
超级管理员类型的用户,IT 管理员等可能具有某些根系统访问级别。在应用程序中可能被分类为超级管理员,直接访问数据库等。
解释性 侧栏
麻省理工学院计算机科学与人工智能实验室的教授,Regina Barzialy 说:
“这就像狗一样,它的嗅觉比我们好得多,解释它为什么能够嗅到某些东西。我们就没有这种能力。我认为随着机器变得更加先进,这是一个重要问题。如果你自己无法解决这个任务,什么样的解释能够说服你?”
解释性 的概念很重要,但通常更多地保留给机器学习模型分析的一侧。
开源与闭源
开源与闭源是一个争论已久的问题。我想花点时间来强调一些我在这个培训数据领域看到的具体情况。
开源和闭源注释在快速变化的培训数据景观中需要特别考虑,因为大多数这一新一代工具是闭源的。
已经有许多开源注释工具项目 - 有些已经超过 10 年了。然而,总体而言,大多数这些项目已经不再维护,或者非常专业化,不是通用工具。目前,开源的第二代通用注释工具有 Diffgram 和 LabelStudio。当然,还有许多其他工具 - 但大多数专注于非常特定的考虑或应用。
开源软件在隐私保护领域有很多优势 - 尤其是在这个领域。你可以确切地看到源代码如何处理你的数据,并确保没有任何不正当活动。
开源确实有一些缺点。最明显的是系统本身的初始设置可能更加困难(不是应用程序设置本身,在任何情况下都是类似的,而是整体软件的实际安装)。
开源和闭源的商业成本可能相似,因为代码开源并不意味着许可是无限的。在商业支持项目的上下文中,使用便利性通常也类似。
开源的托管成本由您控制。一般来说,托管成本包含在支付给商业提供者的成本中。这是一个微妙的权衡,在小规模和中等规模上实践中通常是类似的。在大规模上,通常您拥有的控制越多,对您越有利。
开源可能具有更高的兼容性,因为通常有更多免费用户使用,他们可能遇到问题并提交工单。这意味着技术风险较小。
成本也类似。商业支持的开源项目通常在商业使用过程中需要升级到付费版本。有时可能有放弃支付的选项,但至少意味着支持较少。
选择一个开源工具,快速启动和运行。
有些工具在开发环境中几分钟内安装,而在生产环境中则需要几小时或几天。大多数都有可选的商业许可证可供购买。这比与销售团队交谈更快,并且提供了比有限的 SaaS 试用更真实的账户。
从森林中看到树木。
环境设置和初始期望是最困难的事情之一。很容易在感知的设置/第一印象上过度拟合,而真正的价值往往在长时间内提供给多个用户群体。
能力优于优化
对于一些人来说,某种优化可能对其他人来说是次优。例如,在完成任务时额外的“确认”提示可能对某些人来说是一个巨大负担,而对其他人来说则是至关重要的一步。
请考虑,Excel 有超过 200 个流行快捷方式。我猜大多数用户只知道其中的一小部分,但他们完全可以很好地使用 Excel 完成工作。有些人非常关注优化,比如热键的具体细节。
随着注释变得越来越复杂,新用户进入,人们开始远离快捷方式,更多地确保 UI 有能力显示合理的上下文,以便用户能够利用这些功能。
在不同流程中的易用性
更新现有数据的便利性往往远不如创建所有新注释。
完全不同的假设
我尝试过一个流行的注释 UI,其中删除键会删除所有视频帧中的整个系列。这就像费力地制作整个电子表格,然后不小心按了删除键,结果整个表格都被删除了!即使我只是在测试,当这种情况发生时我也感到震惊!
当然,也有人可能会认为它更容易使用,因为我只需要选择一个对象,点击删除,就不必担心一系列的概念,或者它出现在多个帧中。同样,这里的正确性取决于您的使用情况。如果您有复杂的逐帧属性,可能一次删除几天工作的内容是不好的。相反,如果在某些情况下只有一个简单的实例类型可能是期望的。
再次,通过管理员和用户的定制来解决问题。您是否想在视频的下一帧中看到前一个标注?或者不想?选择适合您的选项,设置好然后忘掉它。
看看设置,而不是第一印象。
即使看似简单的事情,如标签标签的字体大小、位置和背景,都极大地依赖于使用情况。对于某些人来说,视觉上看到任何标签可能会妨碍工作进展。对于其他人来说,整个含义在于属性,不显示它会显著减慢进展速度。
同样,多边形大小、顶点大小等也是如此。对于某些用户来说,如果多边形点难以抓取和移动,他们可能会感到不满;另一些用户可能希望根本没有点,这样医学图像上的分割线才能完美显示。
如果有一个持久的主题,那就是在第一眼看到 UI 的外观时少看一些,多考虑哪些设置可以调整或可以添加以满足您的需求。
它是易于使用的,还是仅仅缺少功能?
另一个权衡是,一些供应商简单地拒绝默认启用功能,需要计划每一个流程。例如,这可能意味着实例类型在视频中不可用,或者设置可能不存在等等。在评估时,要深思熟虑持续使用和更复杂场景的需求,以及是否能够处理它。
定制化是游戏的名字。
越来越多地期望在软件的所有层面进行定制。从嵌入式界面、注释设置、管理员配置,到实际改变软件本身。试着意识到对于您的供应商来说什么是“困难”的,什么是“容易”的。
例如,对于一个闭源提供商来说,添加新的存储后端可能是一个低优先级的事务。而对于开源项目来说,您可以自己贡献这个功能,或者鼓励社区中的其他人来做这件事。此外,您可能能够更好地确定和理解变更的影响和涉及的成本。
从企业角度来看,尝试理解软件在您使用情况下的核心是什么。它是一个完全集成的平台吗?是数据存储和访问层吗?是工作流程或注释 UI 吗?因为这些工具在范围和成熟度上差异如此巨大,很难进行比较。例如,一个工具可能在空间注释 UI 方面更好,但在更新数据、摄取、查询数据等其他维度上严重缺乏。
有个小故事,一个用户注意到,当一个任务已经完成后,按下最近添加的“延迟任务”按钮会导致系统中出现一个定义不清的状态。我同意这是个问题。解决方法只需一行代码 - 一个简单的if语句。
另一方面,如果供应商不提供像数据查询、流式传输、基于向导的数据导入等主要功能,那些可能都是多月的项目,多年的史诗级任务,甚至可能永远都不会添加。因为这是一个新领域,有着截然不同的假设和期望,我真的建议你首先考虑这些主要功能,然后再看更新的速度和改进的执行能力。一个能够快速适应的供应商在这个新领域尤为宝贵。
另一位曾经在不同的用户界面中经历过删除单个关键点后无法“恢复”的情况,这意味着,比如手在关键点图上被遮挡,我标记为这种状态后,如果我想撤销,就无法恢复了。在 Diffgram 中,系统设置得很容易就能在每个点上保持这种状态。
历史
开源标准
据我估计,2017 年全球从事商业可用的训练数据工具的人数可能少于 100 人。到 2022 年,在至少 40 家公司中,有超过 1,500 人专门从事训练数据相关的工作。遗憾的是,绝大多数人在闭源软件中从事独立项目。像 Diffgram 这样的开源项目为无论生活在何国家的个人提供了共享训练数据工具的光明未来。
开源工具也打破了对什么是神奇和什么是标准的幻想。想象一下,为了一个承诺提供 10 倍快速查询的数据库供应商而增加预算,结果发现他们所做的只是注入额外的索引。在某些情况下,这可能有价值,但至少你希望事先知道你为易用性而支付,而不是索引的概念!类似的训练数据概念,如预标记、交互式标注、流式工作流等,也被提到了前台。后面章节会详细讨论这些内容。
意识到需要专用工具
作为一个行业,当我们开始处理训练数据时,最初的冲动只是“把事情做完”以开始训练模型。
问题的本质是:“人类究竟需要一个最小的基本用户界面来在数据上注释,并将其格式化为模型可以使用的形式?”这是人们首次意识到现代机器学习方法的强大,并且只是想知道“这样行不行?”“它能做到吗?”“哇!”
问题来得迅速。当我们把项目从研究阶段移到暂存阶段,甚至生产阶段时会发生什么?当标注者与编写代码的人不是同一个人,甚至不在同一个国家时会发生什么?当有数百甚至数千人在进行标注时会发生什么?
在这一点上,人们通常开始意识到他们需要某种专门的工具。早期版本的训练数据工具解决了一些问题,允许远程工作,一定程度的工作流程和规模。然而随着系统压力的增加,很快更多的问题涌现出来。
更多的使用,更多的需求
很明显地说,当有大量人全天工作、每天 8 小时在一个工具上时,每个人的期望和压力都会增加。
例如,迭代模型开发,如预标注,对持续改进训练数据施加了压力。虽然这是可取的,但这增加了对工具的压力。因为自动化方法越频繁使用,压力越大。静态预标签只是冰山一角。有些自动化需要交互,进一步加剧了数据科学、注释者和注释工具之间的交互。
已经添加了许多功能来应对这些需求。随着工具提供者增加了更多功能,拥有流畅工作流程的能力成为了一个新问题。功能过多,自由度过多。现在限制自由度的责任增加了。
新标准的出现
工具提供者现在已经有了几年的经验,并学到了许多东西。从创建专门针对训练数据的新命名概念到多样化的实施细节。这些现成的工具将压倒性的问题变得可管理。这使您能够使用这些新标准,并在对您和您的项目相关的抽象层次上工作。
是的,我们处于标准训练数据的早期阶段。作为一个社区,我们正在从概念上如模式、预期的注释功能到数据格式等进行开发。在训练数据工具的范围和标准功能上有一些共识,但仍有很长的路要走。
虽然自然会有一些重叠,但大多数功能区域取决于媒体类型的不同。例如,文本、3D 和图像的自动化都不同。
这里的认识是,定制的复杂机器可能会解决一些复杂性,但无法涵盖所需的广阔空间。撇开任何历史兴趣,作为今天做出决策的人,进展的背景有助于理清价值的来源。
我喜欢把这看作是三万英尺的视角。所以,如果你在考虑自动化改进,值得反思的是它是否适用于所有对你有关的媒体类型。这提醒我们,一个领域的任何弱点很可能会造成瓶颈。如果获取和输出数据困难,优秀的注释工作流的价值就会减少。
套件
你在需求的旅程中处于哪个阶段?你是否已经看到需要专门工具的需求?是否需要最高质量的工具?是否需要涵盖广泛训练数据空间的套件?
我们都喜欢熟悉的事物。就像办公套件提供一组相似的期望和体验一样,从用户界面到命名约定,训练数据平台的目标也是如此。要在多种格式(文本或图像)中创建熟悉的体验。
在任何特定时刻,单个团队可能专注于特定的数据类型或类型(多模态)。这里的熟悉感帮助远远超出此范围。新加入团队的人可以更快速地适应,共享资源可以更轻松地在项目之间流动。
通常进展从
-
意识到需要专门的工具支持。
-
意识到技术空间的复杂性需要尽可能最好的工具支持 - 不仅仅是任何工具。
-
意识到用户空间的复杂性需要熟悉和共享理解。
正如我将在第七章更详细地解释的那样,如果您考虑成立一个培训数据总监职位,熟悉的工具对团队至关重要。同一个标注者可以轻松地在多种媒体和项目之间转换。这也有助于解决数据科学关注点之间的差异。
为了区分潜在的混淆。拥有一套工具并不意味着“一刀切”解决方案适用于所有事情。数据科学可能有其自己的一套工具用于训练、服务等。这也不排除特定兴趣领域的点解决方案。更像是一个操作顺序的理念,我们希望从最大的操作开始,即主套件,然后根据需要补充。
总结
现在你有了路线图。以及建立培训数据系统的过程的一般理解。从安装、标注、嵌入,到 ML 工作流和优化。我提供了对培训数据工具的简要概述。然后更深入地讨论了权衡和考虑因素。
如果你对小型、中型和大型项目之间的区别掌握不够,你感觉舒服吗?如果没有,我建议您在继续阅读之前先查看权衡和规模部分。根据项目大小,训练数据的方法可能有很大不同,因此在开始时明确您当前的学习目标非常重要。
最后,正如您可以从历史部分看到的那样,培训数据工具已经走过了很长一段路。我们继续看到标准的提高。良好设置的工具是考虑模式、原始数据、质量、集成和人类角色实际实施的体现。
现在您已经了解了设置过程、可用工具和权衡,现在是深入研究模式的时候了。标签和属性是什么?空间表示是什么?我们如何在培训数据工具中实现模式?模式与 ML 任务和原始数据的关系是什么?在下一章中找到答案。
¹ linuxfoundation.org/wp-content/uploads/LFResearch_SBOM_Report_020422.pdf 第 6 页
第三章:模式
模式深入介绍
您希望您的 AI 系统做什么?它将如何完成?您将使用哪些方法?
在本章中,我深入探讨了关于模式的一些基础概念。
现实世界很复杂。商业应用需要一种超级领域特定的详细级别。有许多方法可以结构化这些内容。总的来说,这些结构在模式中定义。此外,模式提供了“枢纽点”,以随时间适应和更改子组件,以更好地适应当前需求。
模式很重要,因为系统的其余部分,包括原始数据,都是根据模式定义的。
模式是编码谁、什么、在哪里、如何和为什么的范例。模式是标签、属性及其彼此关系的总体表示。这是我们如何代表某物的意义,它在哪里,以及更多的内容。
这构建在第一章引入的标签和属性的高层概念基础上。之后,我将这些训练数据概念映射回机器学习任务。
在本章中,您将学习
-
心理模型来设置您的第一个模式。
-
对您的模式扩展方向的景观概述。
-
流行方法和任务的权衡。
-
章节 1 中一些高层次思想的具体内容。
让我们深入探讨模式!
标签和属性
结构化 where、what 和 how。
我们关心什么?
通常,我们关心某物在哪里,它是什么,以及它如何与其他事物相关。
标签和属性是我们用来表达“是什么”某物的工具。在下一节中,我将介绍空间类型以讨论某物的位置在哪里。
代表某物是什么的概念可以通过近乎无限复杂性进行扩展。而空间位置方面通常有更明显的扩展限制。换句话说,正确理解“是什么”是一个更大的持续挑战,而不是文档或图像中某物的机械特定位置。
标签介绍
标签是“顶层”语义意义。在基本情况下,它们可能仅代表它们自己。例如,“汽车”标签可能字面上映射为“汽车”。在大多数情况下,标签组织了一组属性。
对于技术读者,为了帮助确立这个想法,我喜欢将其与 SQL 设计进行比较。
表 3-1. 与 SQL 的比较
| 直观概念 | 训练数据 | SQL |
|---|---|---|
| 集合 | 标签 | 表格 |
| 属性 | 属性 | 列 |
特别需要注意的是,表通常没有“类型”,而列当然有。在同样的意义上,标签没有类型,而属性确实有类型。将标签视为文件夹或属性集的另一种方式。
有趣的是,在 E.F. Codd 的《数据库管理的关系模型》中,他提到列最初被认为是属性。¹ 虽然这远非完美类比,但有助于传达一般思想。延续这种思路,属性可以在标签之间共享,这大致类似于外键。
当最终用户进行注释时,将属性集合组织到标签中也有助于隐藏无关选项。对于视频来说,标签帮助限制关系并组织顺序。
预计这里讨论的特定组织原则将是特定实施和随时间变化的。总的来说,大致的概念会相似。随着这一新领域的训练数据继续被精化,标准将继续发展。
接下来,我们将讨论属性,这通常是模式定义的主要部分所在。
属性介绍
属性代表了“它是什么”的大部分内容。这是人类编码的核心含义和技术定义。属性通常至少包括以下结构:人类问题或提示、表单类型和技术约束。这些人类和机器定义共同构成一个“属性”。
训练数据属性表面上可能看起来简单或类似于其他技术,但实际上在这个人类和机器中心定义的交集处有很多复杂性。
与训练数据是原始数据和人定义的含义的组合相似,属性是技术定义和以人为中心定义的组合。为了对机器学习有用,技术定义和人类定义都是必要的。属性是这两者的联合表示。
更加技术性地说,属性可以被看作是明确定义的表单或“数据类满足 UI 规范”。理解这一点的一种方法是将属性放在表单和类之间的光谱上。表单可以任意复杂,但通常不被认为具有类似类的定义类型。此外,虽然表单的实施可能有验证,但通常是最终用户验证,而不是正式数据库约束。由于机器学习程序依赖训练数据,并且通常希望能够进行查询,属性比典型的表单具有更多的“结构”。相反,由于人类控制的期望,属性通常具有比典型编程类或数据库表定义更多的“类似表单”的行为特征。
实际上,属性填补了训练数据中明显不同于其他技术的需求。随着这一领域的不断发展,我预计属性将继续扩展。
典型属性特性
用法
单个注释可能有多个属性。
人类的问题
一个供人类考虑的问题。例如,“这个人开心吗?”。人类会选择这些值或者审查它们。在这种情况下,通常每个组会有额外的信息,例如提示,显示顺序等。
表单类型
例如树,多选,选择,文本,子组,日期等。这跨越了用户界面表单类型和数据类型之间的界线。例如,滑块 UI 控件可以收集浮点或整数数据。在最一般的情况下,属性通常被视为字符串。在需要时可以同时指定 UI 类型和数据类型。
约束(或边界)
进一步可能会有关于表单收集的约束,例如允许选择多少个。继续滑块的例子,它会有一个下限和一个上限。
预定义的选择
预定义的选择。通常,管理员定义有效值。
模板
通常属性被定义为某种模板。值对于每个实例都是唯一的,可以是具体的或者是一个引用。
通常任何类型的数字集合,自由文本,日期等都是具体的,例如3.14。而在可能的情况下,如果为选择从 6 个元素列表中提供了已知集合,则可以使用引用 ID。
通用属性的示例
-
遮挡(被阻挡/视野外)和截断(画面外)
-
标签/含义的深度/层次结构。例如,什么类型的动作(移动,跳跃,奔跑)
-
方向向量(例如前/后/侧)

图 3-1. 遮挡和截断的示例
为了使这更容易,我们使用约束。例如,我们可能限制汽车可以有一个方向向量,但人行道不可以。一种疾病可能有多种类型,或者我们可能限制只能选择一种类型。在最简单的情况下,如果我们想象标签“猫”和“狗”是两种选择,我们被限制只能选择这两个选项。
Schema 复杂性的权衡
Schema 的复杂性影响了 ML 程序和人类监督。总体 Schema 可能与在任何给定时刻向用户展示的监督不同。从这个意义上说,ML 预测和最终用户的校正可能是分离的。

图 3-2. 常见 Schema 权衡考虑的光谱
更多 Schema 的好处通常是一个“更智能”的系统。例如,如果我们没有关于“是否冒犯?”的标记数据,那么我们将无法训练模型。更多的标签也提供了对性能更多的见解。
系统随着时间的推移往往会扩展它们具有的标签和属性的数量。理解 Schema 及其 Schema 使用复杂性的一个好的“餐后餐巾纸”方式是将属性的数量乘以注释的数量。
媒体类型可能会极大地影响复杂性权衡。例如,对于图像,如果每个对象都需要标记,则模式的复杂性可能会因每个图像中的对象数量而增加。在视频环境中,这可能会进一步增加每帧的复杂性。模式越复杂,模型训练的复杂性就越大。
属性深度
想象一个杂货店结账系统。可能有多种规格的某个品牌的麦片盒,我们的目标是识别特定的库存编号(SKU)。在这种情况下,我们可能希望对我们的属性进行“数据库回溯”。随着库存的变化,呈现的选项也会发生变化。
此外,我们加载成千上万甚至数百万的选项。撇开关于搜索和选择每个属性的 UI 挑战,这是一个完全合理的解决方案。在撰写本文时,这里没有“正确”的答案。一个系统可能很容易拥有少数属性,也可能有成千上万个。
模式深度也可能受到条件语句和复杂层次结构的影响。在任何时候,我们都可以将一个属性扩展为子节点或节点列表。例如,选择“否”可能会展开一个“否 - 选项”节点。对于任何给定的选择,扩展成为子节点是一个选项。通常,在这里讨论的相同原则适用。
空间类型的关系
想象一下,对于我们的体育迷检测器,我们有一个顶层对象“人”。然后,为了检测他们是否穿着冒犯的衬衫或者做出冒犯的动作,我们有一个“is_offensive”属性。
这里的一个考虑因素是,如果选择了像语义分割这样的 ML 任务,并且使用多边形,那么选择的属性是否对应于轮廓中的每个像素?每个实例通常只有一个空间类型。因此,虽然我们在考虑衬衫,但实际数据是关于整个人的。
这种风险是因为虽然我们作为人类知道冒犯的部分是衬衫,但我们实际上编码到机器中的是整个区域是冒犯的。为了帮助可视化这一点,请考虑对机器来说,这些东西在功能上是等同的。

图 3-3. 不良偏见风险模式示例。最左边的框架是注释时显示的示例。表面上看可能合理。然而,中心和右侧的图像是两个类似的数据示例,但有些部分被遮挡。由于在训练时整个图像被声明为代表冒犯,ML 程序可能仅基于人脸而不是可能假设的 T 恤进行预测。
模型可能会轻松地利用面部的种族特征而不是 T 恤,从而使其有可能将某些具有某些面部或民族属性的人分类为“冒犯”。这种关系在标签中更为明显,因为它们是“顶层”的,但在“隐藏”的属性组中可能更为微妙。
考虑到一些系统(甚至人们)会使用这种类型的训练数据而不看样本,或者没有批判性地分析其模式构建。为了避免这种情况,我们希望确保模式编码的是实际存在的内容,尽可能准确地记录系统周围的假设。
避免空间偏见的一种方式

图 3-4. 使用框来避免空间偏见(右侧,黄色)
想象一下,你在向一个孩子解释这个情况。我会说:“那个人穿了件冒犯性的衬衫”。而不是“那个人很冒犯”。虽然后者可能是真的,但这并不准确描述观察到的逻辑情况。
对此的一种解决方法是将标签拆分为两个部分。然后空间位置(例如黄色框的位置)可以更好地代表标签。关键在于,我们试图使空间位置能够代表我们感兴趣的项目 - 只有我们感兴趣的项目。
现在或许将来某些训练方法会允许这样做。然而,今天我们可以通过在训练数据层次上简单地意识到这一点,并在我们布置类别时更加精确,相对容易地减轻这种风险。
为了进一步理解重要性,想象一个自动警报系统,该系统正在监视{枪支、刀具、炸弹}或其他实时威胁(例如机场安全)。如果系统训练的图像中有人持枪,但没有将人与枪分开,那么当某个特定族裔的人出现时,系统误触发的风险就存在(尽管没有枪!)。
如果注释的空间区域是我们关心的真实对象,理论上所有背景数据都不应该相关。然而,在实践中这可能并非如此,因此对使用的整体数据的意识仍然是一个共同的责任。
共同责任
如果你是一名数据专家,你可能认为这与你无关。因为当然这是一个“模式层次”的问题。同样,如果你正在设计模式,你可能会假设数据专家会注意到这一点并发出警报。显然,识别模式有风险生成糟糕数据是一个共同的责任。
另一个了解实际数据及其与模式关系的原因是创建更高质量的数据,从而实现更快速、更好的模型。
例如在这里,如果你在个人级别进行识别攻击物品,则可能需要更多的数据。通过将空间位置的范围缩小以更好地匹配所讨论的对象,我们提高了数据的整体质量。
正如前面提到的,这不是一本伦理学书籍。在这里,我概述了选择属性及其相关空间位置的直接技术影响。还有更多的权衡,我鼓励你只把它当作对 Schema 和谁负责的新推理的引入。
重要性在于它是什么
我之前简要提到为什么“什么”很重要。进一步考虑,在定义“何处”时往往存在严格的限制。在复杂情况下,可以将多个传感器组合起来表示复杂的三维视图。在分割情况下,每个像素都很重要。
然而,在每种情况下,声明空间位置的能力是相对有限的。只有那么多像素或体素等。要么那里有一个物体,要么没有。
或者不是吗?
部分对象怎么办?通常对于复杂情况,我们看到的是提供了一般的定位,比如一个运动员:
[ 玩家带有边界框的绘图 ]。

图 3-5。即将到来的图例说明
在这种情况下,可以说玩家“奔跑”,或者可能“进攻”?那么如何识别玩家是谁呢?当然我们可以说“肢体”处于某种位置,但这究竟意味着什么呢?
此外,通过各种辅助和基于像素的方法,定位相对来说更容易解决。而在生活中某些概念的“含义”则是哲学书籍的主题。
明确的是,在定位新对象时仍然可能面临重大挑战,但通常来说,对于持续的关注点,“它是什么”的“含义”变得更为核心。
隐藏的背景案例
当我们考虑某物体的位置时,有时从某物体不在的地方开始更有用。例如,当我们说在某些地方是红绿灯时,我们实际上是说图像的 96% 不是 红绿灯。这是 何处 与 什么 的混淆。
在目标检测的情况下,通常通过“对象性”评分来处理,与区域建议方法集成。其实现超出了本书的范围。在与训练数据相关时,通常会创建与使用方式不成比例的训练数据。
例如,对于人类来说,层次化的“嵌套”列表可能更容易显示。但实际实践中可能有多种实现方式。比如“展平”标签(red_occluded_20, red_occluded_40),但结合多个网络,或者使用支持嵌套的架构。
根据实现方式,有可能预测:
-
一个对象在这里
-
对象分类是 x
这些方法可能会在未来发生变化,并且已经有了显著的方法广度。
标签之间共享属性的示例
早些时候我介绍了标签作为定义“什么”是某物的最高级语义含义。例如“草莓”或“叶子”。属性则作为“什么”的广度和深度被引入。那么它们如何一起工作呢?
让我们想象我们正在建立一个系统,自动检测体育比赛中有多少粉丝为一队而不是另一队加油。也许它还需要识别“冒犯性”内容。
我们可能想要识别衣物,如 T 恤、裤子和球帽。所有这些物品都有诸如颜色、队徽、是否冒犯等“什么”表现形式是共同的。可能还有某些只与 T 恤或球帽相关的事物。
一种结构化的方法是将 T 恤、裤子和球帽作为标签。然后创建一个名为“颜色”的属性,其中包含诸如“红色”、“蓝色”、“绿色”等不同的属性。所有的标签都可以访问这个属性。

图 3-6. 属性与标签之间的关系。
在这里思考的权衡的一个高层次示例。确定颜色是否值得?也许穿戴一个队的颜色很常见,但是标志可能看不见。所以也许对颜色有一个良好的理解可能用于进一步的下游处理,以确定这个人正在为哪支队伍加油。
技术规格
以下解释了定义和使用属性的技术细节。
属性关联到实例的技术示例
例如,一个最小组可能以下面的形式表示,如下所述。
"instance_list": [
{
"type": "box",
...
"attribute_groups": {
id_of_group : {
"id": id_of_attribute_selected
"kind": "select"
}
}
},
{... another instance }
...
]
在这个例子中,有一个名为 instance_list 的关键字,其中每个注释都是一个实例。
每个实例都有一个名为 attribute_groups 的关键字,其中包含上述定义的属性。例如,如果有 3 组,则在 attribute_groups 字典中会有 3 个键。然后,每个属性都有关于其选择状态的信息。例如,所选值的 ID,或者自由文本的原始字符等。
表示形式,按引用与按值
这很重要,因为你的模式可能会随时间改变。
如下所示,模式中的某些内容可以定义为引用。例如,在这里,每个选项可以表示为单选按钮选择。然而,对于其他类型的属性,如自由文本,答案可能对每个实例都是唯一的。
有时,为了便于变更管理,即使可以通过引用传递,也将模式或按值传递“锁定”是有用的。从非常高层来看,更容易将标签视为“变动缓慢”的概念,而属性则是“快速变动”的。因为相对容易从标签中添加和删除属性,但更改标签可能会对其他属性引入破坏性更改。对于技术人员来说,在数据库中表(标签)和列(属性)的类比在这里非常适用。
高级技术规格:
属性代表人类定义的含义与机器学习可读数据之间的联合。
在实践中,训练数据软件有许多实现细节使其成为现实。作为高层概述,这里有一些常见属性的示例,它们的高层类型和约束。
表 3-2。属性技术规格表
| 属性 | 示例 | 输出类型 | 通过引用或值存储 | 约束 |
|---|---|---|---|---|
| 选择(下拉框)或单选按钮(所有选项都显示) | ![]() |
字符串 | 参考 | 允许列表 |
| 多选 | ![]() |
列表 | 参考 | 允许列表 |
| 自由输入 | ![]() |
字符串、整数 | 值 |
-
阻止列表
-
强制类型(字符串、整数、浮点数等)
-
强制范围
|
| 滑块 | ![]() |
|---|---|
| 日期 | ![]() |
| 子节点 | 扩展另一个属性组 |
属性 vs 属性组
为了说话方便,有时我将像颜色这样的属性简称为“属性”。更技术上讲,这是一组属性。
属性的技术示例
这假设某种映射,即id_of_group到关于该组的信息是可用的,例如:
"attribute_groups_reference": [
{
"id": id_of_group ,
"options": [
{
"id": id_of_attribute_selected
"name": "option_name"
}
],
"prompt": "user defined prompt",
}
]
[插图] 例如类似于:

图 3-7。待添加图例说明
它在哪里?- 空间表示
在这里,我将介绍常见的空间类型和概念。稍后我们将看到这些如何与机器学习任务相关,并介绍它们之间的一些常见权衡。也被称为定位、空间位置、空间类型、形状、绘图工具。
计算机视觉空间类型
分割、框和完整图像是三种流行的方法。
完整图像标签
完整的图像标签缺乏空间位置,在某些情况下可能会限制它们的有用性。在模式非常广泛的情况下,标签仍然可能非常有用。然而,在其他情况下,如果我们不知道物品在哪里,或者有多个物品,则价值较低,在这些情况下,存在这样一种错误的假设,即感兴趣的“物品”已经填满了框架,这可能不现实或过于限制潜在的结果。
方框
边界框是目标检测中最为“可靠”的方法之一。
一个框由恰好 2 个点定义。它只需要 2 个信息来存储一个框:例如可以定义为(左上点 x,y)和(宽度,高度),或者作为(x_min,y_min)和(x_max,y_max)点对。² 一个框可能会旋转,并由原点和旋转值定义。
[框示例图]

图 3-8. 即将呈现的图注
多边形
逐像素地贴标签可能非常痛苦。因此,为了避免这个问题,使用了各种更高级别的类型。在这种情况下,可以围绕边界绘制多边形。多边形是“在哪里”(空间性)和标签“肝脏”是“什么”。多边形通常由至少 3 个点自然定义。多边形可能有多少点并没有预先定义的限制。通常通过辅助过程创建点,例如拖动鼠标或按住 Shift 键,或“魔棒”类型工具。
[多边形示例图]

图 3-9. 即将呈现的图注
在上述分割示例中继续,在图像的上下文中,“每像素”标签可用,这里每个绿色像素预测为 CT 扫描上的“肝脏”:
[图像上的像素级注释示例/分割示例/示例]

图 3-10. 即将呈现的图注
空间位置的一个示例是“每像素”或更常见的“像素级”。
是 2D 定位的“最高”级别。
Keypoint
Keypoint 是另一种类型。关键点类型是一个带有定义节点(点)和边的图形。例如,人体解剖模型,定义了手指、手臂等。
椭圆和圆
由中心点和半径(x,y)定义。这些用于表示圆形和椭圆对象。它的功能类似于框。也可以旋转。

图 3-11. 椭圆示例
长方体
长方体有两个“面”。这是 3D 长方体在 2D 空间上的投影。每个面实质上是一个“框”。

图 3-12. 长方体示例
线和曲线
直线
2 个点
二次曲线
2 个点和一个控制点。

图 3-13. UI 中二次曲线示例
多用途类型
一些类型具有多种用途。多边形可以通过找到最极端的点轻松用作框。并不存在确切的“层次结构”。
复杂的空间类型
复杂类型指的是由一组多个“原始”类型(如上面定义的框和多边形)定义的空间位置。这与称为“多模态”的概念类似,但不同。通常,“多模态”指多个原始数据项。
复杂类型的常见用例是复杂多边形。例如,部分由二次曲线段定义,部分由“直”点段定义的多边形。
架构和创建类型的权衡
与概念相关性
一般来说,类型必须在某种程度上“匹配”概念。例如,强行使一个八边形形状适用于汽车不太可能产生好处。
注释时间
当然,复杂性越高,所需时间就越长。但通常情况下,它呈现出一种阶梯函数的形式,例如,分割可能比标注框长 10 倍的时间。
图像和视频相关的比较显示在图 2-10 中。在其他媒体类型中增加更多精度时存在类似的权衡。例如文档 > 句子 > 单词 > 字符。
用法类型的权衡
-
计算成本
-
研究的完整性
-
输出的复杂性

图 3-14. 不同空间类型的权衡。³
什么时候?- 关系,序列,时间序列
序列与关系
许多最有趣的案例之间存在某种形式的实例关系。
想象一场足球比赛。一个足球被球员触碰。这可以被视为一个“事件”。在给定的帧,例如第 5 帧。在这种情况下,我们有两个实例,一个是球,一个是球员。它们都在同一帧中。它们可以通过两个实例之间的注释关系进行正式链接,或者可以假定它们在时间上是相关联的,因为它们出现在同一帧中。
当
另一个重要的概念是关系。考虑将我们的静态图像示例升级到视频内容。从人类的角度来看,我们知道帧 0 中的“肝脏”与帧 5、10 等中的同一器官是相同的。它在我们的思维中是一个持久的对象。这需要以某种形式表示,通常称为序列或系列。或者它可以用于在更广泛的上下文中“重新识别”对象,例如在不同背景中出现的同一个人。
[插图:不完全是这个,但是展示同一对象的某些内容。(此文本包含插值,这是一个独立的概念)]

图 3-15. 插值示例
指南,说明
当然,我们如何知道将其标记为“肝脏”?我确实无法仅凭某种形式的指南来弄清楚。那么,肝脏的某些部分被胆囊或胃遮挡了呢?

图 3-16. 标题
在培训数据的背景下,我们正式定义了指南的概念。从严格意义上讲,指南应该像实际的培训数据一样得到尊重,因为培训数据的“含义”由指南定义。在某种意义上,指南解决了“如何”和“为什么”的问题。
我们已经涵盖了一些代表训练数据的高级机制。虽然复杂的情景和约束可能是一个挑战,但真正的挑战通常在于定义有用的指令。例如,NuScences 数据集,每个顶级类别大约有一段文字、项目符号和 5 个以上的例子。
在图 2-13 中,示例图像展示了“自行车架”和“自行车”之间的区别。这将作为给标注者的更大指南的一部分提供。

图 3-17. 为标注者提供的澄清图像示例
判断调用
要看看这些问题如何迅速变得棘手,考虑一下“可驾驶表面”与“碎片”的区别。NuScences 将其定义为“放置在可驾驶表面上的碎片或可移动物体,其尺寸太大以至于不能安全通过,例如树枝、满满的垃圾袋等。”⁴
当然,对于半挂车和轿车来说,可以安全驾驶的地面是不同的。甚至还没有涉及像“你是否应该驾驶过碎片以避免追尾”这样的语义选择。
选择好的名称
计算机科学有一句经典的话,说计算机科学中有两件难事,其中一件就是命名⁵。在书的后面,我会更详细地介绍好的和坏的训练数据的概念,但现在让我们只考虑它的“结构”。
我们将介绍关键概念,然后深入探讨其技术细节的含义。
在历史上,视觉和自然语言处理(NLP)被视为非常不同的任务。在新的深度学习背景下,它们有更多的重叠。
回到我们猫的例子,把训练数据看作是直接的很诱人 - 特别是在早期历史中,这通常是一个外包任务。然而,复杂性正在迅速扩展。
机器学习任务与训练数据的关系
训练数据用于机器学习系统。因此,希望了解常见的 ML 任务及其与训练数据的关系是很自然的。
社区普遍一致认为这些任务的分类是合理的。还有许多其他资源从机器学习的角度提供了对这些任务更深入的了解。在这里,我将从训练数据的角度简要介绍每个任务。
任务
语义分割

图 3-18. 图题
每个像素都被分配一个标签。
这种升级版被称为“实例分割”,在这种情况下,原本会被分配相同标签的多个对象被区分开来。例如,如果有 3 个人,每个人都会被识别为不同的个体。
使用训练数据,这可以通过“向量”方法(例如多边形)或“光栅”方法(想象一把画笔)来完成。撰写本文时,趋势似乎更偏向于向量方法,但这仍然是一个悬而未决的问题。从技术角度来看,向量方法要高效得多。请记住,这里的用户界面表示可能与存储方式不同。例如,UI 可能展示一个“桶”类型的光标来选择区域,但仍将该区域表示为向量。
在撰写本文时,另一个选择问题是如何实际使用这些数据。一些新方法预测多边形点,而“经典”方法则是每像素处理。如果用于训练数据的是多边形,并且 ML 方法是经典的,那么多边形必须经过转换过程,变成“密集”掩码(这只是另一种说法,每个像素对应一个类)。反之亦然,如果模型预测了密集掩码,但 UI 要求多边形以便用户更轻松地编辑,则需要将其转换为多边形。
注意,如果模型预测向量(多边形)以满足分割的经典定义,则必须将向量光栅化。光栅化意味着转换为密集像素掩码。根据您的用例,这可能是不必要的。请记住,虽然每像素掩码可能看起来更准确,但如果基于向量方法的模型更精确地捕捉了相关方面,那么这种准确性可能更多是虚幻的而非真实存在的。这对包含有良好记录的曲线的背景尤为重要,这些曲线可以由少数点建模。例如,如果您的目标是获得有用的曲线,直接预测二次曲线的少数值可能比从每像素预测回到曲线更准确。
虽然有许多优秀的资源可用,其中最重要的之一是 Papers With Code 网站,列出了超过 885 个计算机视觉任务、312 个 NLP 任务以及其他类别中的 111 个任务。⁶
让我们来看一个医疗用例的示例。如果目标是进行自动肿瘤分割(例如 CT 扫描),则需要分割训练数据。⁷ 研究人员经常强调训练数据的重要性。“医学图像语义分割的成功取决于高质量标记的医学图像数据的可用性。”⁸

图 3-19. 肿瘤分割示例(Segmentation 的一个子类)⁹
训练数据是与任务目标同时创建的,例如自动肿瘤分割。在上述示例中,每个像素对应一个分类,这被称为“像素级”。在这张 CT 扫描中,每个绿色像素被预测为“肝脏”。
图像分类(标签)
整体图像分类。一幅图像可能有许多标签。虽然这是最通用的方法,但要考虑到其他所有方法本质上都是建立在这个基础上的。从注解的角度来看,这是最直接的方法之一。
物体检测
检测多个对象的空间位置并对其进行分类。这是经典的“框绘制”。通常是最快的空间位置注释方法,并提供了获取空间位置的重大进展。如果你不太确定从哪里开始,这是一个很好的“默认选择”,因为它通常是性价比最高的。
尽管大部分研究集中在“框”上,但并没有这样的要求。还可以有许多其他形状,如椭圆等。
姿势估计

图 3-20. 标题
在高层次上,这是“复杂物体检测”。与框这样的一般形状不同,我们试图获取“关键点”(图形)。这些点之间存在图形关系。例如,左眼在右眼某些范围内等等。
从训练数据的角度来看,这是通过关键点模板处理的。例如,创建一个包含 18 个点的人体骨架表示,以指示姿势和方向。这与分割/多边形不同,因为我们不是绘制轮廓,而是实际上在形状的“内部”绘制。
图表 - 任务与训练数据类型的关系
注解数据与机器学习任务之间没有一对一的对应关系。然而,通常存在松散的对齐,一些任务在没有一定级别的空间数据的情况下是不可能完成的。例如,可以将更复杂的多边形抽象为物体检测的框,但不能轻易地从框转换到分割。
表 3-3. 空间类型与机器学习任务的映射
| 训练数据空间类型 | 机器学习任务示例 |
|---|---|
| 多边形,笔刷 |
-
分割
-
物体检测^(a)
-
分类
|
| 盒子 |
|---|
-
物体检测
-
分类
|
| 长方体 |
|---|
-
物体检测
-
3D 投影
-
姿势估计
-
分类
|
| 标签 |
|---|
- 分类
|
| 关键点 |
|---|
-
姿势估计
-
分类
|
| ^(a) 技术上来说,它可以用于物体检测,但通常这是一个次要的目标,因为使用通用检测基础的框更快速。 |
|---|
一般概念
以下概念适用于空间和什么
实例概念复习
几乎所有讨论的内容都与实例(注解)相关。一个实例代表一个单一样本。例如,这里的每个人都是一个实例。
实例具有标签和属性的引用,还可以存储特定于该实例的具体值,如特定的自由文本。
在视频或多帧上下文中,一个实例使用额外的 ID 来关联不同帧中的其他实例。每帧仍然有一个唯一的实例,因为数据可能不同,例如,一个人可能在一帧中站立而在另一帧中坐着,但他们是同一个人。
为了说明一个微妙的差别,考虑这里的所有 3 个人都有相同的“类别”,但是是不同的实例。如果没有这个实例的概念,那么我们会得到像中间图像那样的结果。
显示如下的图像:

图 3-21。将人们视为一个群体与视为单个人(实例)的比较。¹⁰
考虑到每个实例,可能有n个属性,这些属性反过来可能有n个子节点,而子节点可能有自己的任意类型/约束(如选择、自由文本、滑块、日期)?是的 - 实际上,每个实例几乎就像是一个小的信息图。如果这还不够复杂,空间位置实际上可能是 3D 的。而且可能会有一系列帧。
现代软件工具很好地处理这些概念之间的关系。挑战在于数据监督必须至少在某种程度上理解目标,以便做出合理的工作。
此外,类型必须与神经网络中的用例保持一致。在构建训练数据时,常见的网络架构有一些需要注意的假设。
随着时间的推移升级数据。
在某些情况下,随着时间的推移升级数据是相当合理的。例如,一个常见的模式。
-
运行一个“弱”分类器来标记图像,纯粹意在识别“好”的训练数据。
-
人类创建边界框。
-
在以后的某个时间点,确定需要分割的特定类别。然后可以使用边界框为一旦粗略定位完成(现有边界框),设计的算法“生成”分割数据。
建模与训练数据之间的边界。
训练数据与机器学习模型实际使用它的方式经常存在不一致。前面展示的一个例子是,空间位置与机器学习任务没有一对一的映射。其他一些例子包括:
-
机器学习模型使用整数,而人类看到的是字符串标签。
-
一个模型可能“看到”密集的像素掩码(用于分割),但人类很少甚至从不考虑单个像素。通常,分割掩码实际上是通过多边形工具绘制的。
-
机器学习研究和训练数据独立进行。
-
“在哪里与是什么”问题:人类经常混淆某物的位置和它是什么,但这在机器学习程序中可能是两个不同的过程。
-
将人类相关属性转换为模型中使用的属性可能会引入错误。例如,人类查看的是一个层次结构,但模型将该层次结构展平。
-
机器学习程序在本地化方面的努力与人类有所不同。例如,人类可能使用 2 个点来绘制框,而机器可能从一个中心点进行预测¹¹,或者使用其他与绘制的这两个点无关的方法¹²。
基本上这意味着:
-
我们必须不断提醒自己,机器学习建模与训练数据是不同的。整数,而不是人类标签,有不同的本地化过程,不同的关于位置与内容的假设等等。随着训练数据和机器学习建模的独立进展,这种差异预计将会扩大。
-
尽可能捕获关于如何构建训练集的所有假设。如果使用任何类型的辅助方法来构建数据,则这一点尤为重要。
-
理想情况下,管理训练集的人应该了解模型如何实际使用数据。而管理模型的人,也应该了解数据集是如何管理的。
-
训练数据能够根据变化的需求进行更新至关重要。当与训练数据交互的机器学习程序发生变化时,不存在有效的静态数据集。
原始数据概念
原始数据指的是字面数据,图像,视频,音频剪辑,文本,3D 文件等等,受到监督。技术上来说,这是附加到人类定义的含义的原始字节或 BLOB。
原始数据是不可变的,而人类定义的含义是可变的。我们可以选择不同的架构,或者选择如何标记它等等,但是原始数据就是原始数据。在实践中,原始数据通常会经历某种程度的处理。这种处理会生成新的 BLOB(二进制大对象)工件。这种处理的目的通常是为了克服实施级别的细节。例如,将视频转换为可流式传输的 HTML 友好格式,或者重新投影 GeoTIFF 文件的坐标以与其他图层对齐。
这些处理步骤通常在训练数据软件中进行记录。有关处理的元数据也应该是可用的。例如,如果在预处理步骤中使用了某种特定的令牌解析方案,机器学习程序可能需要知道这一点。通常这不是一个主要问题,但需要注意。
最好保持数据尽可能接近原始格式。例如,原生渲染 PDF 与 PDF 的图像的对比。或者原生 HTML 与屏幕截图。这是生成新工件的实施细节的补充。例如,视频可以以视频格式播放,并且可能额外生成帧的图像作为工件。
准确性是一组给定测量值与其真实值之间的接近程度。一些机器学习程序的准确性约束可能与训练数据的约束非常不同。例如,在注释期间的分辨率可能与训练时的分辨率不同。这里的主要工具是元数据。只要清楚在 BLOB 被监督时存在哪种分辨率或准确性,其余必须根据具体情况处理。
历史上,模型通常具有固定的分辨率限制(准确性),然而这一点仍在不断发展。从训练数据的角度来看,主要责任是确保机器学习程序或团队在人类监督时知道准确性的水平,并且了解是否存在任何已知的准确性假设。例如,表明假设,例如某个属性需要人类才能达到最低分辨率水平。
一些 BLOBs 提出了额外的挑战。例如,一个三维点云可能包含比图像更少的数据。¹³ 然而,对于最终用户来说,三维注释通常比图像注释更加困难。因此,尽管技术数据可能较少,但人类监督部分可能更加困难。
多个 BLOBs 可能被合并为一个复合文件。例如,多个图像可以作为单个文档相关联。或者一个图像可能与一个单独的 PDF 相关联。相反,一个单一的 BLOB 可能被分成多个样本。例如,将一个大扫描分成多个部分。
BLOBs 可能在不同视图之间进行转换。例如,将一组二维图像投影到一个单一的三维框架中。进一步地,这个三维框架可以从二维视图进行注释。作为相关概念,数据可能在不同的维度空间中标记,而不是它所训练的维度空间。例如,标签可能在二维环境中完成,但在三维空间中进行训练。这里需要注意的主要是区分人类监督和计算或预测值之间的差异。
总结一下,潜在原始数据(BLOB)格式和相关的工件具有高度复杂性。训练数据的主要责任是记录完成的处理步骤,记录人类监督时存在的相关假设,并与数据科学合作,确保人类监督时的准确性与在机器学习程序中的使用之间的对齐。通过这样做,我们承认我们可以做出的假设限制,并提供一切必要的内容来最大程度地利用数据和整体系统的成功。
摘要
接下来,我们将从这个高层视角转向数据专家的视角。我们如何确切地监督和注释这些数据呢?
¹ dl.acm.org/doi/pdf/10.5555/77708 第 43 页 实际 PDF 第 68 页 “在后续论文中(例如,Codd 1971a, 1971b 和 1974a),我意识到需要进行区分,并引入了作为声明数据类型的域和作为域具体使用的属性(现在通常称为列)。”
² medium.com/diffgram/how-do-i-design-a-visual-deep-learning-system-in-2019-8597aaa35d03
³ medium.com/diffgram/how-do-i-design-a-visual-deep-learning-system-in-2019-8597aaa35d03
⁴ github.com/nutonomy/nuscenes-devkit/blob/master/docs/instructions_nuscenes.md
⁵ 预测何时使缓存失效是另一个问题。
⁶ paperswithcode.com/sota 于 2020 年 10 月 4 日访问
⁷ arXiv:1702.05970 [cs.CV] 利用级联全卷积神经网络进行 CT 和 MRI 体积的自动肝脏和肿瘤分割 - Patrick Ferdinand Christ 等
⁸ arxiv.org/pdf/1902.09063v1.pdf
⁹ arXiv:1702.05970 图 7
¹⁰ davidstutz.de/bottom-instance-segmentation-using-deep-higher-order-crfs-arnab-torr/
¹¹ TODO 我认为我们可以参考一篇特定的中心点论文
¹² TODO 更具体些,我在思考 SSD 以及一些回归点的工作方式
¹³ 点云存储坐标三元组 (x, y, z),通常有数百万个这些点。而单个 4k 图像包含超过八百万个 RGB(红绿蓝)三元组。
第四章:数据工程
介绍
在早期章节中,您已经了解了抽象概念。现在,我们将从技术介绍向前迈进,讨论实施细节和更主观的选择。我将向您展示在实践中如何处理训练数据的艺术,我们将通过扩展到更大项目和优化性能来进行缩放。
数据摄取是第一个也是最重要的步骤之一。在高层次上,这意味着将数据导入和导出到您的训练数据数据库中。为什么摄取很难?原因有很多。例如,训练数据是一个相对较新的概念,存在各种格式和通信挑战,数据的体积、多样性和速度各不相同,缺乏良好的建立规范,导致有许多方法可以完成它。
此外,还有许多概念,如使用训练数据数据库以及谁何时想要访问什么,这些对经验丰富的工程师甚至可能不明显。摄取决策最终确定查询、访问和导出考虑因素。
本章分为:
-
谁想要使用数据以及他们何时想要使用数据
-
为什么数据格式和通信很重要,类似于“传声筒游戏”
-
介绍训练数据数据库
-
开始的技术基础
-
存储、特定媒体需求和版本控制
-
格式化和映射数据的商业考虑
-
数据访问、安全性和预标记数据
要实现数据驱动或数据中心化的方法,需要工具、迭代和数据。迭代和数据越多,对处理它的优秀组织的需求就越大。
您可以按照摄取数据、探索数据和标注数据的顺序进行操作。或者您可以直接从摄取转到调试模型。在流式传输到训练之后,您可以摄取新的预测结果,然后调试这些结果,然后使用标注工作流。您越多地依赖您的数据库来进行大量工作,您需要自己完成的工作就越少。
谁需要这些数据?
在我们深入探讨挑战和技术细节之前,让我们先谈谈目标和参与其中的人员,并讨论数据工程如何服务于这些最终用户和系统。随后,我将讨论为什么需要一个训练数据数据库的概念性原因。我将通过展示没有它时的默认情况以及有它时的情况来说明这种需求。
为了便于讨论,我们可以将其分为以下几组:
-
标注者和最终用户
-
数据科学
-
ML 程序(机器对机器)
-
应用工程师
-
其他利益相关者
标注者和最终用户
最终用户需要在正确的时间以及具有正确权限的情况下获取正确的数据。通常情况下,这是在单个文件级别上完成的,并且受到非常具体范围请求的驱动。强调权限和授权。什么是“正确的时间”?一般来说,这意味着按需或在线访问。这是文件由软件流程(例如任务系统)标识,并且以快速响应时间提供的地方。
数据科学
数据科学最常见的是在数据集级别查看数据。更多的重点放在查询能力、处理大量数据的能力和格式化上。理想情况下,还应该能够深入到具体样本,并且定量和定性地比较不同方法的结果。
机器学习程序
机器学习程序与数据科学有类似的需求。区别在于权限方案以及什么时候以及如何公开显示内容。通常,机器学习程序可以具有软件定义的集成或自动化。
应用工程师
应用工程师关注将数据从应用程序传输到培训数据数据库,以及如何将注释和监督嵌入到最终用户中。每秒查询(吞吐量)、数据量通常是首要关注的问题。有时候会有一个错误的假设,即数据从“摄入”团队或应用程序流向数据科学的过程是线性的。
其他利益相关者
安全性、DevMLOps、备份系统等。这些团队通常关注跨领域的问题,并且横切其他用户和系统的需求。例如,安全性关心已经提到的最终用户权限。安全性还关心单个数据科学家不成为关键失败的单一点,例如,在其机器上拥有整个数据集或对远程集有过于广泛的访问权限。
现在您已经对涉及的群体有了概述,它们如何相互交流?它们如何共同工作?
电话游戏
没有对培训数据工程的知识,您的最终用户和系统将无法良好地互相配合。
作为类比,可以将其比作电话游戏。电话游戏是“一个游戏,你首先想出一个短语,然后把它耳语给坐在你旁边的人。接下来,这个人必须耳语给下一个人听。这种过程在圈内继续,直到最后一个人听到这个短语。错误通常会在重复中累积,因此最后一个玩家宣布的声明与第一个玩家的声明明显不同,通常具有幽默或滑稽的效果。”¹
在培训数据中,这些累积的错误并不滑稽。累积的错误会导致性能不佳、系统退化和故障。这些错误尤其普遍,因为这不是单向线性的集成,甚至不是双向同步。相反,这是一个类似图形的、非线性结构,连接传感器、人类、模型和其他数据工程系统。
这些问题在较大的、多团队的情境中特别普遍,在没有考虑到所有主要群体的整体需求时尤为突出。作为一个新兴标准的领域,即使是看似简单的事情也定义不清楚。换句话说,数据工程对于培训数据尤为重要。如果您有一个绿田项目,现在是计划您的数据工程的完美时机。
无论您是在规划新项目还是重新思考现有项目,一些信号表明您需要对数据工程采取新的方法包括:
-
每个团队都拥有自己的数据副本。
-
没有真正的培训数据记录系统。
-
您的记录系统并不全面地代表培训数据的状态(例如,将其视为仅仅是标签,而不是流程的重心)。
-
需要进行不合理水平的沟通才能进行更改(例如,更改模式)。
-
变更不能由最终用户流畅进行,而必须作为工程级别的变更进行讨论。
-
整体系统性能未达到预期或模型更新速度缓慢。
如果每个团队都拥有自己的数据副本,就会产生不必要的沟通和集成开销。这往往是“原罪”,因为一旦有多个团队这样做,要更新整个系统就需要进行工程级别的改变,这意味着更新不会顺畅进行,导致整体系统性能达不到预期。
一些试图避免这种情况的方法包括保留一个独立的系统作为数据的记录系统,而不是培训数据系统。这是多个团队拥有数据副本的另一种情况,存在类似的问题。数据将继续混淆,因此,虽然一个工具可能了解 xyz 属性,但下一个工具可能不会导入它,并且可能不会导出其存储或导入的所有属性。无论这些问题在白板上看起来多么微不足道,它们在现实世界中总是一个问题。
用户的期望和数据格式经常变化,以至于抵制过度死板的自动化过程。因此,不要以自动化的方式思考这个问题,而是要以“培训数据的重心在哪里?”来思考。它应该与人类和培训数据数据库一起,以获得最佳结果。

图 4-1. 整体流程的示例心理模型。
规划一个优秀的系统。
那么,如何避免“电话游戏”呢?它始于规划。以下是一些思考的起点,然后我将介绍实际设置的最佳实践。
首先,是建立一个与您的业务相关的有意义的工作单元。例如,对于一家分析医疗视频的公司,可以是单个医疗程序。然后,在每个过程中,考虑有多少模型(不要假设只有一个!),它们将如何更新,数据将如何流动等等。我们将在系统设计问题中更深入地介绍这个问题,但现在,我只是想确保清楚地表明摄取通常不是“一劳永逸”的事情。它是需要持续维护并随时间可能扩展的事情。
第二,考虑数据存储和访问的问题,即训练数据数据库。虽然“自己实现”可能性存在,但全面考虑所有群体的需求却很困难。训练数据数据库使用得越多,管理复杂性就越容易。使用独立存储的越多,就越加压力要“重新发明数据库的轮子”。
特别是在构建一个优秀的摄入子系统方面。通常理想情况是这些传感器直接反馈到训练数据系统中。想象一下在传感器、预测、原始数据与我的训练数据工具之间有多少距离或跳跃?
生产数据通常需要人类审核,以设置级别进行分析,并可能进一步“挖掘”以改进。预测越多,进一步系统校正的机会就越多。如何使生产数据以有用的方式进入训练数据系统?在工具处理过程中数据重复多少次?
我们对数据的各种用途之间的区别有什么假设?例如,在训练数据工具中查询数据比期望数据科学家导出所有数据然后自行查询要更加可扩展。
天真与训练数据中心方法
通常有两个主要概念需要注意:
天真方法
认为训练数据只是一系列现有步骤中的一个步骤。
训练数据中心方法
将训练数据视为人类监督系统的“重心”。例如,训练数据数据库具有原始数据、注释、架构和机器之间访问映射的定义和/或文字存储。
方法上自然存在一些重叠。一般来说,天真方法的能力越大,它就越像是训练数据中心方法的再创造。虽然使用其他方法可以实现理想结果,但使用训练数据中心方法可以更容易地持续实现理想结果。
让我们先看看天真方法通常是如何工作的。
天真方法
通常在天真方法中,传感器独立地捕获、存储和查询数据,如图 4-2. 所示。这通常看起来像是一个线性过程,具有预先建立的起始和结束条件。

图 4-2. 天真数据工程流程示例
最常见的原因是使用天真的方法:
-
项目在训练数据中心方法成熟的工具支持之前就已经开始了
-
工程师们不知道有关训练数据中心方法的存在
-
测试和开发新系统
-
旧的历史数据,不可能有新数据进入(罕见)
-
不实用训练数据中心方法的情况(罕见)
初始方法往往像前面提到的电话游戏一样。由于每个团队都有自己的数据副本,因此随着数据的传递,错误会累积。由于没有记录系统或记录系统不包含训练数据的完整状态,因此难以在用户级别进行更改。总体而言,安全进行更改的难度越大,发货和迭代速度越慢,整体结果也越差。
另外,初始方法往往与隐藏或未定义的人工流程耦合。例如,某个工程师在其本地机器上有一个脚本执行整个流程的某个关键部分,但该脚本未记录或无法合理地供其他人访问。通常是由于对如何使用训练数据数据库的理解不足,而不是故意决定的过程。
在初始方法中,数据不必要地重复的机会较大。这增加了硬件成本,例如存储和网络带宽,除了上述概念上的团队瓶颈之外。它还可能引入安全问题,因为各种副本可能保持不同的安全姿态。例如,团队在处理链中的早期阶段关联数据并绕过安全性。
初始方法的一个主要假设是,人工手动审查数据,以便只导入希望注释的数据。换句话说,只有指定用于注释的数据才会被导入。这种“导入前人工”的假设使得有效监督生产数据、使用探索方法以及通常因隐藏的策展过程的手动和未定义特性而成为过程的瓶颈。
请从概念上考虑这一点,而不是从字面上的自动化角度。软件定义的摄取过程本身对整体系统健康的指示有所帮助,因为它并未涉及到关于使用训练数据数据库的任何真实架构问题。
训练数据中心化
另一种选择是使用训练数据中心化方法。如图 4-3 所示,训练数据数据库是训练数据中心化方法的核心。

图 4-3 训练数据数据库
训练数据数据库具有原始数据、注释、架构和映射的定义和/或字面存储,供机器间访问等用途。理想情况下,它是系统的完整定义,这意味着有了训练数据数据库,你可以在不需要额外工作的情况下重新生成整个机器学习过程。
当你将训练数据数据库作为你的记录系统时,所有团队都有一个集中存储和访问训练数据的地方。数据库的使用越广泛,整体结果就越好,类似于在传统应用程序中正确使用数据库被认为是至关重要的。
使用这种方法的最常见原因:
-
它支持向数据为中心的机器学习迁移。这意味着专注于通过改进数据而不仅仅是改进模型算法来提升整体性能。
-
支持在一个流程中使用多个 ML 程序,通过在一个地方定义所有的定义。
-
支持最终用户监督(标注)数据,并支持将最终用户监督嵌入到工作流程和应用程序中。
其他原因包括:
-
将视觉用户界面需求与数据建模(例如查询机制)解耦。
-
可以更快地访问新的数据发现工具、标记方式等。
-
支持用户定义的文件类型,例如将“交互”表示为一组图像和文本,支持流畅的迭代和端用户驱动的更改。
-
避免数据重复,并将外部映射定义和关系存储在一个地方。
-
它解除了团队的阻塞,使其能够尽快工作,而不必等待离散的阶段。
使用训练数据数据库方法的问题:
-
需要知道其存在并理解其概念。
-
有时间、能力和资源使用训练数据数据库。
-
成熟的数据访问模式可能需要重新调整以适应新的上下文。
-
其作为记录系统的可靠性并不具有与旧系统相同的历史。
理想情况下,不是决定发送哪些原始数据(例如从应用程序到数据库),而是将所有相关数据发送到数据库。这意味着改变顺序,首先将所有数据放入数据库中。这有助于确保它是真正的记录系统。例如,可能有一个“标记方式”程序使用所有数据,即使人类只检查其中的一部分。通过训练数据数据库使所有数据对“标记方式”程序可用变得更加容易。记住这一点的最简单方法是将训练数据数据库视为流程的重心。
训练数据数据库承担管理对原始媒体的引用甚至包含文字字节存储的角色。这意味着直接将数据发送到训练数据工具中。在实际实施中,可能会有一系列处理步骤,但核心思想是数据的最终存放地、真实来源位于训练数据数据库内部。
训练数据数据库是系统的完整定义,这意味着给定训练数据数据库,您可以创建、管理和重现所有端用户 ML 应用程序需求,包括 ML 过程,而无需额外工作。这超越了通常更侧重于自动化、建模和单纯 ML 复现性的 MLOps。您可以将 MLOps 视为更战略的训练数据中心方法的子关注点。
训练数据数据库从一开始就考虑了多个用户,并相应地进行规划。例如,一个旨在支持数据探索的应用程序可以在摄入时自动创建用于数据发现的索引。当它保存注释时,可以同时创建用于发现、流式传输和安全性等的索引。
导出数据到其他工具的一个相关主题是。也许您想运行一些进程来探索数据,然后需要将其发送到另一个工具进行安全处理,比如模糊化个人可识别信息。然后您需要将其发送给其他公司进行注释,将结果返回到您的模型中等。在每个步骤中,都存在映射(定义)问题。工具 A 输出的格式与工具 B 的输入格式不同。之前我有过一些关于数据规模的讨论,但是快速提醒一下,这种数据传输通常比其他常见系统的数据传输量大一个数量级。我能想到的最好的经验法则是,每次传输更像是一个微型数据库迁移。
一般来说,传感器与训练数据工具之间的连接越紧密,所有最终用户和工具的潜力就越大。添加到传感器和工具之间的每一步几乎都有可能成为瓶颈。数据仍然可以同时备份到其他服务,但通常意味着从第一天开始组织训练数据工具中的数据。
第一步
假设您准备使用训练数据中心化方法。那么,您实际上该如何开始?
首先步骤是
-
设置训练数据数据库定义
-
设置数据摄入
让我们先考虑定义。训练数据数据库将所有数据放在一个地方,包括将映射定义到其他系统。这意味着系统记录和与训练数据系统内外运行的模块相关的映射定义都集中在一个地方。这减少了映射错误、数据传输需求和数据重复。
在我们开始实际摄入数据之前,这里有一些需要首先涵盖的术语。
-
原始数据存储
-
原始媒体 BLOB 特定关注点
-
格式化和映射
-
数据访问
-
安全关注点
让我们从原始数据存储开始。
原始数据存储
在高层次上,目标是将原始数据,如图像、视频和文本,转换为可用于训练数据工作的形式。
通常使用 Bucket 抽象来存储原始数据。这可以是在云上,也可以是使用像 MinIO 这样的本地存储软件。有些人喜欢把这些云桶看作是“倒入并忘记”,但实际上有很多性能调优选项可供选择。在训练数据规模下,原始存储选择很重要。如果您是一个存储专家,那么可以跳过这个小节。
存储类别
存储层之间的主要差异比初看起来的要大得多。折衷方案包括访问时间、冗余、地理可用性等。不同存储层之间的价格差异有几个数量级。最关键的工具之一是生命周期规则,通常可以通过几次点击设置策略,使旧文件自动转移到更便宜的存储选项。有关最佳实践的更详细例子可以在这里找到 (更详细的内容)。
地理位置(又称区域、地区)
您是否将数据存储在大西洋的一侧,而注释工具却需要在另一侧访问?值得考虑的是,实际的注释预期发生在何处,以及是否有存储数据更接近的选项。
供应商支持
并非所有注释工具对所有主要供应商的支持程度相同。请记住,通常可以手动集成其中任何一个提供的工具,但这需要比具有本机集成的工具更多的努力。
支持从这些存储提供商访问数据的功能与运行在该提供商上的工具不同。有些工具可能支持从所有三个提供商访问,但作为服务,工具本身只在单一云上运行。如果您在自己的云上安装系统,则通常工具将支持所有三个云。
例如,您可以选择在 Azure 上安装系统。然后,您可以从 Azure 中将数据拉入工具中,这将带来更好的性能。然而,这并不妨碍您根据需要从亚马逊和谷歌中拉取数据。
按引用或按值
如果您希望保持文件夹结构,一些工具支持引用文件而不是实际传输它们。这样做的好处是减少数据传输量。缺点是现在可能会出现断开的链接。此外,关注点分离可能是一个问题,例如,其他进程可能会修改注释工具期望能够访问的文件。
即使您对速率数据采用按引用传递的方法,系统的真实数据仍然是培训数据数据库。例如,数据可以在数据库中组织成集合,这些集合在存储桶组织中没有表示。存储桶仅表示原始数据,而数据库则包含注释和其他相关定义。
简单起见,最好将培训数据数据库视为一个抽象,即使原始数据存储在数据库物理硬件之外。

图 4-4. 如何参考原始 Blob 与培训数据数据库的其他功能。
自有硬件上的现成专用培训数据工具
在这种情况下,我们信任训练数据工具来管理已签名的 URL 过程。我们信任训练数据工具来处理 IAM 方面的问题。假设我们信任该工具(也许是因为我们可以检查源代码),唯一真正的问题就是它使用哪个存储桶 - 通常这成为一个一次性问题,因为该工具负责 IAM 的管理。对于高级案例,该工具仍然可以连接到单点登录(SSO)或更复杂的 IAM 方案。
工具不必在硬件上运行。更高级别是信任训练数据工具并信任服务提供商来托管/处理数据。尽管在那时大部分这些讨论已经不太相关,因为真的只是按照说明操作,然而,这是最低级别的控制。
数据存储
通过引用或实际移动数据。
数据位于何处?
一般来说,任何形式的工具都会生成某种形式的数据,将其添加到“原始”数据中。
这意味着如果我在存储桶 A 中有数据,并且我使用工具在那里处理它,要么在存储桶 A 中会有附加数据,要么我需要一个新的存储桶 B 供工具使用。这对于 Diffgram、Sagemaker 以及据我所知大多数主要工具都是真实的。
根据您的成本和性能目标,这可能是一个关键问题或不太重要的问题。在大多数用例的实际水平上:
-
期望将生成额外数据。
-
知道数据存储在哪里 - 但不要想得太多。
同样,我们并不真的关心例如 Postgres Write Ahead Log(WAL)生成了多少存储空间,我个人认为最好在这方面信任训练数据工具。如果有问题 - 在训练数据工具的抽象领域内解决。
存储桶连接
说了上面的所有 - 最好的抽象是从训练数据工具到存储桶创建连接。如何做这件事有各种不同的观点,并且具体细节会根据硬件和云提供商而变化。
[从 Diffgram UI 的文件浏览器中插入示例]
[插入示例解决方案架构,训练数据工具和存储桶]
对于非技术用户,这本质上是“登录”到一个存储桶。换句话说,我创建了一个新的存储桶 A,并且从 IAM 系统获取了用户 ID 和密码(客户端 ID /客户端密钥)。我将这些凭据传递给训练数据工具,并且它会安全地存储这些凭据。然后在需要时,训练数据工具使用这些凭据与存储桶进行交互。
原始媒体(BLOB)类型具体
BLOB 是二进制大对象。这是媒体的原始数据。根据您的媒体类型,将存在特定的问题。每种媒体类型都会具有远比这里列出的问题更多的问题。您必须针对您的需求研究每种类型。在这里,我列出了一些最常见的需要注意的问题。训练数据数据库将帮助格式化 BLOB,以便多个最终用户(如标注者和数据科学家)使用。
图像
图像通常不需要任何技术数据准备,因为它们是个别文件且足够小。像 TIF 这样的更复杂格式通常会被“展开”,尽管在一些工具中保留图层是可能的。
视频
将视频文件分割成较小的片段以便于注释和处理。例如,将一段 10 分钟的视频分割成 60 秒的片段。
采样帧是减少处理开销的一种方法。这可以通过降低帧率和提取帧来实现。例如,将每秒 30 帧的视频转换为每秒 5 或 10 帧。缺点是这使得注释或使用其他相关视频功能(如插值或跟踪)变得更加困难。通常最好保留视频作为可播放的视频,并提取所有所需的帧。这提高了最终用户的注释体验并最大化了注释能力。
针对事件的分析需要准确的发生帧,如果删除了许多帧,这些信息可能会丢失。此外,“查找有趣的亮点”算法可以对完整数据进行采样。这使得注释者可以看到更多“有趣”的事情发生,从而获得更高质量的数据。对象跟踪和插值进一步支持这一点,注释者可能只需要标记少量帧,通常可以通过这些算法免费获取更多帧。虽然附近的帧通常在实践中是相似的,但拥有额外的数据仍然有助于处理。
一个例外是,有时非常高的 FPS 视频(例如 240-480+)仍然需要采样到 120 FPS 或类似的帧率。请注意,尽管有许多帧可以进行注释,但我们仍然可以选择仅在完整视频、完整帧等上训练模型。如果必须对帧进行降采样,请使用全局参考帧以保持降采样帧与原始帧的映射关系。
3D
通常,您需要将每个文件系列的 x、y、z 三元组传输到 SDK。
文本
分词器
你需要选择你所需的分词器或确认系统使用的分词器是否符合你的需求。分词器将单词分割开来,例如基于空格或更复杂的算法。
医疗
如果您的特定医疗文件不受工具支持,可能需要
-
降低色彩通道的采样率
-
选择您希望使用的 z 轴或切片
-
从过大的单个图片中裁剪出图像。
地理空间
GEOTiff(以及云 GEOTiff COG)是一种标准格式。请注意,可能需要进行投影映射变换以标准化图层。
格式化与映射
原始媒体是一部分,注释和预测是另一个重要部分。考虑设置数据定义,而不是一次性导入。您的定义越好,数据就越容易在机器学习应用程序之间流动,终端用户也能够更新数据而无需工程支持。
用户定义的类型(复合文件)
现实世界的案例通常涉及多个文件。例如,驾驶证件有正面和反面。我们可以考虑创建一个新的用户定义类型的“驾驶执照”,然后支持两个子文件,每个文件都是图像。或者我们可以考虑一个“富文本”对话,其中包含多个文本文件、图像等。
定义数据映射
数据映射处理应用程序之间的加载和卸载定义。例如,将数据加载到模型训练系统或 What to Label 分析器中。这些定义清晰地定义允许最终用户进行平稳集成,并解耦了需要工程级别更改的需求。换句话说,它解耦了从数据定义本身调用应用程序的时机。例如,声明空间位置格式化的映射 x_min**, y_min**, x_max**, y_max 和 top_left**, bottom_right 之间的映射。或者将模型的整数结果映射回模式。
数据导入向导
新的基于 UI 的数据摄取向导项目。最初是为云系统的文件浏览器而设计。并发展成为完全成熟的映射引擎,类似于智能切换应用程序,比如我使用一个应用程序将所有数据从安卓移动到 iPhone 或相反。
在高层次上,映射引擎引导您通过将一个数据源的每个字段映射到另一个数据源的过程。
映射向导提供了巨大的价值。它们避免了进行更加技术性的集成。它们通常提供更多的验证和检查,以确保数据符合您的预期(就像在 Gmail 中查看电子邮件预览之后再决定是否打开电子邮件)。最重要的是,一旦设置了映射,就可以轻松地从列表中切换,而无需任何上下文切换!
这样做的影响难以低估。以前,你可能因为数据的细微差别而犹豫不决,比如尝试新的模型架构、商业预测服务等。这显著减轻了这种压力。
向导的限制是什么?首先,有些工具尚不支持它们,因此可能尚不可用。它可能会施加技术上的限制,这些限制在更纯粹的 API 调用或 SDK 集成中并不存在。
工具中最大的空白之一通常围绕着一个问题:“设置我的数据到系统中并维护它有多难?”
然后是它可以摄入什么类型的媒体?它摄入速度有多快?
这是一个与其他软件有些不同的问题。你知道当你第一次加载一个文档的链接时?或者当你的计算机开始加载一个大文档时?
最近出现了像“导入向导” - 逐步表单 - 这样的新技术,有助于简化一些数据导入过程。虽然我完全预期这些过程随着时间的推移会变得更加简单,但是你了解幕后方面的知识越多,你就越能理解这些新奇的向导是如何实际工作的。
桶
一种存储原始数据(例如图像和视频)的技术。也称为:对象存储
二进制大对象 - BLOB
原始数据,例如图像、视频、文本。又称为:对象
组织数据和有效存储
最初的挑战之一通常是如何组织已经捕获(或将要捕获)的数据。这比起初看起来更具挑战性的一个原因通常是这些原始数据集通常存储在远程。
在撰写本文时,云数据存储浏览器通常比本地文件浏览器不够成熟。因此,即使是最简单的操作,例如我坐在屏幕前拖放文件,也可能面临新的挑战。
这里有一些实际的建议:
-
尽量在处理过程中尽早将数据引入注释工具。例如,当新数据进入时,如果我同时将数据引用写入注释工具,就可以在某种程度上“自动”组织它,或者更顺利地邀请团队成员协助进行组织层任务。
-
考虑使用帮助展示“最有趣”数据的工具。这是一个新兴领域 - 但已经明显这些方法虽然不是没有挑战,但具有一定的价值且正在变得更好。
-
使用标签。尽管听起来简单,但使用业务级组织信息标记数据集是有帮助的。例如,数据集“训练传感器 12”可以被标记为“客户 ABC”。标签可以横切数据科学关注点,允许业务控制/组织和数据科学级目标。
远程存储
数据通常相对于最终用户是存储在远程的。这是由于数据的规模、安全需求、自动化(例如连接来自集成程序的连接、运行模型推理的实用性、聚合来自节点/系统的数据等)。而且团队成员,负责管理训练数据的人,可能不是收集数据的人(考虑医疗、军事、现场建设等使用案例)。
这对于没有外部互联网连接的解决方案也是相关的,通常称为“空气隔离”秘密级解决方案。在这些场景中,即使端用户与其相隔不足两英尺的物理系统,仍然可能是不同的设备盒。
这意味着我们需要以某种方式访问数据。至少是由正在注释数据的人,很可能还包括某种数据准备流程。
版本控制
版本控制对可重现性很重要。也就是说,有时候版本控制会吸引“太多”的注意力。实际上,在大多数使用案例中,注意高级概念、使用快照和良好的定义将使你走得更远。
数据版本控制主要有三个层次,即每个实例(注释)、每个文件和导出。
它们之间的关系如图 4.5 所示。

图 4-5. 版本控制高级比较
在这里,我们从高层次介绍它们。
每个实例的历史记录
默认情况下,实例不会被硬删除。对现有实例进行编辑时,Diffgram 将其标记为软删除,并创建其后继的新实例,如图 4.6 所示。例如,用于深入的注释或模型审计。假设软删除的实例不会在默认实例列表中返回文件时返回。

图 4-6. 左:UI 中的每个实例历史。右:同一实例在不同时间点的单个差分比较。
每个文件和每组
每组任务可能设置为在处理流水线的每个阶段自动创建每个文件的副本。这自动维护与任务模式相关的多个文件级别版本。
您还可以根据需要编程和手动组织和复制数据到集合中。通过标签筛选数据,例如特定的机器学习运行。跨文件和集合进行比较,查看变更的差异。
将文件添加到多个集合中,用于希望文件始终处于最新版本的情况。这意味着您可以构建多个集合,具有不同的条件,并在注释发生时即时获得最新版本。关键是这是一个动态版本,因此始终处于“最新”状态很容易。
例如,在管理员级别使用这些基本构件灵活管理工作进行版本控制。
每次导出的快照
每次导出都会自动缓存到静态文件中。这意味着您可以随时随地为任何查询拍摄快照,并具有访问该准确数据集的可重复方法。结合 Webhooks、SDK 或用户脚本自动生成导出文件。随时按需生成它们。例如,使用此功能确保模型正在访问相同的数据。导出的标题示例如图 4.7 所示。

图 4-7. 导出 UI 列表视图示例
导出和访问模式的权衡将在数据访问中详细介绍。
数据访问
到目前为止,我们已经涵盖了整体架构概念,比如使用训练数据数据库来避免电话游戏。还有 BLOBs 和格式的概念。现在我们讨论注释本身。使用以训练数据为中心的方法的好处是,您可以得到最佳实践,比如内置的快照和流式处理。
流式处理是与查询分开的概念,但在实际应用中紧密联系在一起。例如,您可以运行一个查询,结果是文件级别导出的 1/100 数据量,然后在代码中直接流式处理该数据切片。
这里有一些重要的概念需要注意
-
基于文件的导出
-
流式处理
-
查询数据
澄清存储、摄入、导出和访问
数据存储
是 BLOBs 的字面存储,而不是假定保存在单独数据库中的注释。
摄入
关于数据的吞吐量、架构、格式和映射。通常在训练数据系统与其他应用程序之间。
导出
在此上下文中通常指从训练数据系统中的一次性基于文件的导出。
数据访问
关于查询、查看、下载 BLOBs 和注释。
一种思考方式是,数据通常以不同于静态存储和查询的方式存储在数据库中。训练数据类似。有摄入数据的过程,将其存储的不同过程,以及查询它的另一种不同过程。
现代训练数据系统将注释存储在数据库中(而不是 JSON 转储),并提供对这些注释的抽象查询功能。
基于文件的导出
如版本控制中所述,基于文件的导出是数据的时间点快照。通常仅根据一组非常粗略的标准生成,例如数据集名称。基于文件的导出非常简单,因此我不会在其上花费太多时间。文件导出与流式传输的权衡比较在下一部分中详细讨论。
数据流
传统上,注释总是导出到静态文件中。例如 JSON 文件。
而不是生成一次性导出,您可以将数据直接流式传输到内存中。
这是“如何从系统中获取我的数据?”的问题。所有系统都提供某种形式的导出。是静态的一次性导出?是直接到 tensorflow 或 pytorch 内存?
流式传输的好处
-
只加载您需要的内容,可能是 JSON 文件的一小部分。
在大规模情况下,将所有数据加载到 JSON 文件中可能是不切实际的,因此这可能是一个重要的优势。
-
更适合大型团队。避免等待静态文件。您可以在注释开始之前编程和处理预期的数据集,甚至在注释进行时进行工作。
-
更节省内存 - 因为它是流式传输,您无需将整个数据集加载到内存中。这在分布式训练以及在本地机器上处理 JSON 文件将不切实际时尤为适用。
-
避免“双重映射”,例如映射到另一种格式,然后再映射到张量。在某些情况下,解析 JSON 文件甚至比仅更新几个张量更费力。
-
更灵活,格式可以由最终用户定义和重新定义。
流式传输的缺点
-
在代码中定义。如果数据集发生变化,可能会影响可重复性,除非采取额外步骤。
-
需要网络连接。
-
一些传统的训练系统/自动机器学习提供商可能不支持直接从内存加载,可能需要静态文件。
这与导出不同,它意味着直接连接。
有一件事要牢记,即我们不希望静态选择文件夹和文件。我们真正要做的是设置一种流新数据的过程,以事件驱动的方式。为此,我们需要将其视为组装管道,而不是获取单个现有已知集合的机制。
示例
在此示例中,我们将使用 Diffgram SDK 获取数据集并进行流式处理。
!pip install diffgram
from diffgram import Project
# Public project example
coco_project = Project(project_string_id='coco-dataset')
default_dataset = coco_project.directory.get(name = 'Default')
# Let's see how many images we got
print('Number of items in dataset: {}'.format(len(default_dataset)))
# Let's stream just the 8th element of the dataset
print('8th element: {}'.format(default_dataset[7]))
pytorch_ready_dataset = default_dataset.to_pytorch()
查询介绍
每个应用都有自己的查询语言。这种语言通常具有特定于训练数据上下文的特殊结构。它还可能支持与其他查询构造的抽象集成。
为了帮助框架,让我们从这个简单的例子开始,获取所有有超过 3 辆车且至少 1 名行人的文件。
dataset = project.dataset.get('my dataset')
sliced_dataset = dataset.slice('labels.cars > 3 and labels.pedestrian >= 1')
与生态系统集成
在进行模型训练和操作时有许多应用程序。在撰写本文时,这个类别中有数百种工具。正如前面提到的,您可以在训练数据工具中设置定义格式、触发器、数据集名称等映射。我们将在后面的章节中更深入地讨论这些概念。
模型运行 也称为:预测
在样本或数据集上运行机器学习模型。例如,给定模型 X,输入图像 Y,并返回预测集合 Z。在视觉案例中,这可能是对象检测器、道路图像和一组边界框类型实例。
安全性
训练数据的安全性非常重要。通常,原始数据在安全视角下受到更严格的审查。例如,关键基础设施的原始数据、驾驶执照、军事目标等。
安全是一个广泛的主题,必须进行彻底研究,与本书分开。我特别关注数据工程背景下最常见的安全事项。请注意,在其他章节中,我们已经讨论了更广泛的安全主题,如整体训练数据系统的安全性。
-
访问控制
-
签名 URL
-
个人可识别信息
访问控制
一个能帮助我们区分这一点的重要问题是:
-
哪个系统在处理数据?在系统级处理和存储时,身份访问管理(IAM)权限方面有哪些问题?
-
有哪些用户访问方面的问题?
身份验证和授权
生产级系统通常会使用 Open ID Connect (ODIC)。这可以与基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)结合使用。
这些都是复杂的主题,一般性的处理超出了本书的范围。特别是对于训练数据,通常原始数据的访问是最具有紧张感的地方。在这种情况下,通常可以在每个文件或每个集合级别进行处理。在每个文件级别,访问必须由一个能够识别 {用户、文件、策略} 三元组的策略引擎控制。这在每个文件级别进行管理可能会比较复杂。通常在集合(数据集)级别上更容易实现。在集合级别,这是通过 {用户、集合、策略} 实现的。
一个例子
在这个代码示例中,我们将创建一个新数据集,一个新的安全顾问角色,并允许在该角色上抽象对象对 {view, dataset} 权限进行操作。
restricted_ds1 = project.directory.new(name='Hidden Dataset 1', access_type='restricted')
advisor_role = project.roles.new(name='security_advisor')
advisor_role.add_permission(perm='dataset_view', object_type='WorkingDir')
然后我们将用户(成员)分配给受限数据集。
member_to_grant = project.get_member(email='security_advisor_1@example.com')
advisor_role.assign_to_member_in_object(member_id=member.get('member_id'), object_id=restricted_ds1.id, object_type='WorkingDir')
或者,这可以通过外部策略引擎完成。
签名 URL
签名 URL 是提供安全访问资源的技术机制,最常见的是原始媒体 BLOBs。签名 URL 是涉及身份验证和授权步骤的安全流程的输出。签名 URL 最具体地被认为是对资源的一次性密码,常见的附加条件是在预设的时间后过期。此过期时间有时短至几秒,通常不超过一周,并且很少“几乎无限期”,如多年。签名 URL 并非训练数据的特有内容,因此在研究它们时必须仔细检查,因为它们看似简单但包含许多陷阱。在这里,我们仅在训练数据的上下文中提到签名 URL。
需要注意的最关键的一点是,由于签名 URL 是临时的,将签名 URL 作为一次性事务传输并不是一个好主意。这样做会在 URL 过期时有效地瘫痪训练数据系统。这也不够安全,因为要么时间太短而无法使用,要么时间太长而不够安全。相反,最好是与您的身份验证和授权系统集成。这样一来,特定的 {用户,对象/资源} 对可以按需生成已签名的 URL。特定用户可以获取一个短暂的即将过期的 URL。
换句话说,只要服务直接集成到训练数据系统中,您可以使用训练数据系统外的服务生成已签名的 URL。再次强调,将实际组织逻辑和定义移至训练数据系统内部非常重要。单点登录(SSO)和身份访问管理(IAM)集成通常跨越数据库和应用程序,因此这是一个单独的考虑因素。
训练数据系统提供了新的安全数据保护方式。这包括直接将训练数据传输给 ML 程序,绕过单个人员不必要的访问权限。我鼓励您阅读您的训练数据系统提供商的最新文档,以了解最新的安全最佳实践。
云连接和签名 URL
任何需要监督数据的人都需要查看它。这是最低限度的访问级别,基本上是不可避免的。准备系统,如删除个人可识别信息(PII)的系统、生成缩略图、预标记等,也需要查看数据。此外,为了系统之间的实际通信,通常更容易传输仅 URL / 文件路径,然后让系统直接下载数据。这特别适用于许多终端用户系统的上传速率远远低于下载速率的情况。例如,想象一下说:“使用此路径上的 48 GB 视频”(KB 的数据量),而不是试图从您的家用机器传输 48 GB 的数据。
有许多方法可以实现这一点,但签名 URL - 每资源密码系统 - 是当前普遍接受的方法。它们可以“在幕后”使用,但通常总会以某种形式使用。
有时因为好坏各种原因,这可能成为一个有争议的领域。我将在这里突出一些权衡来帮助您决定对您的系统而言什么是相关的。
SignedURLs
一个包含资源位置(比如图片)和集成密码的 URL。类似于 Google Docs 中的“分享此链接”。签名 URL 也可能包含其他信息,并且通常会有时间限制,即密码会过期。例如,签名 URL 的一般形式为:sample.com/123/?password=secure_password(实际的签名 URL 通常非常长,大约与这段文字的长度或更长)。
我们在这里做出一些区分并且如此具体地讨论 IAM 的原因是因为训练数据存在一些不寻常的数据处理问题:
-
人们以不同于其他系统的“原始”数据方式查看数据。
-
管理员通常需要相当广泛的权限来处理数据 - 这在传统系统中是不常见的方式。
-
虽然在某种程度上可能与传统上并无多大差异,但数据大小和处理上存在一些关注点,而且对于什么是合理的规范也没有很明确的建立。
个人可识别信息(PII)
处理 PII 的两种最常见方法是删除它,或创建一个符合 PII 的处理链。
PII 删除
PII 可能包含在元数据中(例如 DICOM)。您可能希望完全清除这些信息,或者仅保留一个单一的 ID,将其链接回包含所需元数据的单独数据库。
PII 可能包含在数据本身中。例如,对于图像,这可能涉及模糊化面部和识别房屋编号等标识。这将根据您所在地的法律和用例而显著变化。
PII 识别与培训
数据集包含 PII,且不能或不会更改。也许 PII 对于训练是必要或有用的。这需要有 PII 合规的数据链,员工的 PII 培训,并通常适当的标记以识别包含 PII 元素。
预标签
监督模型预测是常见的。它用于衡量系统质量,改进训练数据(注释)并警示错误。我们将在后续章节中讨论预标注的利弊。这里是对技术细节的简要介绍。预标注的主要思想是,我们从已运行的模型输出中获取结果,并将其提供给其他流程,例如人工审核。
更新数据
开始更新案例可能看起来有点奇怪,但由于记录通常会被机器学习程序更新,因此在运行模型和机器学习程序之前了解更新计划是很有必要的。
如果数据已经存在于系统中,则需要引用文件 ID 或其他形式的标识符,如文件名,以与现有文件匹配。对于大量图像、频繁更新的视频等,更新已知记录比重新导入和重新处理原始数据要快得多。
最好将定义放在机器学习程序和训练数据之间,在训练数据程序中定义。
如果不可能,那么至少要将训练数据文件 ID 与模型训练的数据一起包含。这样做将使您能够更轻松地使用新结果更新文件。这个 ID 比文件名更可靠,因为文件名通常只在目录内唯一。
预标注的注意事项
例如,视频序列等格式可能有点难以理解。如果您有复杂的模式,这一点尤为真实。为此,我建议确保该过程适用于图像,并/或者在尝试真正的多序列之前,该过程适用于单个默认序列。SDK 函数可帮助进行预标注工作。
一些系统使用相对坐标,而另一些则使用绝对坐标。只要知道图像的高度和宽度,就很容易在它们之间进行转换。一个转换为相对坐标的示例定义如下
x / width 和 y / height。例如:一个点 x,y (120, 90) 与宽度/高度 (1280, 720) 将具有相对值 120/1280 和 90/720 或 (0.09375, 0.125)。
如果这是您首次导入原始数据,则可以在导入原始数据时同时附加现有实例(注释)。如果无法附加这些实例,则将其视为更新。
最常见的问题是:“是否应将所有机器预测发送到训练数据数据库?”答案是是,只要可行。噪声就是噪声。发送已知的噪声预测毫无意义。许多预测方法生成多个预测,并设有某种包含阈值。通常,对这些数据进行过滤的任何机制也需要在此应用。例如,仅采用最高“置信度”预测。同样,在某些情况下,包括这种“置信度”值或其他“熵”值可以帮助更好地过滤训练数据。
预标注数据准备过程
现在我们已经涵盖了一些抽象概念,让我们深入探讨一些选择的媒体格式的具体示例。我们无法在本书中涵盖所有可能的格式和类型,因此您必须查阅文档,了解您特定的训练数据系统、媒体类型和需求。
如图 4-8 所示,预标注过程涉及以下步骤:
-
将您的数据映射到您的注释工具的格式。
-
在导入时将数据附加到注释工具的文件中
-
验证数据

图 4-8. 块图示例
通常会有一些高级格式,比如说一个图像可能与许多实例相关联,或者一个视频可能有许多帧,每个帧可能有许多实例,如图 4-9 所示。

图 4-9. 原始媒体和实例之间关系的视觉概述
示例 python 代码:
def mock_box(
sequence_number: int = None,
name : str = None):
return {
"name" : name,
"number": sequence_number,
"type": "box",
"x_max": random.randint(500, 800),
"x_min": random.randint(400, 499),
"y_max": random.randint(500, 800),
"y_min": random.randint(400, 499)
}
This is one “instance”. So for example running the function `mock_box()` will yield:
instance = {
"name" : “Example”,
"number": 0,
"type": "box",
"x_max": 500,
"x_min": 400,
"y_max": 500,
"y_min": 400
}
We can combine instances into a list to represent multiple annotations on the same frame.
instance = {}
instance_list = [instance, instance, instance]
¹ 来自 Google Answers
第五章:工作流程
介绍
训练数据是关于用数据创建人类意义的。人类自然是其中至关重要的组成部分。在本章中,我将介绍训练数据的人工工作流的具体细节。
首先,我将简要概述工作流程如何是技术与人员之间的胶水。我强调了为何需要任务的动机,并转向核心主题:
-
入门
-
质量保证
-
分析和数据探索
-
数据流
-
直接标注
在《人工任务入门》中,我将讨论基础知识,为什么模式通常会持续存在,用户角色,培训等。理解的下一个最关键的事情是质量保证。我专注于结构层次的事物,考虑需要注释者信任的动机,标准的审阅循环,以及常见的错误原因。
一旦您开始并进行了基本的质量保证,您将希望开始了解如何分析您的任务、数据集等。这一部分将引导您如何使用模型来调试您的数据,以及更一般的与模型的工作方式。
数据流,将数据移动并放在人类面前,然后到模型中,是工作流程的关键部分。
最后,我将通过深入研究直接标注本身来结束本章。这将涵盖像业务流程集成,监督现有数据和交互式自动化这样的高层概念。以及视频标注的详细示例。
技术与人员之间的胶水
在数据工程和人工任务本身之间,我将在这里提到的一个概念是工作流。
工作流程是在技术数据连接和人工任务之间发生的所有定义和“胶水”。
例如,数据工程可能会将一个存储桶连接到您的训练数据平台。但是如何决定何时将数据拉入任务中?何时拉入任务中?这些任务完成后该怎么做?
实施这些管理员决策所需的代码,这种“胶水”,通常由临时笔记、一次性脚本和其他相当脆弱的过程组成。进一步复杂化的是越来越多的中间步骤的选择,例如运行隐私过滤器、预标注、路由或排序数据以及与第三方业务逻辑集成。
相反,一个良好的工作流通常会旨在设置:
-
明确定义的流程,展示在各个阶段之间的所有胶水代码。
-
包括人工任务
-
对于什么是手动操作,什么是自动化的以及两者之间的所有内容有充分的理解时间。
-
有一个明确定义的导出步骤。包括使用哪些数据集或数据的切片(例如数据查询)。
-
展示所有第三方步骤和集成,如 webhook、训练系统、预标注等。
-
有一个明确的“离开”点,例如大型编排系统或模型训练系统
-
足够灵活,管理员可以在最小的 IT 支持下进行重大更改(例如,将数据连接从工作流程中使用的方式抽象出来)。
您可以在训练数据平台中定义这些步骤的一部分或全部。在这种情况下,可能会有内置选项来控制工作流程的时机,例如每个步骤在子步骤完成时完成、整个步骤完成时完成、按预定时间表完成或手动触发完成。
这个工作流程的具体实现细节自然高度依赖于您的特定组织、工具选择、不断变化的系统等。鉴于这种粘合的本质,在几乎每种情况下都会有所不同。因此,关键是简单地意识到存在这样的粘合和工作流程,以及工作流程的骨架的各个方面可以直接放置在训练数据系统中。
在本章中,我将主要关注工作流程的任务部分,因为这是最关键和最清晰定义的部分。我将简要回顾一些其他常见的工作流程步骤和所需的“粘合”。
这里的关键要点是
-
您可以把工作流程看作是训练数据中其他所有部分的“粘合剂”。
-
在工作流程中,大部分持续的精力都集中在与人类任务相关的概念上。
-
技术集成、自动化、数据连接等都是工作流程原则中的子步骤。
-
无论在单一系统中明确定义了多少,工作流程(例如手动脚本和特定人员的一次性手动步骤)始终存在。
-
训练数据系统可以提供工作流程的架构结构,但每个子步骤都是不同的,具体到您的案例。
请注意,粘合还可以存在于技术与技术之间。
在训练数据系统中,良好定义的“粘合”代码是一个相对较新的领域。考虑到这个领域变化迅速,本书不会详尽涵盖,请参阅您提供者的文档以获取更多信息。

图 5-1。工作流程示例
为什么需要人类任务?
对此有几种思考方式。首先,通常存在大量的一线人员,他们审查、塑造并消化原始数据成为新形式。这自然导致需要某种形式的组织。其次,大多数现有的通用任务系统简单地没有足够的支持水平,无法与数据紧密合作,并在人类和 AI 所需的技术定义之间跳跃。
以新的方式与非软件用户合作
注释数据类似于执行任何技术上要求高的任务。管理员面临一些重大挑战,需要组织和管理这项工作。
如果您也是一个专业主题专家,那么您可能能够基本上独自创建和更新模式。然而,可能存在一个理解如何将模式与所需的数据科学建模需求匹配的差距,需要更多地与数据科学进行接口。相反,如果您是一名数据科学家,您可能需要在很大程度上依赖于您的专业主题专家来构建准确的模式。无论哪种方式,您都将与您的注释者合作共同创建一个“代码库”。
通常,像规模化管理这样的项目的负责人将与所有利益相关者紧密合作,从工程到专业主题专家和数据科学。
开始使用人工任务
要从本章中获得最大价值,非常重要的是您已经阅读了前四章。
大多数工作流设置可以在没有深入的技术知识的情况下完成,但是,这仍然假定有一个已准备好并可供配置的系统。因此,我还将假设您已经拥有一个运行良好的训练数据平台,并且技术项目,例如数据工程章节中涉及的那些项目,已经准备就绪。
基础知识
要设置您的人工任务,必须完成以下关键步骤:
-
命名
-
模式选择
-
谁能进行注释
-
数据流
-
发布
还有许多可选步骤,例如审查循环、UI 定制等。
我将本章重点放在人工任务本身上。我将在这里解释为什么所有这些步骤实际上应该非常快速和简单,因为大多数配置工作应该已经完成。
前两个步骤是为你的任务选择一个好名字和谁能够进行注释。
这两个步骤将依赖于你具体的业务背景。名称自然被用来组织工作,并且大多数系统将支持某种形式的额外任务标记,例如成本中心或其他项目元数据。
简而言之,模式是编码“谁、什么、在哪里、如何和为什么”的范式。由标签、属性及它们彼此之间的关系构成的含义表达。选择模式,意味着从已经创建的模式中选择,例如我们在第三章中深入讨论的内容。
虽然在简单情况下,项目经理或管理员可能会在创建任务的过程中编辑模式或创建新的模式。但是对于大多数现实世界的业务案例来说,模式的创建是一个复杂的过程,例如可能由 API/SDK 填充,涉及多人签署,并且可能需要几小时、几天甚至几周的时间。因此,对于管理员创建人工任务的范围而言,理想情况下应该只选择现有的模式。
数据流意味着在训练数据程序中选择一个已定义的数据集。这可以是已经有数据的数据集,也可以是预期将来通过技术集成接收新数据的空集。在数据流部分,我将详细介绍数据集选择,以及它与人工任务的关系。
如数据工程章节所述,数据流的技术集成应已设置好。我重申这个主题,以强调涉及人员的不同角色。在这里,管理员可能正在选择一个数据集,但是数据工程已经在系统中定义了该数据集的含义。数据科学将在多个集合和人工任务中切片和查看数据,因此理想情况下,他们在任务阶段对数据流应该只有最小的关注。
如工作流程简介中所述,人工任务可以被视为工作流程中最主要的构建块。其他构建块,如自动化概念,将在第八章中介绍。从更高层次来看,围绕 AI 转型主题的概念性想法将在第七章中讨论。
模式的持久力
模式具有很强的持久力,因为:
-
需要大量时间来创建并获得重要初始模式的政治签字批准。
-
对模式的任何重大更改可能会使之前的部分工作无效。
-
一般来说,模式通常可以扩展。
例如,考虑我标记了一个“果树”,然后标签被更改为“苹果树”。在标记时,我标记的是“任何果树”,而不是“苹果树”!添加新属性或新的深度级别。例如,树的标签可以有一个带有可选属性类型的“树”标签,因此如果尚未确定树的类型,则其将为空。
早些时候我解释过,管理员只需选择一个模式。所以,作为管理员,你为什么需要关注模式的持久力?因为任务完成的时间很大程度上取决于你。因此,当你启动或发布任务时,你需要知道模式是否完整并且可以使用,或者是否有预期的模式变更即将到来。
用户角色
通常有两个主要的系统角色桶需要考虑。预定义角色和自定义角色。
最常见的预定义角色包括:
超级管理员:
安装范围管理员
管理员
对项目的所有访问权限
编辑器
数据工程和数据科学访问权限
标注员
注解访问
观察者
仅查看权限
一般来说,大多数用户都会被分配注释权限,因为他们只需要进行注释。
角色仅适用于特定项目默认设置。
预定义角色仍然可以与 SSO 系统集成,例如将一线工作人员的访问权限映射到标注员角色。
自定义角色更为复杂。自定义角色可以通过策略引擎或外部系统强制执行权限。您还可以在培训数据系统内创建自定义角色,然后将权限附加到特定对象上。自定义角色可能会变得非常复杂,详细的处理超出了本书的范围,请参阅您的培训数据平台的文档。
培训
对于大多数企业,您需要与一线员工,特别是标注者进行某种类型的培训。一种方法是由管理员或一线员工的经理进行培训。
一个示例培训计划,使用本书作为推荐阅读,可能看起来像这样:
-
培训数据介绍(10 分钟)
从第一章中阅读节选或特定领域的摘要
-
模式(10 分钟)
从第三章中阅读节选
-
注释工具(15 分钟)
-
演示如何使用特定的注释工具软件。
-
快捷键和属性快捷键
-
-
业务特定期望(5 分钟)
-
常见问题解答(10 分钟)
-
支持(10 分钟)
如何访问帮助台
-
计划下一次期望的会话(5 分钟)
黄金标准培训待定在新的框架上进行审查
让我们从这样一个假设开始,即标注者是出于善意,并且通常会根据呈现的数据做出良好的选择。在这种情况下,管理员仍然负责提供“正确”的定义。这可以是一个灵活的定义。可以由最资深的主题专家完成。这种方法可以与“审查”类型任务的随机抽样结合使用。它也可以作为一种考察。例如,向标注者展示一幅图像,他们进行标注,然后将结果与黄金标准进行比较。
与共识相比,成本大约低了三分之一。然而,通常可以获得类似或甚至更好的结果。共识中存在一种强制性的匿名方面。而这种方法则更具明确的“对/错”之分。它具有更多的问责制 - 如果我创建了一个任务,并且它被审查后出现问题,那就是一个明确的信号。这种机制可以凸显出模式、数据等方面的问题。它还有助于鼓励个人学习经验 - 例如标注者的改进。
这是一个发展中的领域,未来可能会出现其他方法。这个领域也有些争议。通常最好从黄金标准方法开始,除非您有明确的原因或理由使用共识。
任务分配概念
最常见的任务分配选项:
-
自动,“按需”由标注者默认执行
-
预定的,例如轮流分配
-
手动执行
您可能需要基于您特定的业务逻辑建立更复杂的任务分配和重新分配系统。
我在这里要补充的主要评论是,这应该基于您特定的业务需求,并没有“对”或“错”的方法。通常情况下默认是“按需”的。
您需要定制界面吗?
大多数工具假设您将自定义架构。有些还允许您自定义 UI 的外观和感觉,例如元素的大小或位置。其他则采用“标准”UI,类似于办公套件即使文档内容各不相同也具有相同的 UI。
定制界面的原因包括希望将其嵌入应用程序以及具有特殊的注释考虑因素。
大多数工具假设将使用像台式机或笔记本电脑这样的大屏幕设备。
平均标记者将使用多长时间?
一个简单的例子是热键。如果一个主题专家每个月只使用工具几个小时,那么热键可能并不那么重要。然而,如果有人每天工作 8 小时,每周 5 天,那么热键可能非常重要。
明确一点,大多数工具提供热键,因此特定的例子可能不值得担心。更普遍地说,关键是,由于历史或意图的偶然性,大多数工具确实是为某些类别的用户优化的。很少有工具能够同样适用于休闲用户和专业用户。没有对错之分,只是需要注意权衡。
任务和项目结构
首先,让我们理解一下一般的组织结构。一个项目包含多个任务,如图 5.2 所示。

图 5-2 任务结构
进行中的工作
在处理任务时,您将使用分析功能、数据探索、模型集成、质量保证和数据流概念。
质量保证
对于对训练数据新手来说,通常会有这样一种假设,即质量保证肯定不会那么难吧?
我的意思是,看看数据对吧?
主要问题在于,单个管理员可以看到的数据量通常只是整个注释集的一个小部分。在某些情况下,即使是对注释数据的小样本,也可能超出管理员一生中可能审查的范围。这对许多人来说是一个奇怪而难以接受的事实。看起来“查看几张图片”似乎是件很容易的事情。
如图 5-3 所示。一个人在合理时间内看到的数据量通常只是整个数据集大小的一个微小部分。实际上,在实践中,这种差异往往是数量级的差异。数据量实在是太多了!

解决这个问题的通常方法包括让更多的人参与其中以及更多的自动化。我们将在后面的章节中介绍自动化。当更多的人参与其中时,下一个重要问题实际上是“我对我的标记者有多少信任?”。
标记者的信任
计算机视觉的许多早期尝试通常假定注释者是“异教徒”。基本上,他们无法单独信任。这导致了很多验证众包智慧的研究。从高层次来看,这归结为让多个人完成同样的任务,然后分析聚合结果。但这是最佳方法吗?让我们仔细看看。
注释者是合作伙伴
注释者是 QA 循环的关键部分。我经常看到人们对此采取“我们与他们”思维方式。虽然理解 QA 目标和重要性,在更大的项目中,严谨性尤为重要,但我们都是一个团队。
我认为对于注释者的一致性和质量的担忧往往是夸大的。对于许多当前的注释案例,人们在高层次上通常对其含义达成一致。通常情况下,当存在分歧时,方案、数据的分辨率、隐藏的假设等更多地归咎于单个注释者。在项目开始之前共同定义项目规范并在过程中建立反馈循环,将提供最高质量和最准确的结果。
谁监督数据
这本书的范围远远超出了人类心理元素,但考虑到这里的人类背后还有人是值得思考的。
类比一下,考虑到程序员参与其代码的编译。到了最后,它要么运行要么不运行。她会得到对她努力的反馈。然而,在这里,一个人可能永远不会得到同样程度(或速度)的关于他们注释工作的反馈。也可能永远不会得到关于他们对 ML 模型影响的反馈。
想象一下几乎像做“代码审查”一样 - 但在正式的代码审查中,我们所做的所有努力是为了保护感情、情绪和新生的想法。
所有的训练数据都有错误
训练数据质量至关重要。就像代码质量一样。同样,所有的计算机程序都有 bug,所有的训练数据都有某种形式的错误。注释者只是错误的一个来源。从我看到的情况来看,最好将精力集中在系统性问题和流程上,而不是“一次性”的问题。ML 模型对偶尔出现的坏训练数据非常鲁棒。如果有 100 个“真正正确”的例子,和 5 个“误导”,一般情况下模型仍然能如预期工作。
对于那些真正重要的情况,100/100 都正确的情况我认为要么我们在自欺欺人,要么这种情况非常少见。是的 - 如果一个机器学习模型正在执行火星任务,当然,培训数据需要三重检查。但否则,我们试图过度优化系统中的每一个“错误”,这是精打细算而愚蠢的。
注释者的需求
人们的心理和一般工作态度往往至少与任何具体的 QA 过程一样重要。如果人们受到尊重、得到补偿和培训,他们的表现自然会与“最低投标者”方法不同。
-
究竟是谁在注释数据?
-
他们是否熟悉这些工具?常见的期望(例如缩放)即使对专业人士来说,除非解释,也可能不清楚。不要假设!
-
他们的技术设置是否适当?他们看到的是否与我看到的一样?(例如,常见的屏幕分辨率可能在不同国家之间有所不同。)
-
他们接受过什么样的培训?
-
他们是否有个人帐户,我们可以跟踪他们的具体关注点和绩效指标?
-
绩效指标是否准确反映了个人?
视频会议示例:作为一个快速的插曲,考虑一下对于训练数据和工具的了解并不等同于注释者的智能,可以考虑视频会议。我知道当我加入一个我不熟悉的平台的视频会议时,即使是简单的操作如静音和取消静音也可能很难找到或被忘记。注释工作也是如此。一个工具可能会轻松地完成某些操作,甚至是自动化的,而另一个工具则可能不行。一个有 30 年心脏病学经验的医生可能不知道一个特定的工具具有某种特定的功能。
训练数据错误的常见原因
-
低分辨率的原始数据。如果数据正推动人类能合理看到的极限,请记住这一背景。
-
此特定部分的模式不够理想。注释者无法合理地在模式中表达他们的知识。
-
指南不够理想或包含错误,例如矛盾之处。
-
高度具体的标签和属性
-
自由形式标签和属性(注释者输入自己的新文本/标签)
-
更复杂的空间类型。或者过于具体的空间类型(像素特定)。
-
任何形式的“隐藏”信息,例如遮挡
-
任何自然具有争议性的内容(例如政治、言论自由/仇恨言论、安全类运动、面部识别)
任务审查循环
两种最流行的审查选项是标准审查循环和共识。
标准审查循环
每个任务被发送进行审查的概率都有一定百分比。如果被发送进行审查并被拒绝,则将返回进行审查。如果被接受,则将被视为“已完成”。
-
进行中
-
审查中
-
如果未通过审查,则返回进行中状态。
-
如果通过审查,则完成。

图 5-4. 审查循环流程图。

图 5-5. 需要的更改的图表
一致性
例如,在图 5-6 中,我们展示了三个人画了一个类似的框,并将其合并结果分析为一个结果。

图 5-6. 标题待定
如果让多人做同样的事情并尝试合并结果听起来有点压力山大 - 你是对的! - 的确是这样!一般来说,这至少将三倍涉及的成本。这还引入了关于分析数据的一堆挑战。我个人也认为这导致了错误类型的分析。通常更好的方法是简单地获取更多的样本,由不同的人监督,而不是试图对单个样本得出某种结论。例如,如果存在极大的分歧 - 你该怎么做?
粗略地类比一下,想象一下让三名工程师编写一个应用程序,然后尝试自动判断哪个代码“更好”。这完全没有意义!相比之下,让三名工程师各自负责不同部分,然后共同讨论特定设计折衷问题,这更合理。
这引入的第二个主要问题是,大多数真实世界的情况比单个实例复杂得多。属性、视频等。如果一个人说这是第 12 帧,另一个人说是第 13 帧 - 你怎么处理?尽管在这个领域确实有一些非常真实的研究 - 但通常随着挑战的复杂性增加,以及标注者的“严肃性”增加,共识的需求减少了。
分析
和任何任务管理系统一样,报告和分析对于理解标注者和专业主题专家的表现至关重要。它也可以用于分析数据集本身、模式等。
注释指标示例
-
每项任务的时间。注意:任务可能有很大的差异。这个度量单独使用可能非常危险。建议与质量指标结合使用。
-
“已接受”任务的数量。已接受可能意味着通过了审查,没有审查,或类似的度量。
-
更新或创建的实例计数。
-
每个任务或每个帧的实例数量统计
-
完成的任务计数。同时考虑任务的难度和类型。
数据探索
在某种程度上,探索可以被看作是在普通文件浏览器上查看文件的“超级版”。通常这意味着利用专为该特定领域设计的各种工具的帮助。
类比一下,在营销系统中查看营销联系人和在电子表格中查看是一样的。你可能在电子表格中看到相同的“基础”数据,但在营销工具中它将提供其他链接的信息并提供可以执行的操作,比如联系这个人。
数据探索包括手动编写查询和查看数据。还可以包括运行自动化流程来遍历数据,例如发现见解或过滤其中的大量内容。可以用于比较模型性能,调试人工等等。
虽然在常规的文件浏览器中手动查看原始数据可能会进行一些有限的探索,但这并不是我在这里所指的。
要探索数据,必须先将其导入到一个训练数据工具中。数据探索工具有很大的差异,特别是在专有的自动化过程和分析深度方面。
数据通常可以一次查看一组样本或单个样本。
在反思探索时需要考虑的一个重要问题是:
-
进行探索的人可能参与或不参与标注过程。更一般地说,进行探索的人可能与进行上传、标注等任何其他过程的人不同。
-
将数据组织和工作流程用于实际模型训练的人可能不实用。
-
即使您直接参与所有过程,数据也是分隔的时间。例如,您可能在几个月内进行标注工作流程,然后在第三个月进行进一步的探索,或者可能在一年后探索数据等。
具体来说,如果我关心标注,我会关心“批次 #7”的状态如何?
当我探索数据时,我可能希望看到所有 1-100 批次的工作。在那时,我不一定关心是哪个批次创建的,我只想看到某些标签的所有示例。更广义地说,这部分是数据的不同视角,横跨多个数据集。
简单地说,探索过程可能在时间和空间上与标注分开。
探索几乎可以在任何时候进行。
-
您可以在批次标注之前检查数据,例如组织开始的位置。
-
在标注过程中,您可以检查数据以进行质量保证,简单地检查示例等。
通常的目标是
-
发现数据问题。
-
确认或否定假设。
-
根据在过程中获得的知识创建新的数据切片。
数据探索工具示例。
训练数据目录可以让您:
-
访问数据的一个切片而不必下载全部数据。
-
比较模型运行。
探索流程。
-
运行查询、过滤器或程序以切片或标记数据。
-
观察数据。
-
选择或分组数据。
-
采取一些行动。
探索示例。
-
对文件或一组文件进行标记,以进一步进行人工审查。例如,缺少的标注。
-
生成或批准数据的新切片。例如,可能更容易标注的缩减数据集。
让我们深入了解类似图像减少的例子。
类似图像减少。
如果您有许多相似的图像,您可能希望运行一个过程将其减少到最有趣的十分之一。这里的关键区别通常是它是一个未知的数据集,这意味着几乎没有或没有标签可用。您可能知道 90%的数据是相似的,但您需要使用一个过程来识别哪些图像是独特的或有趣的以进行标注。
一旦您将数据放入训练数据工具作为第一个摄入步骤,从那里添加图像缩减步骤变得很容易。实际上,这一步骤是自动探索数据,对其进行切片,然后呈现该切片以进行进一步处理。
在创建和维护训练数据时所需的组织方法通常与创建模型不太相关。创建训练数据的人员可能不是创建数据集的人员。而其他人可能会接管这些数据集并实际训练模型。
模型
使用机器学习模型是您的训练数据工作流的一部分。
使用模型调试人类
导入数据的一个关键额外方面是标记实例所属的“模型运行”。这是为了允许比较,例如视觉上如图 X 所示,在模型运行之间进行比较。它还可用于质量保证。我们实际上可以使用模型来调试训练数据。其中一种方法是按地面真相和预测之间的最大差异进行排序。对于性能优异的模型,这可以帮助识别无效的地面真相和其他标注错误。
Fig 5-7 示例:模型预测(实线)检测到地面真相中未检测到的汽车(虚线)。这种类型的错误可以自动推送到人工审查列表的顶部,因为该框远离任何其他框。 (例如算法示例是将最近的交并比(IoU)与某个阈值进行比较,在这种情况下,由于该框几乎与任何绿色框重叠,阈值会很高。

图 5-7. https://dashboard.scale.com/nucleus/ds_bwhjbyfb8mjj0ykagxf0/di_bwhjbzzb8mjj0ykagzzg

图 5-8. 显示建模集成的界面示例 - 比较 2 个模型和地面真相
为了更好地帮助理解这里的关系,考虑地面真相变化的频率比模型预测慢。确实,地面真相的错误可能会被纠正,添加更多地面真相等。但对于给定样本,一般来说地面真相是静态的。而在开发过程中,我们期望会有许多模型运行。甚至单个自动化过程(AutoML)可能会采样许多参数并生成许多运行,如图 5.9 所示。

图 5-9. 一个文件可能与许多模型运行和地面真相集相关联。
这里需要记住几点实际注意事项。没有必要将所有模型预测结果加载回训练数据系统。一般来说,训练数据已经在更高级别的评估过程中使用,例如确定准确性或精度等。例如,如果有一个自动机器学习过程生成了 40 个模型并确定了“最佳”模型,您可以通过该模型进行过滤,并只将最佳预测发送到比较系统。
同样地,一个现有的人类监督数据集也不是严格必需的。例如,如果一个生产系统在新数据上进行预测,那么就不会有可用的真实数据。即使如此,通过单个模型进行可视化调试仍然是有用的,并且在其他情况下也很灵活,例如在开发过程中同时运行新版本模型并进行抽查。
数据集、模型和模型运行的区别
“数据集”和“模型”之间没有严格的关系或层次结构 - 最好将其视为每个样本级别的情况。例如,样本 1 和样本 2 可能在同一个集合中,但模型版本 1 可能只在样本 1 上运行过。一个模型运行可能会生成一组预测,真实数据集是所有预测以及地面真相等的结合。这种结构更多地由其他需求定义,而不是仅仅是运行了哪些样本或批次样本的结果。虽然在某些情况下这种差异可能只是一种言辞上的区别,在我看来,最好在这种情况下保留“数据集”的概念以表示一个真正“完整”的数据集,而不是某些过程的部分产物。
一个模型通常是原始权重,也称为 - 训练过程的直接输出。而模型运行则添加了上下文,例如在运行时使用了什么设置(例如分辨率、步幅)。因此,最好将每个模型运行视为唯一的标识符。因为当然,结构相同但训练方式不同(数据、参数等)的模型是不同的。而静态模型仍然是独特的,因为上下文(例如分辨率或其他准备工作)可能已经改变,并且模型的“运行时”参数(例如步幅、内部分辨率设置等)可能已经改变。这可能会很快具体到上下文特定。总的来说,为每组 {模型、其运行的上下文、设置} 设置一个唯一的标识符可以避免很多混乱。
将数据传递给模型
其中一个重要的概念是持续改进模型。这是通过重复更新训练数据和模型来实现的。在理想情况下,通过“流式”机制来完成,例如如果满足某些条件,新模型预测会自动推送到审查系统。我们稍后会详细讨论“MLOps”过程。现在要考虑的主要问题是:任务完成后我希望数据去哪里?我希望做哪些阶段?接下来我将涵盖包括将数据传递给模型在内的数据流。
数据流
有两个主要概念需要注意:
-
整体工作流程,例如包括摄入、任务、模型训练等。
-
任务特定数据流。
在本节中,我将专注于仅谈论数据流。
您可能会有许多不同上下文的管道。例如,您可能会有一个用于人员任务的训练数据管道。然后可能会有一个模型管道 - 训练过程如何工作,最佳模型如何进入生产等等。在所有这些过程中可能会有一种通用的 Airflow 类型的管道,用于将数据从其他系统移动到首先的训练数据系统。我们已经讨论了围绕永续改进模型的概念。但我们如何实现它呢?这里有几个想法,我将逐一详细说明。
流媒体概述。
流媒体的一万英尺视角目标是“按需”自动获取人类注释。虽然人们经常跳到实时流媒体的思维中,但实际上这是一个不同(尽管相关)的想法。相反,想象一个项目,团队中的一人定义了标签模式。但数据还没有准备好 - 或许因为需要加载数据的工程师还没有加载它 - 或者因为这是尚未被传感器捕获的新数据。虽然听起来很不同 - 从训练数据的角度来看,这是同一个问题:数据尚未可用。
解决方法是提前设置好一切,然后让系统在数据可用时自动生成“具体”任务(从模板配置中)。
数据组织。
与任何数据项目一样,数据集本身也需要组织,与人类任务完成分开。常见的方法包括:
-
文件夹和静态组织。
-
过滤器(切片)和动态组织。
-
管道和流程。
文件夹和静态组织。
当我思考管理时,我经常想到组织。对于计算机数据,我想象桌面上的文件和文件夹。文件通过放入文件夹中来进行组织。例如,如果我把 10 张图片放入一个名为“cats”的文件夹中,我在某种意义上创建了一个猫图片的数据集。

图 5-10。[插图,显示桌面文件浏览器和猫的图像]
过滤器和动态组织。
数据集也可以由一组规则定义。例如,我可以将其定义为“所有不足 6 个月的图像”。然后让计算机根据我选择的某种频率动态创建该集合。这与文件夹有重叠。例如,我可能有一个名为“annotated_images”的文件夹,我进一步筛选只显示最近x个月的内容。
管道和流程。
这些定义也可能变得更加复杂。例如,医疗专家的成本比初级人员高。而运行现有的 AI 的成本则更低。因此,我可能希望创建一个数据管道,按顺序进行:AI,初级,专家。
纯粹按日期排列在这里可能不太有用,因为一旦 AI 完成其工作,我希望入门级人员立即查看它。当入门级人员完成他们的工作时也是如此,依此类推。
在处理过程的每个阶段,我可能希望输出一组数据的“文件夹”。例如,假设我们从 AI 看到的 100 张图像开始。在某一时刻,一个入门级的人员监督了 30 张图像。我可能希望只取这 30 张图像并将其视为一个“集合”。当然,一旦有人标注了第 31 张图像,现在这个集合应该有 31 张图像了。
换句话说,它所处的处理阶段,数据的状态及其与其他元素的关系有助于确定其集合。在某种程度上,这类似于文件夹和过滤器的混合,还增加了状态等“额外信息”。
管道的实施有时可能很复杂。例如,标签集可能是不同的。
数据集连接
我们如何知道数据何时可用?首先,我们需要发送某种信号来警示系统,表明有新数据存在。但是我们如何知道如何将数据路由到正确的模板呢?
空数据集
让我们暂时转向代码来思考一下。想象一下,我可以创建一个新的数据集对象
Python
my_dataset = Dataset(“Example”)
这是一个空集合。没有原始数据元素。
发送单个文件到该集合
在这里,我创建一个新的数据集,一个新文件,并将该文件添加到集合中。
dataset = Dataset(“Example”)
file = project.file.from_local(“C:/verify example.PNG")
dataset.add(file)
将数据集与模板相关联
我创建一个新模板。请注意,这个模板没有标签模式。- 现在它只是一个空壳。然后我让这个模板“监视”我创建的数据集。这意味着每当我向该集合更新文件时,该操作将创建一个“回调”,自动触发向该集合创建任务。
template = Template(“First pass”)
template.watch_directory(my_dataset, mode=’stream’)
将整个示例整合在一起
# Construct the Template
template = Template(“First pass”)
dataset = Dataset(“Example”)
template.watch_directory(dataset, mode=’stream’)
file = project.file.from_local(“C:/verify example.PNG")
dataset.add(file)
在这里,我为人类创建了一个新模板,并创建了新的数据集,我打算将数据放在这里。我指示它监视变化。然后我向系统中添加了一个新文件 - 在这种情况下是一个图像。请注意,在这一点上,文件存在于系统中,无论默认数据集是什么 - 但是在我想要的数据集中。因此,在下一行中,我具体调用了该数据集对象,并将文件添加到其中,- 从而触发了一个具体的人工审查任务的创建。
注意:从实际角度来看,这些对象中的许多可能是.get()(例如,现有的集合)。您可以在导入时将数据集定位到特定时间(无需稍后单独添加)。这些技术示例遵循 MIT 开源许可证下的 Diffgram SDK V 0.13.0。
扩展示例
template_first = Template(“First pass”)
template_second = Template(“Expert Review”)
dataset_first = Dataset(“First Pass”)
dataset_ready_expert_review = Dataset(“Ready for Expert Review”)
template_first.watch_directory(dataset_first , mode=’stream’)
template_first.upon_complete(dataset_ready_expert_review, mode=’copy’)
template_second.watch_directory(dataset_ready_expert_review, mode=’stream’)
这里我创建了一个 2 遍模板。之所以称为“2”,是因为数据将首先由第一个模板查看,然后稍后由第二个模板查看。这在很大程度上是重用之前示例中的元素,只有upon_complete是唯一的新功能。本质上,该功能表示“每当个别任务完成时,复制该文件,并将其推送到目标数据集。”然后,像往常一样在该模板上注册观察器。
这些示例可以无限组合 - 如果需要,可以有一个 20 步骤的流程。
非线性示例
template_first = Template(“First pass”)
dataset_a = Dataset(“Sensor A”)
dataset_b = Dataset(“Sensor B”)
dataset_c = Dataset(“Sensor C”)
template_first.watch_directories(
[dataset_a, dataset_b, dataset_c], mode=’stream’)
这里我创建了 3 个数据集,由一个模板监控。组织的重点在于展示,虽然模式可能相似,但数据集可以按您喜欢的方式组织。
钩子
要完全控制此过程,您可以编写自己的代码以在不同点控制此过程。这可以通过注册 Web 钩子、用户脚本等方式完成。
例如,当发生完成事件时,可以通过 Webhook 通知一个 Webhook,然后您可以通过(例如按值过滤,例如实例数量)手动处理事件。然后,您可以通过编程方式将文件添加到集合中。(这本质上扩展了复制/移动操作upon_complete()的功能。)
如何在用户界面中实现upon_complete()的示例显示在图 5-10 中。

图 5-11. 任务完成界面示例
直接注释
管理员绝对有必要了解注释员的日常使用情况。一个希望领导团队、进入管理员角色或者只是对整体情况感到好奇的注释员可以从管理员部分获益。
作为注释员,您正在监督为 AI 提供动力的数据(编写代码)。您有责任将嘈杂的现实世界数据映射到由他人定义的模式中。在您的旅程中,我们将涵盖一些实际进行注释的核心概念。包括视频系列、图像和机械结构。
注释员对数据有一个基础视图。这意味着您通常可以就模式的效果相对于实际数据提供宝贵的见解。如果您是一个主题专家,您可能还需要额外的努力来设置和维护模式。通常在开始进行注释时,初始模式已经被定义。在遇到问题时,仍然有很多机会来帮助维护和更新它,例如我们之前提到的自行车架与自行车的例子。
每个应用程序都有具体的要求,例如按钮、热键、步骤顺序等,这些要求可能略有不同。用户界面也会自然演变和变化。某些媒体类型的用户界面可能直观或更容易学习。其他可能需要大量培训、实践等才能掌握。
重要的一点是,本节重点介绍了复杂注释的一个小片段。甚至简单的注释,通过正确的人在正确的时间添加,通常会增加很大的价值,因此本节可能与您的项目无关。
接下来我将讨论两种常见的注释复杂性,即监督现有数据和交互式自动化。然后,我将通过深入探讨视频注释来确立所有这些内容。虽然有许多媒体类型,用户界面也在不断变化等等,但视频为了良好的注释而复杂。
业务流程集成
一个新兴的选择是将现有的日常工作框架化为注释。通过将特定于业务线的工作流程重新定义为注释,您可以以很少的额外成本获得注释。一般来说,这需要能够以匹配业务流程的方式配置注释用户界面。一个注释既可以完成现有的业务流程,同时还可以同时创建培训数据。
属性
注释属性的复杂性不断增加。从理论上讲,您可以想象任何可以放入表单中的东西都可以被定义为属性。尽管历史上空间注释(物体在哪里)曾经是一个重点,但属性越来越重要。我见过一些项目有数十甚至数百组属性。
标注深度
如图 4.3 所示,渲染像 YouTube 这样的视频,并提出有关整个视频的问题,与特定帧的标注非常不同。然而,这两者通常都被归类为“视频标注”。仔细探索您的用例所需的支持深度。在某些情况下,稍微增加深度可能很容易,在其他情况下,它可能会完全改变 Schema 的整体结构。

图 5-12. 标注深度比较 - 整体视频与帧图像来源:unsplash.com/photos/n31JPLu8_Pw?utm_source=unsplash&utm_medium=referral&utm_content=creditShareLink
监督现有数据
一个流行的自动化方法是预标注。这是模型已经做出预测的地方。根据使用情况,您可能会被要求纠正静态自动化,为其添加更多细节,或以其他方式与其交互。一个示例过程是审核文件,更新它,并标记为完成。
每当您看到一个模式,这是一个改进模型的绝佳机会。您是否总是在纠正类似的错误?将其传达给管理员或数据科学团队可以大大改善模型。即使模式是正确的,这也可能是模型内部出现问题需要修复的情况。
交互式自动化
监督现有预测与交互式自动化不同,您可以不断地处理更复杂的过程,通常是实时的,直到达到某个结果。
交互式自动化的一个例子是在感兴趣区域周围画框,并自动得到一个紧密围绕对象的多边形。或者点击关键点并得到分割掩码。
更一般地说,交互式自动化是您向系统添加更多信息,然后基于您添加的新信息运行某些过程。有时可以迭代地进行,直到达到某个期望的状态。有时这可能是一种“重试”的情况,您可以不断尝试绘制框,直到得到正确的多边形,或者它可以是一个基于您持续输入的“记忆”系统,继续变化。
通常作为注释者,您不需要实际“编码”任何这些交互。它们通常会提供为 UI 工具或热键。您可能需要了解一些自动化的操作参数。当它们工作良好时,当它们工作不佳时,何时使用哪种自动化(如果有多种可用)等。
一些常见的方法需要注意:
-
点击框/点/某物到多边形/分割
-
完整文件一般预测
-
领域特定的,如对象跟踪或帧插值
例如,语义分割自动边界
让我们放大到一个具体的例子,自动边界。这是系统检测边缘以创建 100% 覆盖掩码的地方。这通常比手动绘制边界更快,更准确。

图 5-13. 显示自动边界处理的 UI 示例
步骤:
-
在交叉形状上选择一个点。
-
选择交叉形状上的出口点
-
或
-
“覆盖绘制”,例如,覆盖现有对象,并期望它将自动绘制周围点的交叉。
视频
现在让我们涵盖一些更复杂的视频示例。
运动
我们注释视频以捕捉动态中的含义。汽车移动,投篮,工厂设备操作。由于这种动态,注释时的默认假设是每帧都不同。
考虑这个原始视频:youtu.be/ZciIT7BmKFk

图 5-14. 标题即将到来
汽车不在初始帧中。它移入画面。然后随着时间的推移,它仍然在画面中。
更一般地说,对象在帧之间进出。这发生在不同的时间点
车辆的属性也可能会发生变化 - 例如,在一帧中它可能完全可见,而在下一帧中它可能部分被遮挡。
通过时间跟踪对象的示例(时间序列)
目标是在多个时间点(通常是帧或时间戳)之间创建一些关联的注释。
又称为:序列,轨道。
在用户界面中通过时间跟踪对象的方法的示例包括
-
“幽灵帧”,其中前一帧的位置被标记,并且用户移动该帧以表示当前状态
-
“按住并拖动”,用户按住对象并随着对象移动
-
“点选并预测”,用户标记关键点,跟踪算法猜测移动方式。
一种方法是:
创建(或选择)一个系列。每个系列可以是视频独有的,也可以是一组视频(例如多台摄像机)独有的,或者在所有视频中全局唯一。
一般情况下,这迫使每个对象都是序列的一部分。如果对象通常出现在多个帧中,这样做效果很好,但如果对象通常只出现在一个帧中,这可能会有些繁琐。
一般来说,一个序列还会额外强加一些约束。
-
一个序列在同一帧中只能出现一次。例如,序列 12 不能在同一帧中出现两次。这可能并不总是正确 - 例如,一个对象可能部分被遮挡,并且可以由两个或更多空间类型表示。(想象一辆公共汽车被柱子挡住)
-
序列必须是相同的标签类型。虽然属性可能会改变,“顶层”概念在帧之间通常应保持一致。
静态对象
有时,视频中会有一个静态对象,例如一个不移动的零售店货架或其他展示物,或者一个不经常移动的交通信号灯的路口。
您可以通过以下方式表示这一点:
-
单个关键帧,即在第 x 帧(例如#898)。
-
起始和结束关键帧,即(9,656)。假设对象在第 9 帧进入,并在第 656 帧退出。更一般地说,这种模式是(进入帧,帧列表,退出帧)。
-
一个属性,比如“进入”或“可见性”(或% 可见性)。
这些都是有效将其标记为“静态对象”的方法。
持久对象 - 足球示例
一个视频中可能会有多个对象。例如,2 辆不同的汽车,苹果,足球运动员等。
从人类的角度来看,我们知道一个足球运动员,比如图 5-14 中的球员,在 0 帧、5 帧、10 帧等中都是同一个人,他仍然是罗纳尔多。

图 5-15 一名足球运动员在一帧中 来源:https://unsplash.com/photos/ztwaJXBWCC0
但对于计算机来说,这并不清晰。因此,为了帮助它,我们创建一个序列对象。即“罗纳尔多”。由于这是我们创建的第一个对象,它被分配为序列号#1。
如果另一个球员“梅西”也出现在帧中,我们可以为他创建一个新的序列,他将获得#2。另一个球员将获得#3,依此类推。
关键点是每个序列代表一个现实世界的对象(或一系列事件),并且每个视频都有一个唯一的编号。
系列示例
我们可以创建一个新的“系列”来随时间创建意义。
想象一个有 3 个感兴趣对象的视频。为了表示这一点,我们创建了 3 个系列。
-
系列#1 有帧(0、6、10),因为对象在第 0 帧进入视频,第 6 帧有所变化,然后在第 10 帧离开视频。对象在每个关键帧中随时间变化。
-
系列#2 有帧(16、21、22…)。对象也在变化。
-
系列#3 只有帧(0)。这是一个静止的对象,不会移动。
一个系列可能有数百个实例。
视频事件
表示事件的几种方式
-
为每个事件创建一个新的系列
-
为每个事件创建一个新帧。例如(12、17、19)表示 3 个事件,发生在第 12、17 和 19 帧。
-
使用属性声明“事件”发生的时间。
从用户界面的角度来看,这里的主要权衡是您期望多少事件以及模式其余部分的复杂性。作为一个经验法则,如果事件少于 50 个,将它们全部保留为单独的系列可能更加“清晰”。如果事件超过 50 个,则通常最好使用单一序列,并使用帧或事件。
对于复杂事件案例,属性可以很好地工作。主要缺点是,与关键帧相比,它们通常不那么“可发现”,而关键帧在视频中更容易“跳转”到特定点。
就注释速度而言,要密切关注视频事件的快捷键。通常可以使用快捷键创建新序列,更改序列等等。
在常见的注释错误方面,确保您处于所需的序列上。缩略图通常可以帮助您在视觉上确定这一点。您还可以跳转到序列中的其他帧来验证它。
检测序列错误
想象一下,您正在审查一个预先标记的视频(无论是由另一个人还是算法完成的)。为了帮助做到这一点,像 Diffgram 这样的工具会自动改变序列的颜色。这意味着您可以播放视频,并观察序列中的颜色变化。通过这种方式,捕捉错误可能会非常容易。对于真实世界中有重叠实例的情况,经常使用这种颜色功能播放视频是检测问题最简单的方法。您还可能通过自动化流程或其他注释人员对其提出的问题票据来提醒潜在的系列错误。
这是一个例子,同一辆车的序列号被错误地更改。

图 5-16. 标题即将到来
要更正它,我打开实例的上下文菜单,并选择正确的序列。如图 5-17 所示。

图 5-17. 修正无效序列的过程示例。
在这个例子中,我知道是正确的,因为
-
这辆车与其前一帧最相似。
-
这辆车在视觉上与系列的缩略图相似。
视频标注中的常见问题
作为人类,我们可能会观察到一个给定的场景,比如驾驶的道路,并评估路肩/植被的位置。而仅仅看图片像素时,并没有显著的可见证据支持这一点!更普遍地说,这涉及宣称“应该”存在的内容与你实际能看到的内容之间的差异。其他常见问题包括:
-
反射,比如窗户中的人的倒影
-
透明但有障碍物的物体,比如栏杆
-
对象检测预测的是矩形形状,而大多数现实世界中的物体并非矩形。
-
非驾驶视图之外的繁忙区域,例如拉斯维加斯大道
-
视频帧中物体出现和消失的问题。
第六章:工具
引言
训练数据工具的选择和种类非常丰富。有如此多的选择,选择最合适的工具通常是最困难的选择。现代训练数据工具从全面的平台到特定用途的工具各不相同。在这里,我将讨论一些工具的范围,从个人学习到大团队。
为什么我们需要专门的训练数据工具?这些工具是由与训练数据合作的团队的迫切需求驱动的。例如,当我第一次推出 Diffgram 的最早版本时,我希望我的远程工作的同事能够帮助进行注释,但所有现有的工具都无法做到这一点 - 它们都必须为每个用户单独安装。最近,随着工具选择的增加,团队开始对必须将许多简单工具串联在一起感到沮丧,并渴望一个集成所有功能的应用程序。
这些工具真正能做什么?当您购买一辆汽车时,您可能不确定它的驾驶感受,但您相当确信您将使用它从 A 点到 B 点。在训练数据中,A 到 B 真的是什么?使用训练数据工具自动获得哪些好处?您需要为此付出什么努力?当您完全上手时,它是什么样子?
阅读本章,您将清楚地了解可用工具的一般分段。从这个高层次的地图来看,我将深入探讨围绕不同目标范围的权衡。自然而然地,需要考虑规模、每秒查询、团队和数据类型。我将探讨在规划现实世界系统时最关注的问题。从单个用户开始,然后是小团队,逐步扩展到大公司的大团队。
开源还是闭源?自我安装还是软件即服务?这些争论就像天长地久一样。我将从训练数据及其周围的细微差别出发,提供一个观点。我还将涵盖训练数据定制、安全性、开源、部署、成本、易用性、安装、硬件、配置、偏见、神话和元数据。
在本章的结尾,您将清楚地了解到最关键的问题、需要考虑的关键权衡,并对这些工具能带您到哪里有一个高层次的理解。
为什么要使用训练数据工具
我们有数据库来顺利存储数据。Web 服务器用于顺利提供数据。现在有了训练数据工具,可以顺利处理训练数据。
我之所以说流畅,是因为我不一定要使用数据库。我可以把我的数据写入文件,然后从中读取。我为什么需要postgres?因为 Postgres 带来了各种各样的功能,比如保证我的数据不会轻易损坏,数据是可恢复的,数据可以高效查询。训练数据工具也以类似的方式发展。
下面我将提供一种思想的进展,它与行业中发生的事情相吻合,并且希望对你现在正在经历的事情有所帮助。
任何形式的员工时间往往是最大的成本中心。良好部署的工具带来许多独特的效率改进,其中许多可以叠加在一起,创造出许多数量级的性能提升。继续使用数据库的类比,将其视为顺序扫描和索引之间的区别。其中一个可能永远不会完成,而另一个很快!训练数据工具将你升级到索引的世界。
数据训练工具有什么用?
从战略角度来看,训练数据工具是发货机器学习系统的先决条件。稍微放大一点,训练数据工具包括:
-
提供进行文字标注的接口
-
工具可以在人机监督的背景下赋予人们、流程和数据力量
-
带来清晰的并表面出整体的训练数据关注点
为了更好地理解这一实践,让我们回到我们的数据库类比中。我是否感觉被迫使用数据库?虽然我知道我基本上必须使用数据库,但我可以更多地关注所理解的好处,以了解为什么我应该使用数据库。“哇,Postgres 允许我存储数百万条记录并在毫秒内查询它们!”
类似地,训练数据工具提供了许多超越处理细枝末节的好处。例如,“哇,我的数据科学家可以查询由标注者训练的数据,而不必下载大量数据集并在本地手动过滤”。
最佳实践和能力水平
对训练数据工具的高度熟练至少需要与学习 DevOps 一样多的工作量。
就我个人而言,多年后我仍在学习 DevOps……因此值得考虑,你的训练数据学习可能更像是一个旅程,而不是一个目的地。
我提出这个问题是为了让每个人都明白,无论你有多熟悉,或者花了多少时间,关于训练数据总有更多的东西要学习 - 我自己也一直在学习!
人机监督
你可能熟悉“人机交互”(HCI)的概念。对我来说,这意味着我作为用户如何与程序相关联。它易于使用吗?我如何与它互动?
谈到训练数据,我想介绍一个叫做人机监督(HCS)的概念。这个想法是你正在监督这台“计算机”。这台“计算机”可以是一个机器学习模型,也可以是一个更大的系统。这种监督发生在多个层面,从文字标注到批准数据集。
这与互动形成了对比,在互动中用户是“消费者”,而在此系统中用户是“生产者”。用户生成的监督被计算机消费。这里的关键对比在于,通常情况下,计算机互动是确定性的。如果我更新了某些内容,我期望它被更新。而在计算机监督中,就像人类监督一样,是非确定性的。存在一定程度的随机性。作为监督者,我可以提供修正,但对于每一个新实例,计算机仍然会做出自己的预测。
为了节省空间,我不会深入讨论这个区别,如果现在不清楚也不要担心。随着时间的推移,这里的一般思路是继续区分这种新形式的人机监督工作和常规计算机使用。
工具带来清晰度。
训练数据工具是有效出货你的机器学习产品的一种手段。作为这一复杂目标的手段,训练数据工具带有现代软件领域中最多样化的观点和假设之一。这就像 No-SQL vs SQL 时代的论战一样。
工具帮助在噪音中带来一些标准化和清晰度。它们还帮助那些本来无法进行比较基准的团队,迅速进入视野。
-
为什么要手动导出文件,当可以实时流式传输所需的数据呢?
-
为什么不同的团队使用稍有不同标签存储相同的数据,而不是使用单一统一的数据存储呢?
-
为什么要手动分配工作,当可以自动完成?
理解工具的重要性
如果没有合适的训练数据工具,就像在没有工厂的情况下建造汽车一样。只有通过使用工具才能实现完全设置的训练数据系统。
我们有一种倾向去认为熟悉的东西理所当然。它只是一辆车,或者只是一辆火车,或者只是一架飞机。它们都是各自领域的工程奇迹。同样地,我们也低估了我们不理解的东西。“销售不可能那么难”,工程师说。“如果我是总统”等等。我发现很多人不理解训练数据工具的广泛性。
尝试形象化的一种方式是:
训练数据工具是:
Photoshop + Word + Premiere Pro + 任务管理 + 大数据特性存储 + 数据科学工具
这是一个大胆的声明。让我们详细分析一下。
-
人们期望能够像最好的绘图工具一样注释。
-
人们期望现代任务管理像一个专门的任务管理系统一样。
-
他们希望能够摄取和处理大量数据,实际上是一个完整的 ETL 工具。
-
还有在其上进行像商业智能工具一样的分析。
一个系统集成了所有功能。这几乎没有可比性!
很少有系统可以...
-
字面上的工作和工作的管理都在同一个系统中完成。
-
该系统涵盖了许多用户和不同的角色。
-
系统执行多个不同的功能,但除了报告之外,这些功能之间没有任何有意义的交互。
然而,在训练数据工具中...
-
注释的实际工作和任务管理被整合到一个系统中
-
一套界面,类似于 Adobe 套件或办公套件,被整合到一个系统中
-
多个独立功能的系统必须与直接用于其他系统的输入和输出以及集成的数据科学工具协调工作
意识到需要专门的工具
作为一个行业,当我们首次开始处理训练数据时,最初的冲动是简单地“完成任务”以开始训练模型。
问题的核心是:“对于人类而言,最简单的 UI 是什么,可以在数据之上进行注释,然后将其转换为模型可以使用的格式?” 这时人们开始意识到现代机器学习方法的强大,只是想知道“这能行吗?” “它能做到吗?” “哇!”。
问题迅速出现。当我们将项目从研究阶段转移到暂存或者甚至生产阶段时会发生什么?当标注者与编写代码的人不是同一个人,甚至不在同一个国家时会发生什么?当有数百甚至数千人在进行标注时会发生什么?
在这一点上,人们通常开始意识到他们需要某种形式的专门工具。早期版本的训练数据工具回答了其中一些问题,允许远程工作,一定程度的工作流程和规模。然而,随着系统压力的增加,更多问题迅速浮现。
更多使用,更多需求
非常明显地说,当有大量人员每天八小时全职工作在一个工具上时,每个人的期望和压力都会增加。
迭代模型开发,例如预标注,对持续改进训练数据施加了压力。虽然这是可取的,但它也增加了对工具的压力。因为自动化方法使用得越频繁,压力就越大。静态预标签只是冰山一角。一些自动化需要交互,进一步加剧了数据科学、标注者和标注工具之间的互动压力。
为了解决这些需求,添加了许多功能。随着工具提供商增加了更多功能,拥有流畅工作流程的能力成为了一个新问题。功能过多,自由度过多。现在,限制自由度的责任增加了。
新标准的出现
工具提供商如今已经积累了一些年的经验,并且学到了许多东西。从创建特定于训练数据的新命名概念到多种实现细节。这些即插即用的工具将压倒性问题变成了可管理的问题。这使您能够使用这些新标准,并在与您和您的项目相关的抽象级别上工作。
是的,我们处于标准训练数据的早期阶段。作为一个社区,我们正在开发从概念上的模式到预期的注释功能和数据格式的一切。关于训练数据工具的范围和标准功能的范围已经有了一些共识,但还有很长的路要走。
要理解涉及的广阔空间,请考虑图 6-1. 在左轴上,您可以看到各种类型的媒体,大约有 9 种主要类型。然后读者可能熟悉第四章涵盖的 9 个主要领域。

图 6-1. 训练数据工具景观
虽然自然存在一些重叠,但大多数功能区域根据媒体类型而有所不同。例如,文本、3D 和图像的自动化处理方式各不相同。
这里的领悟是,定制的复杂机器可能可以解决一些复杂性问题,但未能覆盖所需的广泛空间。一些工具提供者的进展看起来像图 6-1. 置历史兴趣于不顾,作为今天做出决策的人,进展的背景有助于确定价值来自哪里。
为了充分利用图 6-1,我喜欢将其视为 30,000 英尺的视角。因此,如果您正在考虑自动化改进,值得反思它是否适用于所有与您相关的媒体类型。这是一个提醒,任何一个领域的弱点可能会导致瓶颈。如果获取和输出数据困难,优秀的注释工作流的价值就会减少。
套件之旅
在您的需求旅程中,您在哪里?您是否已经看到需要专门的工具?需要最优质的工具?需要涵盖广泛训练数据空间的套件?
我们都喜欢熟悉的东西。正如办公套件从界面到命名约定提供了类似的期望和体验一样,训练数据平台也致力于在多种格式中创建熟悉的体验,无论是文本还是图像。
自然而言,在任何给定时刻,单个团队可能会专注于特定的数据类型或多种数据类型(多模态)。这里的熟悉感不仅仅在这个领域有所帮助。新加入团队的人员可以更快地适应,共享资源可以更轻松地在项目之间流动等等。
如图 6-2 所示,一般而言,进展是从哪里开始?
-
认识到需要专门的工具化
-
认识到技术空间的复杂性需要最好的工具 - 而不是什么都可以。
-
认识到用户空间的复杂性需要熟悉和共享理解。

图 6-2. 训练数据提供者的进展
正如我将在第七章中详细解释的那样,如果您考虑成立一个培训数据主管职位,熟悉的工具对团队至关重要。同一位标注员可以轻松在多种媒体和项目之间转换。这也有助于解决数据科学关注点之间的差异。
为了区分潜在的混淆。拥有一套工具并不意味着对所有事情都是“一站式”解决方案。数据科学可能有其自己的一套工具,用于训练、服务等。这也不排除针对特定兴趣领域的单点解决方案。这更像是一个操作顺序的想法,我们希望从最大的操作开始,即主要套件,然后根据需要进行补充。
开放源码标准
据我估计,2017 年全球商用培训数据工具的从业人员可能不到 100 人。到 2022 年,至少有 40 家公司的超过 1,500 人直接从事专门针对培训数据的公司工作。遗憾的是,其中绝大多数个体在封闭源软件中单独工作。像 Diffgram 这样的开放源码项目为培训数据工具的共享访问提供了光明的未来,无论生活在哪个国家,财务状况如何。
开放源码工具也打破了关于什么是魔法和什么是标准的幻想。想象一下,为了一个数据库供应商承诺的 10 倍更快的查询而花费更多预算,结果发现他们只是注入了额外的索引。在某些情况下,这可能有价值,但您至少希望事先知道您是为了使用便捷性而支付,而不是索引的概念!类似地,培训数据概念如预标注、交互式标注、流式工作流等被提到了前台。在本章后面会详细讨论这些内容。
一个传递机器学习软件的范例
就像 DevOps 思维方式提供了交付软件的范式一样,培训数据思维方式提供了交付机器学习软件的范式。说得非常直白,这些工具:
-
与培训数据一起工作的基本功能,如注释和数据集。如果没有工具,这些事情可能是不切实际的。
-
提供保障以使您的项目达到水平。您实际上是在遵循培训数据的思维方式吗?
-
实现培训数据目标的手段,如管理成本、紧密的迭代时间到数据循环等。
我喜欢想象的一种心理画面是站在一个大山或小山的基地。从基地上,我看不到下一个山。即使站在山顶上,我的视野也被下一个山脉遮挡,以至于我不能看到第三座山,直到我穿越第二座山,如图 6-3 所示。
对于视频游戏的粉丝来说,这就像技术树,后续的发现依赖于早期的发现。

图 6-3. 远眺山丘,我只能看到下一个山峰。(依次依赖的发现)
训练数据工具帮助您在获得它们时顺利地穿越这些障碍,有时甚至能够“看到转角”,为您提供鸟瞰地形的视角。具体来说,我只有在意识到随着时间推移,用于注释数据的组织方法通常与数据科学家的需求不一致,特别是在较大的团队中时,才更好地理解了查询数据的必要性。这意味着,无论初始数据集的组织有多好,仍然需要事后回顾和探索。
训练数据工具可能会让您对提升流程和发布更好产品的机会感到意外。它们提供了一个基本的流程。它们有助于避免认为自己重新发明了轮子,只是后来才意识到一个现成的系统已经这样做,并且更加精细。它们通过帮助您更快地、更少风险地、更高效地发布产品,来改善您的业务关键绩效指标。
当然,这些工具并非万能药。它们也不是无 bug 的。与所有软件一样,它们也会出现问题。在许多方面,这些工具还处于发展的早期阶段。
规模
工程师喜欢讨论规模问题。对于不熟悉工程学的读者来说,可以将迪士尼乐园与像街机一样的本地娱乐中心进行比较。迪士尼适用的方法不一定适用于街机,反之亦然。
正如我在自动化章节中所讲述的,在规模的极端端口,一个完全设置好的训练数据系统可以让您几乎随时重新训练模型。缩短数据到达和模型部署之间的时间(即时间到数据的速度)接近零,这可能意味着战术相关性与无用之间的差异。
我们通常习惯于思考常规软件规模的术语,在受监督训练数据方面并没有那么明确定义。在这里,我花点时间设定一些关于规模的预期。
为什么定义规模很有用?
首先要理解您所处的阶段,以帮助确定您的研究方向。其次,要理解不同规模的各种工具的构建目的。粗略的类比可以是 sqlite 与 postgres。两者从简单到复杂有不同的用途。
谈到复杂性,如果您在进行一个小项目并且真的计划百分之百地使用您的数据,那么一个大型数据发现工具可能就不相关了。
或者,对于中等规模及以上的情况,如果团队打算每天处理复杂工具,可能更倾向于经过几个小时的培训,学习最佳实践。
那么,为什么这么难呢?首先,许多大公司保持对 AI 项目的深度技术细节保密,这与更常见的项目明显不同。另一个原因是,在实际应用中,许多公共数据集并不真实反映商业项目所需的内容,或者会误导,例如,它们可能在收集时的开销水平对于常规商业数据集来说是不切实际的。
经验法则
要记住,小型项目可能仍然面临非常真实的挑战。
| 项目与规模方向 | 小型 | 中型 | 大型 |
|---|---|---|---|
| 静止数据量(注释)在一个滑动窗口期内 | 数千 | 百万 | 十亿 |
| 支持的数据类型 | 只需支持与您用例相关的内容 | 最可能需要支持所有类型 | |
| 注释人员(专业主题人员) | 单人或小团队 | 中型团队 | 多个团队 |
| 具有数据工程、数据科学等等技能的人员 | 单人 | 数据帽子团队 | 多个团队的人员 |
| 受影响的收入 | 没有附加的金额或预收入 | 数百万美元的受影响 | 数十亿美元的受影响 |
| 系统负载(每秒查询次数)QPS | <1 QPS | <30 QPS | 数千 QPS |
| 主要关注点 | 轻松开始和易用性的成本(可能没有或低预算的工具成本) | 工具的效果、支持和正常运行时间、开始考虑优化、可能计划过渡到主要规模 | 数据量(“规模”)、定制化、安全性、团队间问题,假设每个团队都在进行他们熟悉的优化。 |
当然,有很多例外和细微差别,但如果您试图确定项目范围,这可能是一个很好的起点。
从小型到中型的过渡
同样适用于从零开始规划中型系统。
在您继续前进时,请考虑一些事项。
-
工作流
-
集成
-
使用更多的数据探索工具
还请参阅关于主要规模的进一步定向规划部分。并非所有这些问题都适用或可操作,但了解它们是很有好处的。
构建、购买还是定制?
“构建还是购买”的经典辩论。
我认为这个论点应该真正是定制化、定制化还是定制化?因为在此时从头开始,已经有很多很好的选项可作为起点。
-
许多选项具有越来越多的即用即定制功能。
-
开源选项可以进行构建和扩展。
例如,也许您的数据需求意味着某个工具的摄取或数据库不足够。或者您可能有独特的 UI 需求。真正的问题是:
-
我们应该自己做这件事吗?
-
让供应商为我们做这件事?
主要规模思考
如果您在主要规模上运作,那么可能已经有系统和团队在运行中。
在您继续前进时,请考虑一些事项。
-
数据在系统中的速率是多少?从新数据到升级的监督数据再到新模型需要多长时间?这类似于 DevOps 的速度。
-
我们真的需要内部开发这个吗?在过去几年里,商业工具市场发生了巨大变化。五年前完全不可得的东西现在可能已经是现成的选项。现在正是重新思考每个团队的独特价值所在的好时机。你是否更容易定制一个正在进行的项目,而不是自己处理所有的事务?
-
我们真的需要复制这些数据吗?在数据在这些阶段间移动时,是否有更集中的方式来存储这些数据?
-
经典训练数据的概念和认识(发现系统)是否适用于这种新形式的人类监督自动化?
-
多少人需要发现并对模型进行修正?人类注释员、ML 工程师、经理?
-
是否有形式化的数据集签署流程类似于代码提交的签署流程?人工审查员对数据集做出“提交”的门槛是什么?您可能已经有了模型部署流程,但可以更早开始查看实际训练数据。
对主要规模的几个假设进行反转:
-
数据的实际形状是什么样子?如果我需要为每个图像、音频文件等提供请求/响应循环,那么可能会爆炸成千上万的查询每秒。但这真的有意义吗?数据是否可以进行查询(一个循环),然后进行流式处理?
-
我的数据治理政策实际上是否在各团队中得到了执行?数据集是否像单个元素一样存储,并具有相同的过期控制意识?团队之间或工具配置方面是否存在对齐?
范围
随着这个生态系统的持续发展,工具设计为与用户和数据范围有广泛边界。一些工具可能涵盖多个范围。总体而言,工具倾向于单个用户或真正的多用户。
如图 6-4 所示,将这种方式视为一个具有两个主要极点的连续体 - 点解决方案和套件解决方案。

图 6-4。点解决方案和套件连续体
注意:本书中解释了一些图标。当我们有一个摄入图标时,这意味着整个团队会在一个大公司上进行处理。更进一步的图标如安全指的是安全产品,如模糊处理、PII 等,而不是安全的一般概念。
点解决方案
显著特征:
-
常常混合训练数据和数据科学特性。例如,可以作为“端到端”或“更快地训练模型”来推销。
-
集中精力在单一或少数几种媒体类型上。
-
针对单个用户或小团队。这种使用假设影响了关于谁创建标签、易用性等功能的设计。
-
软件作为服务或本地部署在一台机器上
使用:
-
最适合的使用情况包括尝试端到端演示,或者如果它表现得足够好而你没有资源使用其他选项。
-
通常由于它们更简单的本质,这些工具更快速地设置并获得“结果”。但是否会得到你想要的结果通常更具有疑问性。
-
具备某种形式的内置自动训练。自动训练并不一定是负面的,然而,通常中型和大型团队希望有更多的控制权,因此必须持谨慎态度。
-
有时点解决方案在其特定领域的质量可以非常高。
注意事项:
-
这些工具通常严格限制 - 无论是技术上还是有意的政治限制 - 可以实现的结果类型。例如,它们可能有一种方法来训练边界框,但没有关键点。或者反之亦然。这也适用于媒体类型,它们可能有一种处理图像的方法,但没有处理文本的方法。
-
通常不适合资源更丰富的团队。可能缺少许多主要功能区域,如专用任务工作流功能、摄取、任意存储和查询等。
-
相对于更重的解决方案,通常不太可扩展或可定制。
-
安全性和隐私通常是有限的。具体来说,例如服务条款可能允许这些公司使用你创建的数据来训练其他模型,有时项目默认是公开的,如果不支付等等。最终必须信任服务提供商处理你的数据。
-
虽然质量可能很高,但是需要将点解决方案与其他工具串联起来,通常会增加额外的工作量。这在大型公司特别普遍,其中工具可能适合一个团队但不适合另一个团队。
成本考虑
- 这类工具通常有成本的“长尾”。它们可能有每个注释的成本。或者训练模型免费,但提供服务的成本(并且没有下载选项)。
介于两者之间的工具
一般来说,大多数工具趋向于两个极端之一,即较小的如前所述,或者我将在下面介绍的较大用例。还有一些工具处于这些极点之间。
一般来说,需要寻找的进展是:
-
更加意识到训练数据作为一个独立的、独立的概念。
-
更加意识到多种解决方案路径。少了“唯一正确路径”的思维,更加灵活。
-
更大比例的覆盖范围。例如,可能具有更多的工作流功能。人工任务管理概念。
-
更适合企业的概念。可以提供本地安装或客户控制的安装。更注重定制和功能,而不是黄金路径心态。
-
可能会有一些关于添加数据的合同保证。
-
如果你的团队已经超出了较小工具的范围,但还没有资源来使用更大型的工具,这些工具可能能够提供严肃的结果并且是合适的。
一套并不自动更好。然而,对于较小的工具来说,“跨越”到更高级别通常很困难,而大多数较大的系统通常只能部分使用,它们在这种中间路径上非常合适。
平台和套件
适用于中型、大型团队和拥有多个团队的公司
从非常高的角度来看,这些系统在心理学上的主要区别:
#1 视培训数据为一个专门的学科。
即使它们有其他集成的数据科学产品、服务等等,它们也明确界定了什么是培训数据,什么不是。
#2 提供一套媒体类型和横向支持。
通常,您可以通过它涵盖更多 - 或甚至所有 - 媒体类型来判断它是一个较广泛的系统。同样,对于像存储、流媒体到培训、探索等横向支持,可能会有更多的覆盖面。考虑到空间的广阔性,我使用覆盖这个词,因为即使是最先进和最大的平台也会存在缺漏。
#3 面包和深度
进一步扩展第二点,一些解决方案可能在媒体类型上提供了很好的覆盖,但深度相对较浅。随着解决方案向这一端倾斜,它在每个类别中的提供深度继续增长。
定制化
这里的大产品区别在于,通常这些工具假设它们将被定制化,要么通过更多的内置配置选项进行定制化,要么通过更多的钩子和端点自然地通过代码进行定制化。
一般来说,专为大团队和规模设计的工具
-
定制化。几乎所有东西都可以由用户进行配置,从注释界面的外观,到工作流程的结构等等。
-
安装。通常假设安装将由客户至少监督。谁拥有加密密钥,在哪里存储数据等都是讨论的一部分。预期有专门和明确的安全讨论。
-
性能期望和容量规划已完成。任何软件,无论多么可扩展,仍需要更多的硬件来扩展。
-
预计会有许多用户、团队、数据类型等等。
-
不提供集成培训。通常是因为集成培训的质量低于预期。通常是因为有一个专门的团队负责进行培训。
注意事项:
-
这些系统可能非常复杂和强大。它们通常需要更多时间来设置、理解和优化以适应您的用例。
-
有时,在特定功能的头对头比较中,更大的系统可能也不公平。其中一个原因是因为对于一个点解决方案来说可能是一个高优先级去修复的事情,在更大范围的系统中可能是一个较低的优先级。
-
大型系统,即使可能有更强的质量控制,也会有更多的错误。在一个简单系统中可能很难破坏的东西,由于复杂性,在一个更大的系统中可能会破坏。
机器学习在哪里?
最佳平台在“脆弱的单一 AutoML”和“什么都不做”之间提供了一个解决方案。
本质上,这意味着专注于人机监督方面。如何将数据传输到机器学习概念中,如何运行自己的模型,与其他系统集成,如 AutoML,专用训练和托管系统,资源调度等。
工具快速入门
因为Diffgram是开源且功能齐全的,是理想的训练数据平台入门选择。你可以从diffgram.com/install下载 Diffgram。
欲了解其他选择,请访问 trainingdatabook.com/tools。
更广泛地说,要开始使用工具,这里有一个入门指南:
#1 选择一个开源工具快速上手。
一些工具可以在几分钟内在开发环境中安装,几个小时或几天内完成适度的生产环境设置。大多数都有可选的商业许可证可供购买。这没有坏处,如果需要,你可以很容易地升级许可证。这比与销售团队交谈更快,并提供更真实的账户,而不是有限的 SaaS 试用。
#2 尝试多种选择,最终选择一个。
一个训练数据工具和一个数据科学训练工具。有无数的优化方法,很容易在甚至还没有基准的情况下就陷入早期优化的陷阱。选择两个主要的危险在于,它们太容易为了被认为容易设置/第一印象而过度拟合,而当价值大部分在长期内交付时,这可能会导致错失机会。
#3 尽可能使用基于 UI 的向导。
即使你是一位精英程序员,这也减少了心理负担。
在本地设置工具可以节省远程服务和成本。稍后很容易过渡到完整部署。
训练数据工具的隐藏假设
训练数据工具带来许多好处,并且至关重要。但要想实现这些好处,你仍然需要考虑这些假设。其中一些通常是真实的,而其他一些则通常是错误的。
在我们讨论常规考虑事项之前,值得注意这些假设。
真实:与团队见面
管理员、注释者、工程师等。这是一个被组织中许多人接触的产品,通常有着非常不同的目标、关注点和优先事项。
真实:你的团队有技术人员
需要有人安装、设置和维护系统。即使对于 100%基于服务的工具,最新的向导也仍然假设至少有一名技术人员和一名理解训练数据的人员。
真实:你有一个正在进行的项目
大部分工具都需要进行一些设置。这些设置可能对于正在进行的项目来说是必需的。
真实:你有预算
正如我们在成本部分探讨的那样,即使对于开源工具也有硬件和设置成本。
真实:你有时间
这些工具的复杂性相当惊人。截至 2022 年,开源的 Diffgram 拥有超过 1,200 个文件和 500,000 行代码。
错误:您必须使用图形处理单元 GPU
训练模型通常受益于具有处理加速器(如 GPU)。然而,实际在自动化中使用这一点并不需要 GPU。此外,在有限数据集的情况下进行训练并不像大数据集那样受益于 GPU 功能,因为数据集较小。
错误:您必须使用自动化
自动化非常有用 - 但并非必需。
错误:一切都关乎注释 UI
注释编辑器仍然是注释编辑器,无论其品牌如何。当然,质量各异。在比较过程中,要小心不要过分强调注释 UI。就像购买任何东西一样,任何单一特性在某种程度上都很重要,但必须考虑整体背景。
安全性
根据 2022 年 Linux 基金会的报告,“安全性是影响组织将使用的软件的首要考虑因素。许可合规性是第二优先考虑因素。”¹
安全架构
对于高安全性的安装,通常最好是托管自己的训练数据工具。这样可以完全控制设置自己的安全实践。您可以控制加密访问密钥和系统各方面的位置,从网络到静态数据。当然,您还可以设置自己的自定义安全实践。
攻击面
安装是起点,因为网络是网络安全的基础。一个无法访问的网络的攻击面很低。例如,如果您已经有一个强化的集群,您可以在该网络中安装您的软件并使用它。例如,Diffgram 可以使用 helm 或 docker 进行安装。每个 Diffgram 安装都有自己的云存储桶和数据库。这是存储所有媒体和注释的地方。根据您的需求,您可以为所有项目安装一个安装,或者如果需要,可以为每个项目单独安装。
数据访问
每个 Diffgram 安装都有两个主要的数据访问点
-
所有内容都存入的云存储桶
-
数据库
在应用程序内部,Diffgram 允许用户根据用户添加的凭据添加和配置云数据访问。除此之外,在安装时,定义了一个单一的云存储桶,所有从其他来源摄取的媒体都存储在其中。您可以根据自己的需求进行配置,并将其用作进一步的控制机制,因为在这里更改访问将使所有原始存储访问失效。
人类访问
Diffgram 具有基于角色的访问控制概念。这是在“每个项目”基础上设置的。有一个超级管理员/根角色,可以绕过大部分访问概念。除非您已经具有系统的根级访问权限(例如设置系统的管理员),否则无法创建超级管理员用户。这个超级管理员概念也可以被禁用。
身份访问管理(IAM)桶委派方案
基于桶的 IAM 委派不是一个好主意,以下是其中的一些原因的小样本:
-
这是安全混淆 - 这意味着这不是真正的安全。由于应用程序对数据具有 IAM 访问权限,因此它可以随时访问数据并将其存储在其他地方。因此,在安全事件中,撤销访问权限只能部分有效。
-
网络安全如何?注释(数据库)怎么样?桶 IAM 只解决了问题的一小部分。
-
大多数 IAM 方案生成签名 URLS,这些 URLS 很难或不可能在事后失效。而且,使它们失效的行为可能涉及数天的工作和破坏性的变更,例如将所有文件移动到不同的目录中。桶 IAM 方案甚至不解决它们本应该解决的问题。
-
数据访问只是一个威胁向量。所有应用程序都存在漏洞,所有变更都可能引入漏洞。攻击者可能并不打算外泄数据。他们可能希望改变您的训练数据。或者拒绝您的访问。
-
众所周知,开源软件在长期运行中比大多数闭源软件更安全。
与安装解决方案相比
-
您可以设置真正的安全性,包括所有密钥,基于您的真实和当前的安全形势。
-
您控制网络安全、注释数据库、原始数据,一切。
-
您控制整个密钥链。
-
您意识到其他威胁,可以采取行动,例如固定特定版本。
-
您可以选择开源解决方案
注释者访问
通常第一件事是注释者访问样本的能力。考虑一家拥有智能助手设备的公司。也许在设备误触发并意外打开麦克风时,审核员会听音频数据。
或者考虑某人在纠正系统以检测婴儿照片等方面所做的努力。同意有许多层次。
在消费者端,通常存在这些大桶
-
没有直接使用的同意(仅匿名化)
-
是否获得使用数据来训练模型的同意 - 可能受时间限制
-
已获得同意,但数据可能包含可识别个人信息(PII),如果包含在模型中可能敏感。
在商业方面,或更多业务对业务类型的应用程序中
- 可能包含机密客户数据。这些商业数据可能“比任何单个消费者记录更有价值”。
可能存在 HIPAA 或其他合规要求等政府监管。
真是一团糟对吧?
可能出现的其他日常考虑:
-
注释者能否下载数据到他们的本地机器?
-
注释者在完成(提交)后是否能够访问记录?或者默认情况下他们被锁定了?
在软件方面,通常有两种主要模型,大多数方法都落入其中之一
-
仅任务可用性。这意味着作为注释者用户,我只能看到当前分配给我的任务(或任务集)。
-
项目层次。作为注释者,我可以看到一组任务,甚至多组任务。
作为项目管理员,两个重要决策基本上围绕着
-
结构化数据流,只有标记为具有同意或符合其他个人身份信息要求的数据,才能进入注释任务流程。
-
决定注释员看到任务的级别。
数据科学访问
自然地,数据科学必须在某个时候访问这些数据才能对其进行工作。通常情况下,数据科学在“查看”数据方面有相当大的自由。更严格的系统可能会记录数据,或者仅记录查询的具体规范,并且数据可能直接发送到训练设备,绕过数据科学家的本地机器。
值得考虑的是,数据科学家访问权限的单一违规行为往往比注释员严重程度高出几个数量级。即使注释员能够绕过各种安全机制并存储他们所看到的所有数据,他们可能只能看到大项目中的一小部分数据。而数据科学家可能会有数百倍的访问权限。
根级别访问权限
超级管理员类型的用户,IT 管理员等,可能具有某些级别的系统根访问权限。这在应用程序中可能被分类为超级管理员,可以直接访问数据库等。
开源和闭源
开源与闭源之争由来已久。我想花点时间来突出一些相对于这个培训数据领域我所见到的具体问题。
开源和闭源注释在快速变化的训练数据景观中具有特殊考虑因素,因为大多数新一代工具的闭源。
已经有许多开源注释工具项目 - 有些已有超过 10 年历史。然而,总体而言,这些项目大多数已不再维护,或者非常专门化,不是通用工具。目前,开源的两个“第二代”通用注释工具是 Diffgram 和 LabelStudio。当然还有许多其他工具 - 但大多数专注于非常具体的考虑或应用。
开源软件有很多优势 - 尤其是在这个注重隐私的领域。你可以清楚地看到源代码如何处理你的数据,并确保没有任何不当活动。
开源确实有一些劣势。尤其是系统本身的初始设置可能更加困难(不是设置或数据摄入,而是整体软件的实际安装)。
开源和闭源的商业成本可能相似,仅仅因为代码是开源的,并不意味着许可是无限的。在商业支持项目的背景下,易用性通常是类似的。
托管开源的成本由你控制。一般来说,托管成本包括在支付给商业提供商的费用中。这是一个微妙的权衡,但实际上在小中型规模上通常是类似的。在大规模上,通常你拥有的控制越多,对你越有利。
开源可能更具兼容性,因为通常有更多的免费用户使用,他们仍然会遇到问题并提交工单。这可能意味着技术风险较小。
成本也是相似的。商业支持的开源项目通常在商业使用期间需要升级到付费版本。有时可能会有放弃付费的选择,但至少这意味着支持较少。
部署
最常见的部署选项之一通常可以捆绑为客户端安装或软件即服务。
客户端安装部署与软件即服务
虽然本地与远程讨论如同老话一般,但我将注意力集中在对训练数据至关重要的具体细节上。
首先,训练数据的量通常非常大,比许多其他典型软件用例高出十到一千倍。其次,数据通常非常敏感,以至于“空隔离”——意味着硬件被空气物理隔离,这不是一个罕见的词组。第三,因为完成的训练数据是代码,最好将其保护与保护常规软件源代码类似地考虑。
由此带来的净效果是,你可以在自己的硬件上安装工具,与使用免费层的服务有着巨大的差异。例如,与我可以免费使用 gmail 一样,大多数训练数据服务在免费层上有严格的限制。而且一些服务甚至可能有隐私条款,允许它们使用你的数据来构建对它们有利的“超级”模型。
考虑到这些变量,可以清楚地看出,能够从第一天开始在你的硬件上安装的训练数据产品具有明显的优势。请记住,“你的硬件”可能意味着你在流行云提供商上的集群。本地部署有其不足之处,但随着打包选项的改进(例如 docker),在自己的硬件上启动和运行变得越来越容易。
这也是开源真正优秀的另一个领域。虽然许多以服务为重点的提供商通常有更昂贵的版本可以本地部署,但检查源代码的能力通常仍然有限(甚至为零!)。此外,这些用例通常相当刻板:它是一个预设的设置和要求集。而设计用于在任何地方运行的软件可以更灵活地适应你的特定部署需求。
成本
除了商业监听成本外,所有客户端安装的工具都有托管和存储数据的硬件成本。此外,一些工具还收取使用特殊工具、计算使用等的费用。
常见的许可费用通常是最大的成本。减少成本的几种方法包括:
-
尽可能将推送自动化工作负载到客户端。这可以降低服务器端 GPU 的成本。
-
将真正的数据科学培训成本与注释自动化分开。
常见的许可模型包括按用户、按集群或其他更具体的度量方式。
注释接口
自然地,需要某种人类使用的接口来指导和监督机器。早期的开源项目几乎完全集中在这一点上。指向原始数据,添加某种基本标签,然后开始标注!主要的界面类别沿着计算机视觉和自然语言处理的线路分布。大多数具有图像界面的工具也会具有视频界面。大多数文本工具没有全面的图像或视频界面。
这可能是一个非常主观的领域。总体而言,界面正在趋向于在这里具有相对相似的功能集,例如相似的热键。
部分原因是因为这通常是最容易和最显著的差异,对于界面必须具备的主要子主题有一个日益增长的共识。虽然肯定存在差异,但我认为这一领域的核心方面随着时间的推移将变得更加相似。
关于用户界面的一件事需要注意的是其深度,尤其是与您的用例相关的功能。例如,在某些界面中,改变顶点大小、线宽等可能很容易。如果您有一个需要这样功能的医疗用例,这可能是一个大问题。
要小心确保标注界面的某些方面通常不会被夸大。有些人会对图像占屏幕百分比或完成某项任务需要点击的次数感到非常兴奋。虽然这些确实很重要,但过度关注这些方面会忽视其他许多重要的问题。
一些平台允许自定义用户界面本身。在本章后面,这在标注人体工程学下进行了更深入的讨论。如果您有一个非常独特的数据类型,确定所需的支持水平可能是您的第一步之一。
用户体验
在其“边界”使用应用程序的体验通常是最棘手的领域之一。一旦进入系统的封闭花园,您可以期待它的正常工作。通常在这里,最好的工具已经付出了很大的努力,使得将数据导入系统并将其取出的体验尽可能简单。
建模集成
想象一下观看成品电影与用于制作电影的编辑套件的区别。总体而言,训练数据系统需要支持从建模系统接收某种数据,并以面向训练数据的方式支持它。
大多数建模系统对于呈现和编辑训练数据的支持相对有限。这往往会令人困惑,因为这些系统通常可以呈现合格的基本视觉效果。
建模集成与流数据相关,但它们是不同的概念。
多用户与单用户
所有现代系统都是多用户的。一般来说,如果一个系统是单用户的,那么它可能不是现代训练数据范式的一部分,而是可能专注于纯用户界面部分。需要多用户的主要原因是专业知识和数据量。
话虽如此,许多系统可以由单个用户成功操作有限的原型,或者可以在单个本地机器上运行进行测试。本章的重点大部分放在多用户和团队基础系统上。
集成
训练数据工具的部分是埋在技术堆栈中而另一些则暴露给最终用户。
最基本的概念是,您必须能够输入原始数据和预测,输出注释。考虑因素包括:
-
硬件。它能在我的环境中运行吗?它能与我的存储提供商配合使用吗?
-
软件基础设施。我可以使用我想要的训练系统、分析、数据库等吗?
-
应用和服务。它与我的系统后端和前端集成得如何?
-
可用的 API 和 SDK 通过自定义集成的类型有哪些?
-
如何在训练数据系统和数据之间传输数据?
这里有很多变化。许多工具提供很少的集成方式。很多强制集成为 API 或者技术团队驱动。一般而言,越现代化的系统提供基于 UI 的交互与集成过程,不仅用于设置密钥,还有数据的拉取和推送。
易用性
易用性有很多形式。有 API 和 SDK,还有安装、超级管理员用户、管理员用户、标注者使用等。根据您的使用情况,这些可能都有不同的重要性。
标注者易用性
对于注释工具的第一个考虑是标注者的易用性。也许您有些人每个月只使用几个小时这款软件。或者有些人除了绝对安全的操作需要培训外对其他的东西都不感兴趣。或者你可能更在乎效率。关于注释界面有一点是明显的,那就是每个人的看法都不一样。问十个注释项目的经理最佳的 UI 是什么你会得到二十个不同的答案。有几个似乎变得更加清晰的趋势。
作为一个小的比较,考虑到 Git - 一款流行的编码工具 - 有许多不同的 UI 查看方式。其中两种流行的是分割和统一视图,如图 6-5 所示。如果您之前习惯于始终使用一种视图,但不同的注释 UI 默认为另一种视图(或仅提供它),可能会感觉不对。由于注释覆盖的广泛功能空间,这只是一个方面,通常会有许多不同的期望,希望 UI 看起来如何。

图 6-5。Git 数据两种不同视图的示例。
任务经理指定整体 UI 外观的规范
标注经理正在增长的趋势是指定 UI 整体外观在任务中。这意味着标签模式和用户界面的模式。这可能包括显示/隐藏按钮、按钮排序、UI 元素的大小等。
标注者的人机工程学
第一件要尝试的事情是调整标注流程的原因很难,因为标注有许多不同的流程。作为一个宽泛的类比,可以考虑一下 git diff 和统一以及分割视图之间的区别。两者都展示相同的内容,但以不同的方式展示。
标注工具类似,取决于您的使用情况,或者特别是您熟悉的工具,您可能对什么是好的和坏的有强烈的需求和看法。
特定上下文的工具化
一个增长的趋势是各种 UI 元素、菜单等都严重依赖于标注的上下文。这始于数据类型(图像、视频等),现在深入到实例类型,甚至具体标注的上下文。例如,一个在视频标注上的用户,右键单击带有多边形标注的情况,可能会看到一个与右键单击新创建的边界框时完全不同的菜单。
[待插入的图像] [插入显示不同类型 UI 的示例(3D、视觉、文本)]
[待插入的图像] [插入显示自动边框变更上下文菜单的示例...]
对能力的关注超过快捷方式
考虑到 Excel 拥有超过 200 个常用快捷键。我猜大多数用户只知道其中很少一部分,但仍然可以完美地运用 Excel 完成工作。有些人非常关注快捷键(热键),虽然快捷键很重要,但随着功能层级的迅速增加,超过一个人能记住的快捷键的能力,上下文和 UI 设计开始发挥更重要的作用。对我来说,记住在谷歌文档中标题 1 是 Ctrl+Alt+1 的速度要比直接点击 UI 上的标题 1 慢。我只是没有经常使用它,以至于记不住它。
许多因素可能影响标注的效率。其中一些可以由标注管理员选择 - 或许在某些情况下,在完成任务时额外的“确认”提示可能会感觉像是一个巨大的负担,而在其他情况下,这是一个关键步骤。随着标注变得越来越复杂,新用户的加入,快捷键的使用逐渐减少,更多地是确保 UI 具有这些功能,并显示一个合理的上下文,以便用户可以利用这些功能。
不同数据类型的易用性
作为一个小故事,有一天,一位用户向我解释了他们需要界面在全球文件评估中更简单的需求。这意味着作为用户,我可以使多项选择问题在文件加载时立即出现,无需进一步的用户交互。我同意了这一点。
同一天,另一位用户表达了对无法放大到 3,000% 的不满(限制是 1,000%),因为他们需要识别 4K 分辨率图像上的特定像素。我也同意这种需求。
我在这里的观点很简单,易用性在很大程度上取决于您的视角。如果您的注释者因为每个文件需要额外点击两次或者因为无法放大而眯起眼睛而感到困扰,这两者都可能成为问题。
不同流程中的易用性
更新现有数据的易用性往往与创建所有新注释有很大不同。
截然不同的假设
我尝试过一个流行的注释 UI,其中删除键会删除所有视频帧中的整个系列。这就像精心制作整个电子表格,然后碰到删除键将其全部删除一样!即使我只是在测试,当这种情况发生时我也会感到震惊!
当然,也有人会说这更容易使用,因为我只需选择一个对象,点击删除,就不必担心连续的概念,或者它出现在多个帧中。再次强调 - 这里的正确性取决于您的使用情况。如果您有复杂的每帧属性,一个单一的删除可能会浪费掉数天的工作。相反,如果在某些情况下只有一个简单的实例类型,也许这是期望的。
同样,由管理员和用户定制化来拯救。您希望在下一个视频帧中看到上一个注释吗?还是不想看到?选择对您合适的选项,设置好,然后忘记它。
看设置而不是第一印象
即使是看似简单的事物,比如标签标签的字体大小、位置和背景,实际上都非常依赖于使用情况。对于一些人来说,任何视觉上的标签可能会妨碍视线。对于其他人来说,整个意义在于属性,不显示它会显著减慢进度。
多边形大小、顶点大小等也是如此。对于一个用户来说,如果多边形点难以抓取和移动,他们可能会感到不满意;另一个可能希望根本没有点,这样医学图像上的分割线可以完美显示。
如果有一个持久的主题,那就是不要在第一眼看到的 UI 外观上花太多时间,而是看看可以调整哪些设置 - 或者可以添加哪些设置 - 来满足您的需求。
它是易于使用,还是只是缺乏功能?
另一个权衡是,一些供应商默认情况下可能拒绝启用功能,需要计划每个流程。例如,这可能意味着视频中不存在实例类型,或者设置可能不存在等等。在评估时,认真考虑持续使用和更复杂场景的需求,以及它是否能够处理。
定制化才是游戏规则的名字
越来越多地期望在软件的各个层面进行定制。从注释设置到管理员配置,再到实际改变软件本身。试着意识到对于您的提供者来说什么是“难”的,什么是“容易”的。
例如,对于封闭源提供商来说,添加新的存储后端可能不是一个重要的优先事项。对于开源项目,您可以自己贡献这个功能,或者鼓励社区中的其他人这样做。此外,您可能能够更好地范围和理解变更及相关成本的影响。
就企业方面而言,试图理解软件核心真正用于你的用例。它是一个完整的集成平台吗?是数据存储和访问层吗?是工作流或注释 UI 吗?由于这些工具在范围和成熟度上差异巨大,因此很难进行比较。例如,一个工具可能在空间注释 UI 方面表现更好,但在数据更新、摄入、查询等其他方面明显不足。
作为一个小故事,一个用户注意到,当一个任务已经完成时,按下最近添加的“推迟任务”按钮会导致系统中的状态定义不清。我同意这是一个问题。修复只需一行代码 - 单个if语句。
另一方面,如果供应商不提供像数据查询、流式传输、基于向导的摄入等主要功能,那么这些可能都是需要多个月甚至多年的项目,或者甚至根本不会被添加。由于这是一个新的领域,具有完全不同的假设和期望,我真的鼓励您首先考虑主要功能,然后看看更新速度和改进执行的速度。在这个新领域,能够快速适应的供应商尤为宝贵。
另一个在不同的 UI 中经历过的用户发现,删除单个点是不可“恢复”的,意味着如果例如一个手遮挡了关键点图上的一个点,我标记为这样,如果我想撤销就无法找回。在 Diffgram 中,系统设置成易于在每个点基础上维护这一点。
安装和组织
这涵盖了安装和常见技术权衡所使用的常见技术。
Docker
Docker 镜像是打包软件的标准方式。
Docker Compose
一种将多个 Docker 镜像进行分组的标准方式。
Kubernetes
这通常是推荐用于生产的技术,尽管还有许多其他选择。理论上,任何时候提供 Docker 镜像,您都可以根据自己的需要管理这些镜像。
主要的云服务提供商在 Kubernetes 的实现上有明显不同。具体而言,某些平台上可能需要几个小时的工作,而在其他平台上可能更加简单。鉴于 Kubernetes 是开源的,这可能有些令人意外,但有些平台对其的抽象程度要高于其他平台。
为什么我要谈论这个?嗯,正如我们之前讨论过的,培训数据通常代表着其他计算情况无法比拟的数据量。此外,关于数据访问、存储和使用的期望是新的,通常与许多预优化的用例不一致。
选择 BLOB 存储
-
系统将部署在何处?如果您在另一个国家有注释者,这对您的性能和安全目标有何影响?
-
如果没有云存储选项,什么类型的本地选项能满足您的需求?
选择数据库
Diffgram 默认使用 PostgreSQL。还有许多其他数据库可用。
配置选择
数据存储位置
根据您的用例,您可能会看到:
-
原始数据
-
网络优化版本。类似于 YouTube 创建同一视频的多个分辨率的方式。
-
数据的子段 - 如帧。
-
数据集的复制
-
由于错误导入而重复,比如两次导入相同的数据。也许是有意为之的预标注。
所有这些基本上是为了看到某种形式的重复是不可避免的。一般情况下,选择如下:
- 在创建优化版本后删除原始数据。
存储单独的帧(视频特定)
是否需要根据需求访问每个单独的帧,或者只需知道帧号?
版本分辨率
需要多少版本(可能是所有)之前的注释?是否需要记录每一次更改?
在某些系统中,这可能是关键的,或者只是一个有用的功能。作为一个经验法则,打开完整版本控制很可能导致数据库至少包含这些软删除注释的 80%。
保留期限
需要存储数据多长时间?是否可以在一段时间后自动归档部分数据?
训练数据中的偏差
存在多个层面的偏差
-
人为偏差
-
技术偏差
技术上的偏差概念
偏差是添加到计算中更可变部分的固定值。例如,如果您希望模型在权重总和为 0 时返回 3,可以添加一个偏差为 3。³ 尽管这对研究人员可能有用,但我们关注的偏差不同。
这不是您祖父的偏差
在经典机器学习中,我们经常遇到“不平衡数据集”的说法。从训练数据的角度来看,这并不像看起来那么简单。例如,考虑我们为机场 3D 扫描仪设计威胁检测系统的情况。
[IMAGE TO COME] [插入 3D 毫米波扫描仪的视觉]
我们可能有“前臂”和“威胁”等类别。我们需要多少前臂的例子?我们需要多少威胁的例子?在这种情况下,前臂的变化非常小。这意味着我们可能只需要一个小的样本集来构建一个优秀的模型。然而,威胁的定位和故意模糊化的努力意味着我们可能需要更多的例子。乍一看,在这种情况下,“前臂”可能比“威胁”不平衡,但实际上是可取的。另一种方法是将威胁细分为更小的类别。这忽略了“威胁”作为一个概念比“前臂”更难的问题的观点。也许它需要多出 10 倍或者 100 倍的数据,这并不重要,重要的是它在这个类别上的性能 *。
这带来了一个稍微微妙的问题。例如,我们一直假设所有“威胁”的例子都是相等的。但如果训练数据不代表真实生活中的数据呢?
问题是,纠正“明显”的偏见有各种技术解决方案(例如硬负采样),但纠正数据与现实世界的关系则没有。这类似于例如,一个经典程序可以通过 100 个“单元测试”,但仍然无法满足最终用户的需求。
期望的偏见
模型需要“偏向”于检测你希望它检测的内容。因此,请记住从这个角度来看,你试图让模型“偏向于”理解你的数据世界观。
偏见很难摆脱。
想象这种情景。
-
数据集在第 1 个月创建。
-
为了保持新鲜度,只使用过去 6 个月的“新”数据。
-
为了优化模型,会对输出和错误进行抽样并由人工审核和纠正。
但这实际上意味着,每个“新”示例都被再次引入模型。换句话说,预测和随后的修正发生在第一天。我们假设这种“新鲜”的修正在 6 个月内有效。但这是真的吗?
实际上,即使它是“正确的”,它的基础也是一个现在过时的模型。这意味着,即使我们重新训练模型,只使用了在过去 6 个月内校正过的数据,旧模型中的偏见仍然可能渗入其中。
这是一个极其难以建模的问题。我不知道这里有科学的解决方案。这更多的是一个需要注意的过程,今天做出的决定可能明天很难完全撤销。
在编码中,类似的情况可能是系统架构。一个函数可能相对容易“修正”,但更难的是意识到这个函数是否应该存在。实际上,一个工程师在努力修正一个现有函数时可能会从现有函数开始,因此即使是修正后的函数,也会包含旧函数的“精神”,即使每个字符都发生了变化。
除了文字数据和实例外,进一步的例子是标签模板。如果假设始终使用现有的预测,那么很难意识到这些模板实际上是否仍然相关。
元数据
想象一下,你花费了成千上万小时(可能花费了数十万美元)来创建多个数据集。只是意识到在创建时存在什么假设并不清楚。有许多原因,下面描述了一些,一个技术上完整的数据集可能会变得几乎无法使用。
一个令人惊讶地常见的问题是丢失关于数据集构建方式的信息。例如,想象一个数据监督员对一个项目有疑问,并通过电子邮件或聊天等渠道发送过来。问题,例如“当发生某种情况时我们如何处理”,得到了解决,生活继续下去。然而,几个月后...
数据集的元数据(定义)
数据集中未直接被模型使用的数据。例如,数据集的创建时间,创建者是谁。⁴
丢失的元数据
数据集中常见“丢失”的元数据示例:
-
这组数据的最初目的是什么?
-
元素最初是由机器还是由人类创建的?使用了什么辅助方法(如果有的话)?
-
数据是什么时候捕获的?它何时受到监督?
-
传感器类型和其他数据规格
-
元素是否被多个人类审查过?
-
创建它的人类是谁?
-
人类创建它的背景是什么?
-
还有哪些其他选项(例如每个属性组)被提出?
-
在设置构建过程中,模板架构是否有所更改?如果是,是在什么时候?
-
这组数据与“原始”数据相比有多代表性?
-
数据集是什么时候构建的?例如,原始数据可能有一个时间戳,但这很可能不同于人类查看时的时间(每个样本可能也不同)。
-
督导员看到了什么指南?这些指南是否被修改过,如果修改过,是在何时?
-
这个数据集中有哪些标签,以及这些标签的分布情况是怎样的?
-
将原始数据与注释相关联的模式是什么?例如,有时注释以“00001.png”这样的文件名存储在静态位置。但这假设它在文件夹“xyz”中。因此,如果由于某种原因发生了更改,或者没有在某个地方记录下来,就不清楚哪些注释属于哪些内容。
-
这只是“完成”的数据吗?这里缺少注释是否意味着概念不存在?
这可以通过在创建过程中尽可能多地捕获信息来避免。通常情况下,使用专业的注释软件将有助于解决这个问题。
¹ linuxfoundation.org/wp-content/uploads/LFResearch_SBOM_Report_020422.pdf 第 6 页
³ 示例灵感来自于medium.com/fintechexplained/neural-networks-bias-and-weights-10b53e6285da
⁴ 旁注:有些人将注释称为“元数据”。我不这么认为,因为注释是整体数据结构的主要组成部分。如果你愿意把注释称为元数据,那么这里的一切都是元-元数据。
第七章:AI 转型
AI 转型简介
超越数字转型,这是人工智能转型时代的开始。
在这里最成功的公司不会是那些拥有一个单一的“AI 团队”,其中有神秘的术士。成功的将是那些最广泛地将 AI 概念嵌入并将培训 AI 系统的责任推广到公司能力最低的层级的公司。
AI 转型是希望将公司转型为 AI 优先的商业领导者的答案。今天就可以开始,由你来主导。到目前为止,我们已经介绍了训练数据的基础知识,并深入探讨了诸如自动化之类的特定领域。现在,让我们放眼望去,看看整体局势。在您的公司如何实际开始使用训练数据?
在本章中,我将分享五个关键步骤。从思维方式和领导力开始,然后进入具体的问题定义,并最终完成两个解决步骤:标注人才和训练数据工具。请将计划仅视为起点,以适应您的需求。
要快速开始在您的公司采用现代人工智能,以下是五个关键行动:
-
创造新意义而不是分析历史 - 创意革命
-
指定某人来领导这项工作
-
针对涉及专家、现有工作和大量工作的使用案例
-
重新思考 AI 标注人才 - 质量高于数量
-
采用现代训练数据工具

图 7-1 AI 转型地图
创意革命是利用人类指导创造新数据点来解决问题的一种思维方式。打开这一潜力的巨大潜力将有助于为您和您的团队定义最佳使用案例。
接下来是指定某人来领导这项工作 - 训练数据主管。在大多数公司中,这个职位都是新的。考虑到这些 AI 成本中大部分是训练数据的人工成本,自然需要有人来负责。
然后是用例发现。我提供了一个草图的画布,用于勾画您的想法。例如要问的问题和要避免的常见错误。转向实施,设置人才愿景至关重要。重新思考标注人才将使您能够以成本有效的方式实现您的使用案例。
当你拥有思维方式、领导者、使用案例和人才愿景时,你可以使用现代训练数据工具将其变为现实。过去几年里,训练数据工具已经有了显著进展,有很多东西值得学习!
入门
将您的日常工作视为标注
在过去的十年左右,AI 的重大突破主要集中在经典案例上,如前几章所述。现在最大的商业机会在于监督学习、非结构化数据,这需要标注。早期的工作常常是进行“标注项目”。这意味着把数据丢给某个团队,然后希望一切顺利。
这就像点外卖。当然,它会帮助你解决即时的饥饿感,但这并不是一个健康的长期解决方案。真正的 AI 转型就像健康饮食一样,需要努力。这是一种思维转变,从把标注视为一次性项目,到把你的日常工作视为标注。
为了框架化这一点,考虑这个陈述与你公司相关:
你公司的日常工作都可以被视为标注。
没错。你的大多数员工每天采取的每一个行动,从字面上和比喻上都是标注。这里真正的问题是,我们如何将这些行动从每天“丢失”转变为以可以重复且自动完成的方式捕获,达到相同的质量水平。

图 7-2 思维转变:从审查到标注
要颠覆这一点,每当员工做某事而没有被记录为标注时,就意味着丢失了生产力。如果能够通过标注捕获这些工作中的大部分,你的生产力就会更高。
| 之前 | 之后 |
|---|---|
| 所有的日常工作都是“一次性的” | 日常工作是处理尚未被捕获在标注中的异常情况 |
| 培训只适用于人类 | 培训也适用于机器 |
| 如果不在计算机中,则不存在 | 如果不在训练数据中,则不存在 |
这里有一个粗略的类比,就像在数字化的运动中,如果没有以数字形式存在,那么它就不存在(无论是否真实)。现在同样,如果在训练数据中不存在,它就等于不存在,因为它不会帮助你的公司提高生产力。
AI 转型有两种主要类型:
-
在传统公司,激励所有相关运营方面考虑 AI,并建立新的报告单位。
-
在 AI 产品公司,激励以培训数据为先的思维方式,并重新组织报告关系。
数据中心 AI 的创新革命
数据中心的 AI 可以被视为专注于训练数据,而不仅仅是数据科学建模。但这个定义并没有完全表达它的真正含义。相反,可以考虑数据中心的 AI 更多地是关于创造新数据来解决问题。
关键的认识:你可以创造新的数据。
在以数据为中心的思维模式下,你可以:
-
使用或添加数据收集点。
- 新的传感器。新的摄像头,新的文档捕捉方式等。
-
添加新的人类知识。
例如,对于自动驾驶案例,如果你想检测被切断的人,你可以创建“被切断”的含义,如图 7-3 所示。

图 7-3. 数据中心人工智能创建新数据的第一个例子
或者,如果你想自动检测“犯规”是什么意思,你也可以创建这样的功能。

图 7-4. 创建新数据的第二个例子
你可以改变你收集的数据
这可能是显而易见的。让我们考虑一下这有多么不同。经典的数据科学中,你无法改变你收集的数据。例如,如果你正在收集销售数据,销售历史就只是历史。细微的具体细节除外,销售就是什么样子就是什么样子。你不能创造新的销售,或者真正改变数据。
使用训练数据,你可以收集全新的数据。你可以放置新的摄像头。发射更多的卫星。安装更多的医学成像设备。增加更多的麦克风。改变收集的频率。提高质量,例如相机的分辨率。
通过专注于你可以控制的数据,你可以直接改善性能。更好的摄像头角度?更好的人工智能。更多的摄像头?更好的人工智能。更多……?我想你明白了。
你可以改变数据的含义
回到我们的销售例子。一笔交易就是一笔交易。试图在电子表格中扩展一行来使其意义更加深刻,很少有价值。
使用训练数据,你实际上创造了以前完全不存在的含义。你看着一段媒体,比如一张图片,在计算机以前没有任何有意义的结构 - 并且真正地说“这是一个人”,“这是一罐健怡可乐”,“这是一条车道线”。这种注释的行为将你的知识映射到计算机中。
限制只存在于你的创造力之中。你可以说“这个人很难过”,或者“这罐健怡可乐有一个凹痕”。你塑造和调整它以满足你的需求。这些无限的自由度正是它如此强大的原因。
你可以创造!
所以下次有人对你说“数据中心的人工智能是提高模型性能的一种方式”时,你会知道这不仅仅是如此!这意味着你可以改变你收集的数据,以及数据的含义。这意味着你可以以全新的方式编码问题的理解。这意味着即使之前没有解决方案,你也可以定义解决方案。你可以 创造!
考虑步函数改进
考虑零售购物。我们可以监督机器告诉它们人们的样子和食品杂货的样子。
这打开了完全替代收银员的所有新用例。这不是 5% 更好的定价。这是我们购买食品杂货和设计商店方式的根本转变。
| 概念 | 之前 | 之后 |
|---|---|---|
| 购物 | 每次我购物时,每次收银员为我结账时,那份工作都会消失。 | 人们购物的注释 |
| 驾驶 | 每次我驾驶时,投入的努力和工作都是“消失”的。 | 驾驶的注解。专业的注解者会注解常见场景。
我的驾驶被记录下来,以帮助这项工作。
| 文档审阅(比如贷款、请求等) | 我审阅的每份文件,工作都会丢失 | 文件的注解。工作被捕捉以减少将来类似的工作。 |
|---|
关键的洞察力需要重复:任何您可以注解的事情都可以重复。
当然,这种方法也有其局限性。上述一些努力需要很多人和多年来实施。但从概念上讲,这个想法是存在的。
指定一位领导者:培训数据总监
所有革命都需要领导者。有人传播新的信息。团结士兵。消除疑虑。而领导者必须有一个团队。在本节中,我将阐述最佳实践、常见的职位角色,并讨论它们如何共同形成支持您的培训数据革命的最佳团队结构。
团队组织概念是训练数据成功的关键。从公司的视角来看,有什么改变?培训数据与数据科学之间的差异反映在组织中吗?需要什么新的组织结构?即使你已经处于以人工智能为中心的组织中,也有特定于训练数据的细微差别可以帮助加快你的进展。
从工作池转变为所有人的标准期望
目前,聚集一群人来做注解的事实标准过程,类似于旧式的打字池。一支大军,做着相对类似的工作,为了将信息从一种媒介转换到另一种。这显然是低效的。
相反,如果每个新的或更新的流程首先考虑 AI 转型,会怎样呢?如果每个新的应用程序首先考虑如何将工作捕捉为注解,会怎样呢?如果每位业务领导者首先考虑注解如何影响他们的工作,会怎样呢?
| 之前 | 之后 |
|---|---|
| 雇佣一支新的独立工人队伍(通常外包)。 | 您现有的专家和数据录入人员(主要是) |
| 单次项目,分开的一次努力 | 每天的工作一部分,比如使用电子邮件或文字处理 |
| “附加”思维方式 | “AI 优先”假设 AI 将存在或要求它整合到现有工作流中 |
| 将 AI“强加”给人们 | 人们将 AI“吸引”到组织中 |
是的,那些培训人工智能而不只是做他们正常工作的人可能会要求更高的工资。然而,资本回报仍然更好,即使支付一个人的工资高出百分之几,当这个人与人工智能结合时,就像 2-3 个人一样高效。
在过渡期间,你可能仍然需要额外的帮助。根据你的业务需求,可能存在需要外包的有效用例。与任何劳动力一样,需要各种注释劳动。但这里的关键区别在于,注释被视为正常工作,而不是“那些人”专门要做的一个单独项目。一系列人才的存在与你获取这些人才的方式是不同的概念。专门被雇佣“来做注释”的工人池,没有与你的业务的任何其他上下文联系,与直接被雇佣进入你的业务的工人水平是截然不同的。
另一种表述方式是,想象一家有 250 名员工的公司。一夜之间雇佣 50 人将是一件大事。然而,同一家公司可能认为雇佣 50 名注释员是可以接受的。尝试将其视为真正将 50 名人员纳入公司。
你可能已经在思考哪些领域将是良好的目标,和/或“好吧,这听起来很好,但我只是找不到一种方法来注释这样的过程”。我提出这个打字池的概念的原因是,虽然 AI 是一个附加的、事后的过程,但总会有这样的障碍。组织越多地拉拢 AI,把注释看作他们日常工作的一部分,直接参与注释,机会就越多。
有时是提议和更正,有时是替代
你可能已经使用过的集成提议和更正的简单示例是电子邮件。例如,在 Gmail 中,当你输入时,它会提示你一个建议的短语。可以接受或拒绝该短语。此外,建议可以标记为“不好”,以帮助纠正未来的推荐、提议、预测等。

图 7-5. AI 提议用户示例

图 7-6. 集成训练数据收集示例:
这突显了你在未来购买所有产品时需要考虑的重要因素。它也回到了使某人更加高效而不是直接取代他们的主题。
上游生产者和下游消费者
训练数据工作在数据科学的上游。训练数据流的失败会影响到数据科学(如图 7-8 所示)。因此,确保训练数据正确非常重要。
为什么要区分训练数据和数据科学?
因为有明显的区别,即人们生产训练数据和消费数据科学。

图 7-7. 训练数据生产与数据科学下游使用之间的关系
我认为它是生产者和消费者之间的关系。
生产者与消费者比较
| 训练数据 - 生产者 | 数据科学 - 消费者 |
|---|---|
| 捕捉业务理解和需求,以可被数据科学使用的形式。将非结构化数据转换为结构化数据 | 创建将新数据映射回业务需求的模型 |
| 负责注释工作流 | 使用注释输出 |
| 管理数据集的创建、策展、维护 | 使用数据集,轻度策展 |
| 监督数据科学的输出 | 生成预测输出 |
| 示例:KPIs^(a):数据覆盖的业务需求的百分比
注释重做所需的百分比
注释的数量、种类和速度
注释深度 | 示例 KPIs:模型性能,例如召回率或准确度
推理运行效率
GPU/硬件资源效率 |
| ^(a) 关键绩效指标 |
|---|
生产者与消费者心态
作为一名数据科学家,思维往往沿着“我们已经有哪些关于x的数据集?”或者“如果我有了 x 数据集,我们就可以做 y”的方向。几乎可以说是一种短路,项目一开始,一旦有了某种想法,问题就是“我们能多快拿到这个数据集?”。
类比几乎就像我饿了,我想吃点什么。我现在就想吃。我不想担心农作物或收割机或任何其他事情。这没有什么错 - 我们都需要吃饭,但我们必须意识到这种区别。农民(训练数据的生产者)同样对此感到困惑。
现在,一个农民在这里受到了自己的错觉困扰。一个人越了解训练数据,越强调生产,就越远离如何实际使用数据的关注。
举个例子,我曾与一位领先的训练数据生产总监交谈过,他正试图弄清如何获取一种特定类型的旋转框。我建议将其注释为一个 4 点多边形,并且可以基于多边形的边界提供该框。对他来说,这是一个惊喜 - 他之前认为框和多边形是两种完全不同的注释形式。这里的重点是,你越深入训练数据领域,就越不会记住(或了解)数据的实际最终使用方式,而更多地关注顶层类型和人与数据的交互。
为什么需要新的结构?
首先,坏数据将导致糟糕的 AI。糟糕的 AI 意味着在 AI 项目中的投资被浪费。这个上游角色对 AI 项目的成功非常关键,必须给予适当的角色。
第二,作为 AI 转型目标的一部分,必须有一个主要负责人来带领。虽然副总裁或 CEO 在战略层面上也可以扮演这个角色,但总监负责执行这一战略。
第三,随着涉及的人数增加,简单的现实是,这是一个团队的团队,有许多不同特征的人。即使是最简单的团队,也很可能至少有一两个生产经理,以及二十到五十名注释生产者。
这可能很容易增长到数百人。在一个非常大的组织中,可能会有数百甚至数千名兼职注释生产者。¹
这是一支需要管理的人力大军。
总结一下:
-
坏数据=坏 AI
-
AI 变革领导者需要
-
注释者的大军
反向预算
关于数据科学和训练数据组织最令人困惑的事情之一是预算编制。通常情况下,相对于一个更大的训练数据团队,只需要一个非常小的数据科学专业团队。从成本的角度来看,训练数据成本可能比数据科学成本高一个数量级。然而,数据科学的行项目经常是最高级的项目。
改进后的设置是:
-
AI/ML
-
培训数据
-
数据科学
-
数据工程
-
等等。
-
历史上,导致数据科学部分负担如此巨大硬件成本的一个原因是这样的。值得注意的是,从方向上来看,预计随着时间的推移,这种 AI 训练和运行成本会减少。此外,从资源的分工与征服的角度来看,由于数据科学已经被管理这些硬件成本所负担,进一步用训练数据问题来困扰他们显然是没有多大意义的。
总监的背景
有几种必须考虑的技能集
-
这是一个人员领导角色
-
这是一个变革推动者的角色
-
这个人必须与业务需求保持一致
-
理想情况下,这个人能够横跨公司的多个部门,也许已经是一个公司级别的分析师。
-
必须具备一定的技术理解水平,以便与工程部门进行讨论。
背景不需要是什么
-
正式的教育要求。这更像是一个实战角色。尽管这个人可能拥有工商管理硕士学位、本科或研究生科学学位等,但最有可能的是他们还会及时了解机器学习领域的最新复习和在线课程。
-
一个“数据科学家”。事实上,这个人的数据科学背景越多,他们越会倾向于关注算法方面,而不是这种新创意的人类驱动方面。
总监的预算
-
人员
-
工具
培训数据总监
首先,建立一个培训数据总监职位是最理想的。
例如,这个人可以向 AI 副总裁、工程副总裁或首席技术官汇报。即使这个角色被融入某种 AI 总监角色中,其责任水平也是一样的。
图 7.9 展示了培训数据总监的职责以及关键团队成员角色的样本描述。请注意,这些并不是完整的工作描述,只是突出该角色的一些关键结构元素。

图 7-8. 新组织图示例
阅读此图表
这里谈到了“团队”或复数的“工程师”。当然,您的组织不会完全匹配这一点。可以将每个方框视为一个角色。一个人可能会扮演所有或大部分角色。
AI 专注的公司修改
-
可能会有较少或零传教士
-
业务线经理可能是整体产品经理
-
制作人员仍将根据公司而异。例如,专家可能是最终用户,或者他们可能是兼职和外部的,但仍然是具体的合作伙伴,而不是通用的“池子”。
经典公司修改
- 可能会有较少的专职制作人员和更多的传教士
培训数据团队参与的范围
-
咨询和培训
-
维护其他团队制作人员使用的工具集
-
数据摄取/访问
-
支持注释生产
-
-
积极管理注释数据的生产
关于主要组织将 AI 引入其中的想法并不排斥存在一个专门的培训数据团队或部门的概念。在一个 AI 成熟的组织中,该团队可能主要是作为顾问存在,紧跟最新的趋势,并维护整体工具。
正确的方法将取决于您特定的组织,我在这里的主要目的是传达一般范围的概念,即即使不是直接生成注释数据的团队,也需要一个独立的团队。
专职制作人员和其他团队
专职制作人员是生产经理的直接报告对象。这适用于工作量如此之大,以至于一个人的全职工作是注释生产,且他们不隶属于任何特定的业务单位的情况。长期来看,这可能是罕见的,但对于刚刚开始、转型以及没有其他生产能力的各种项目而言,这是现实。
为了简化图表,在图中外包团队可以被视为专职制作人员。
组织其他团队的制作人员
其他业务单位的制作人员从入门级到专家级。
最终用户可能不同,也可能会产生自己的注释。通常情况下,最终用户的注释更多是“偶然”的,作为使用应用程序的一部分,或提供某种形式的最小反馈。
在这里我将覆盖:
-
培训数据总监
-
培训数据传教士
-
培训数据生产经理(们)
-
注释生产者
-
数据工程
让我们深入探讨!
培训数据总监的责任
主要负责整体培训数据的生产。这包括:
-
将业务需求转化为成功生成的培训数据。
-
通过将业务需求映射到培训数据概念来生成培训数据生产的工作。
-
管理每天协助注释生产的生产经理团队。
-
管理与业务经理合作,确定培训数据和 AI 机会的传教士。特别是关于注释的可行性问题。在由业务经理提出的各种想法中,可能只有少数几个在那个时刻真正具有成本效益。
-
管理培训数据平台。
除了对注释工作的一般效率和可见性,这个人必须将注释的生产力映射回业务用例。如果可能的话,传教士可能也会这样做,而总监则是第二层。
并:
-
与数据科学紧密协作,确保产品按预期被消耗。
-
间接地,作为对数据科学的检查和平衡,充当对业务结果和超出纯量化统计的数据科学输出的监督。
-
普通的主管级职责,可能有某种形式的损益责任、关键绩效指标、供应商和供应关系、报告 - 示例报告关系如图 X.x.所示,规划、招聘、解雇等。
当然,总监可以根据需要填补下面任何一个角色。
培训数据传播者
这个角色是教育者、培训师和变革者。
主要职责包括:
-
与业务经理密切合作,确定关键的培训数据和 AI 机会。
-
在生产经理之前“预先”工作,确定即将到来的工作,并充当业务经理与生产经理之间的纽带。
在一家专注于 AI 产品的公司
- 教育人们如何最佳地运用现代监督学习实践。
在一个经典的企业
-
教育组织内的人员对 AI 转型的影响。在实际操作中,将兴趣转化为可行的注释项目。
-
招募注释员从业务线。从实际角度来看,这意味着将一名正常工作的员工转变为将其工作的 20%捕捉到注释系统中的人员。
-
培训。特别是在兼职注释员的背景下,这个人负责解释如何使用工具和解决问题。这与专门培训全职注释员的生产经理有所不同。这是因为你培训医生的方式与培训初级员工的方式是不同的。
培训数据生产经理
这个人主要关注实际完成注释工作的任务执行者。
-
与数据科学界面,设置模式,设置任务和工作流程 UI,管理培训数据工具(通常非技术性)的管理。
-
培训注释员
-
管理日常注释过程
-
在某些情况下,此人也可以执行基本的数据加载和卸载。
-
在变更管理类型的讨论中,这个人负责向对该问题新手解释注释工作的合理性。
-
使用数据筛选工具。
注释生成器
注释生成者通常分为两类:
-
全职,专门受过培训的人员。
- 这可能是新招聘的人员或从现有工作重新分配的人员
-
兼职,这将逐渐成为每个人工作的一部分
数据工程
-
负责数据加载和卸载,训练数据工具的技术方面,管道设置,预标注等。
-
特别是组织从各种来源包括内部团队获取数据
-
规划和架构设置新数据元素
-
组织集成以了解捕获注释的技术细微差别
数据工程师将定期与数据科学团队接口
历史回顾——以前不需要的几个原因:
-
经典机器学习数据集已经存在(即使凌乱),因此没有必要“生成”数据集。
-
早期的努力与日常业务目标更分离。这意味着有更多理由进行一次性规划,一次性项目,孤立项目等。随着 AI 转型成为业务主流,这种分离成为一个人为的障碍。
保护您的 AI 未来
除了关于数据是新油的陈词滥调,让我们从实际出发来思考这个问题。如果你投资 1 美元来培训一个员工,你将得到那个单个员工的 1 美元培训。如果你投资 1 美元来捕捉注释工作,它将随着时间的推移带来许多美元的回报(或者是失去的价值)。多少?让我们来探讨一下。
用例发现
我们如何确定可行的用例?需要什么,什么是可选的?在本节中,我提供了一个基本的标准来识别有效的用例。然后,我进一步扩展到更多的背景,以帮助进一步确定良好的用例。
这一节从最具体到最抽象组织。
-
用于良好用例的标准
-
与标准比较的示例用例
-
概念效应,二阶效应和持续影响
简化的标准可能是日常工作中的一种选择,而其余部分可以作为支持知识。虽然您可以完全按照这些标准使用它们,但我鼓励您将所有内容视为思考的起点,仅仅是用于思考训练数据用例的介绍。
良好用例的标准
从最高层次的视角来看,一个良好的用例必须有一种方法来捕获原始数据,并且至少一个:
-
经常重复
-
涉及专家
-
添加新的功能
存在越多这些因素,用例的价值可能越大。
简化的标准看起来像这样:
| 问题 | 结果(带有示例答案) | 要求 |
|---|---|---|
| 我们能获取原始数据吗? | 是/否 | 需要 |
| 它经常重复吗? | 是/有时/否 | 至少需要一个 |
| 需要专家参与吗? | 是/有时/否 | |
| 添加新功能? | 是/有时/否 |
就是这样!这可以成为一个常用的参考标准,并在需要时使用更详细的下面的标准来支持它。
详细标准
现在我们已经有了大致的想法,让我们进一步扩展它。这里我提供了更详细的问题,特别是扩展和区分新能力概念。我添加了例子、反例和一些关于为什么重要的文字,以帮助
| 测试 | 示例 | 反例 | 为什么重要 |
|---|---|---|---|
| 数据已经被捕获了吗?还是有明显的机会添加更多传感器以捕获数据(全部)?(必须) | 现有文件(例如发票)、现有传感器、添加传感器 | 人员销售互动汽车经销商 |
-
获取原始数据捕获是必要的一步。
-
如果无法获得原始数据,则其余内容无关紧要!
|
| 它是否涉及到专家? | 医生,工程师,律师,一些专家 | 杂货购物 |
|---|
-
使受限资源能够更多地(可能更频繁地,在更多情况下)提供给更多人。
-
专家意见具有很高的价值。
-
更容易获得的数据,通常已经以数字形式存在。
|
| 工作重复频率高吗?每分钟多次?每天?每小时?每周? | 自动背景去除/模糊
客户服务和销售
行政文件审查 | |
-
至少对人类而言,已经有一个良好理解的模式。
-
可能已经相对受限。
-
经常重复的任务,从总体上看,具有很高的价值。
-
现有的原始数据可能已经被捕获。
|
增加了新的能力
解锁超越增强或替代的新用例。(增加新的能力)
| 测试 | 示例 | 反例 |
|---|
| 由于费用昂贵而很少完成工作吗?
增加频率会非常有价值吗? | 检查 | 体育场建设 |
| 我们能将近似过程转变为更精确的过程吗?
这个过程是否因为当前不切实际而对某些内容进行了忽略?
我们当前是在用某种更通用的东西替代我们真正想弄清楚的东西吗?
如果改进这个过程的准确性是否会带来更多好处而不是伤害? | 水果成熟度。产生霉变或瘀伤检测,
检测凹陷的罐头
一个只检测金属的机场检测系统,与能够检测特定威胁的系统相比 | 贷款承销 |
| 有些事情因为量大而被完全跳过了吗,或者因为其他原因不切实际?(例如,由于数量)
如果我们能做到,这会非常有价值吗?
任何事情都相对耗时(即使很少发生)。 | 视频会议和销售电话的分析
视频上传中的色情检测,评论审核
保险财产审查^(a) | |
| ^(a) 可能每小时花一些时间,但可能只需要每年或每十年做一次 |
|---|
主要区别在于,这是一些否则不会发生的事情。例如,目前可能每年检查一次的桥梁,每天检查是不切实际的。因此,自动桥梁检查系统将增加新的能力。尽管目前这种情况并不经常发生(每年一次),而且可能或可能不涉及直接的专家劳动,例如实际的检查人员可能正在寻找裂缝并测量它们,而工程分析则由其他人完成。但无论如何,对于任何人来说,每天检查都是不切实际的。
关于重复用例的注释
-
不要立即假设替换——首先考虑增强。
-
对于表单来说,普通编码是可以接受的。但是要考虑“当人们获得信息时,他们会怎么做?”
-
要了解一个好主意,看看公司中有多少“重复”角色。有成千上万的人在做大致相同的事情吗?这是一个很好的起点。
关于专家和专业人士的说明
所有工作都涉及一定程度的专业化和培训。与其在特定情况下提供“低成本的机会”,不如看看通常具有最多机会的领域(不一定是最容易的)。专家案例通常意味着某些方面实际上相当困难才能掌握的技能。当然,专家的定义因人而异,我的心智模型是指“在正常教育后,需要 5-10 年才能达到基本熟练水平的技能,或者是如此尖端以至于能力池有限的领域”。
根据评分表评估用例
在这里,我们详细介绍一个示例用例,然后将其与评分表进行比较。
自动背景去除
最近有进行过视频通话,并注意到某人的背景被模糊了吗?或者您自己已经在使用这个功能。无论哪种方式,很可能您已经与这款由训练数据驱动的产品互动过。
特别是当您参加视频会议(例如 Zoom)时,您可能正在使用“背景去除”功能(图 7.10)。这将混乱分散注意力的背景转换为自定义背景图像或平滑模糊的背景——看起来像魔法般。

图 7-9. 普通视频与自动背景去除视频的比较
为了背景,这过去需要绿幕、定制照明等。对于高质量的制作(如电影),通常需要人工手动调整设置。
那么培训数据如何参与?
首先,我们必须能够检测什么是“前景”和什么是“背景”。我们可以采用视频示例,并在图 7.11 中标记前景数据。我们将使用这些数据训练模型来预测“前景”的空间位置。其余部分将被视为背景,并进行模糊处理。

Figure 7-10. 标记前景示例
这里的要点是模型正在找出构成“背景”的模式。我们并没有明确声明杂乱的衣服堆看起来像什么。
如果我们限定问题,假设只有人类会出现在视野中,我们可以采用“现成的”模型来检测人类,并简单地使用它。
为什么像这样的功能很重要?
-
增加了更多的平等。现在无论我是否有花哨的背景都没关系。
-
提高隐私和会议效率。有助于减少干扰的影响(例如某人进入呼叫区域的边缘)。
如果这看起来非常简单 - 这就是重点。这就是训练数据的力量。以前在没有绿幕的情况下真正不可能的事情现在变得像给视频贴标签一样简单。
现在要注意的一些事项:
-
在写作时,获得一个高效的模型来进行“像素分割”仍然有些具有挑战性。
-
已经有一些公共数据集可以很好地识别人类。然而,如果您必须从头开始标记“缩放通话”数据集,这将是一项巨大的工作。
评估
| 问题 | 结果 | 要求 |
|---|---|---|
| 我们能获取数据吗? | 是的,视频流已经数字化捕获。 | ✔️ |
| 它经常重复吗? | 是的,一个视频通话可能会删除数千个背景帧,一个用户可能每天有多个通话,而且有许多视频通话者。 | ✔️ |
| 需要专家参与吗? | 有时候。设置绿幕效果需要一些专业知识,但远非专业医疗或工程知识。 | |
| 增加了新的能力吗? | 有时候。以前可以获取绿幕,但在旅行等情况下,即使是拥有绿幕的人也无法使用它,因此在这种情况下增加了新的能力。 |
总体而言,这得分相当不错。它满足了获取数据的要求。在“重复”类别中得到了巨大的肯定。而且根据您想评估的用例子集,它潜在地避免了必须拥有专家并增加了一个新的能力。例如,我无法想象在咖啡馆或机场中间轻松获取自定义背景。
关于用例的说明:概念效果区域列出了一小部分用例。为了这个评分标准和时间,我只深入探讨了一个用例。我的目的是传达任何用例都会很好的条件,并提供思考增值和整体效果的工具。考虑到潜在的用例广泛性,我认为这比尝试迭代所有已知用例列表更有价值,许多这样的最新列表可以通过在线搜索找到。
用例的概念效果
这与上文的思想相当类似,但角度略有不同。在上文中,我们从“什么是一个好的用例”的角度来看待这个问题。现在我要看的是“这些用例在做什么”。我还包括了一些表面水平的显而易见的二阶效应 - 技术采纳在技术范围之外引起的效应。我只是希望这是一个让人们开始思考二阶和三阶效应的起点。
| 概念 | 示例 | 二阶效应 |
|---|
| 放松问题本身的限制(在先前解决的问题上) |
|
-
绿幕 -> 任何背景
-
我必须到一定年龄才能开车
-
拼写检查 - > 语法检查
|
-
我的背景不被用来评估我参加工作面试的资格
-
如果父母不驾驶,那么“带孩子去 x”会有新的含义。
-
正确语法的期望发生了变化(除了正确拼写之外)。
|
| 替代或增强常规工作 |
|---|
-
人类数羊 -> 自动数羊
-
人类驾驶 -> 车辆驾驶(与人类表现相当)
-
将人类路由通信到部门 -> 基于意图的自动通信报告(销售、支持等)
|
-
工作的含义改变了
-
数百万个工作岗位将被创造和转移。人们将需要学习新技能。
-
郊区可能进一步扩展
-
没有效使用 AI 的公司将具有更差的成本结构,如同没有有效使用数字一样。
|
| 使人类“超人类” |
|---|
-
机场安全扫描
-
体育分析
-
自动驾驶(事故减少)
-
在常规医疗工作上充当“第二双眼”
|
-
机场安全检查可能变得更加有效和快速(希望如此!)
-
由于人们对精英级教练期望扩展到更多人,体育运动的强度可能会增加。
-
事故可能变得更加罕见,甚至更加值得关注
|
| 使受限资源可供更多人使用^(a)(或者没有那么多限制) |
|---|
-
放射科医师的时间。在此之前,放射科医师一天只能看到有限数量的人,现在一个良好设置的医疗系统几乎可以看到无限数量的患者。很多星号,但基本思想在这里
-
这还消除了地理限制
-
自动驾驶(由于共享资源导致出租车费用降低,因此更多人能够移动)
|
-
医疗护理可能会更加可及。
-
“第二意见”的意义可能会改变。
-
新的危险将出现,例如增加的群体思维,数据漂移,减少对人类专家意见的重视。
|
| ^(a) 这与“放松限制”类似,但示例相当不同,因此将它们保持在不同的类别中。 |
|---|
案例使用的持续影响
在其核心,这个想法是通过训练数据更轻松地将人类知识编码到机器中。
“复制”人类理解的成本接近于零。以前,放射科医生的时间是稀缺资源,现在它将变得丰富。以前绿幕只出现在电影工作室,现在它随身可带,无论身处世界何处。(参见 2)
这带来了互联网的所有优势
这带来了以下的后续影响。
-
可以显著增加项目的频率。例如,以前视觉桥梁检查可能一年或十年才能进行一次。现在,类似级别的分析可能每几秒钟就能完成。
-
以前“随机”的流程将变得相对“固定”。我们都知道车祸会发生。但最终 - 它们将会很少发生。将以前随机的过程(你到家后给我打电话)变成几乎肯定的事情(国际新闻,过去 24 个月内的第一次车祸发生了)。
-
以前不可能的事情将会变得可能。例如,把“牙医放进你的口袋”,最终你将能够用手机传感器对准你的口腔,获得一种以前需要看牙医才能得到的洞察力水平。
-
增加“个人”辅助的个性化和效果将会增加。
重新思考 AI 注释人才 - 质量胜过数量
-
首先购买培训数据,数据为中心的首要思维方式是一件事情
-
实际上在做注释的是一个不同的决定
-
密切相关
-
事实上并不存在争议的想法 - 只是意识问题(例如,一旦意识到,8/10 的人会同意它)
- 通过逻辑步骤。可以引起共鸣。
谁在注释和培训数据文化紧密相关。了解培训数据的人越多,机会就越多。您自己的员工和专家参与的越多,质量就越高。
培训数据投资回报率的关键杠杆
-
才能,或者谁在注释。引用一位管理 100 名注释员团队的人的话:“注释质量的最大决定因素是创建注释的人。”
-
培训数据文化的程度。这可以是一种阶梯函数类型的差异。人们要么意识到某些东西可以转化为培训数据,要么不意识到。
这些因素最终将决定培训数据的“寿命”,以及其转化为实际生产力改善的能力。
让我们考虑一下注释数据代表什么
-
您的业务知识、商业机密、流程、能力
-
大量的人力投资用于创建、更新、保护和维护它
-
在 AI 转型期间保持竞争力的关键
在这种背景下考虑您的注释进一步支持需要有专门的业务部门专注于此。它还展示了在购买过程的所有阶段都需要意识。例如,如果您购买一个系统来自动化某些任务,并且供应商负责注释的日期,这对您的未来意味着什么?
控制您自己的培训数据的好处
-
A better cost model by using your existing team
-
Control over the economics and quality of the output
-
A better cost model by creating a shareable, reusable library of training data
The Need for Hardware
First let’s get some sticker shock out of the way. Big, mature AI companies spend $10s-100s+ of millions of dollars on AI compute (e.g. GPUs, ingestion, Storage). This means that hardware cost is a key consideration.
Second, training data is your new gold. It’s one of your most important assets. People may be your most important asset, but this is a literal embodiment of people. It’s important. How do you protect it?
Realistically, if you aren’t controlling the hardware, there is very little way to protect that data. What happens if there is a contract dispute? What if the vendor’s controls aren’t as good as you thought? You have your key business data and records under your control - and training data must be the same way. To be clear here - I don’t just mean say the annotation tooling. Any data that any of your vendors are capturing that’s used for training AI must be considered here.
This means that while a SaaS solution may be ok for getting started, proof of concept etc, for training data the hardware costs, and degree of importance to the company is too great to not take control of it.
Practically speaking, if you leave any type of prediction, annotation automation, etc. in the hands of a vendor’s server (unless it’s being run on the client) this means you will be actually negotiating a huge amount of hardware costs hidden inside the annotation tooling cost.
Common Project Mistakes
Under Resourcing is especially prevalent here. I have seen a number of solo professionals from pathology to dentistry be curious about AI. While this curiously is naturally great, the reality is you need a strong team effort and substantial resources to build something that will be even true prototype level or production.
-
Under Resourced. A single Dr is unlikely to make a general purpose AI, even for their niche area.
-
Mistakes on volume of data needed. For example a major dental office’s x-rays for all time for all patients may be substantial, but on its own still probably is not enough data for a general purpose dentist AI.
-
Most AI projects have a very very long time horizon. It takes on the order of months to years to build reasonable systems. And often the expected lifetime and maintenance is measured in years or even longer.
Adopt Modern Training Data Tools
Usage of Training Data tools. Effective usage can have orders of magnitude differences. The first step is to gain awareness of what high level concepts exist. If you have read all the way through you have already taken a big step in this direction, getting this book and other material in front of your team is a great way to help accelerate this process.
Software can help provide guard rails and encouragement to a transformation, but it is only a part of the overall transformation.
训练数据专注的软件旨在扩展至所需的广度和深度复杂性,以真正捕捉所需的业务流程的细节。标记整个图像与复杂属性的多边形经过专门的审核流程后的区别巨大。
训练数据软件经过了漫长的发展并吸引了数百万美元的投资,远非其起初的简朴。现代训练数据软件更像是一套办公软件,具备多个复杂的应用程序相互交互。也许在逐行复杂性上还不及,但在方向上,几年后将会是如此。
商业模式
工具销售的两种主要商业模式
-
按用户付费
-
按使用量付费
TODO 进一步扩展这一点
考虑学习曲线而非完美
有一种倾向是在训练数据软件中寻求完美和熟悉性。特别是如果现有的早期团队熟悉某种模式。简单的事实是,所有软件都有漏洞。就在前几天,我使用谷歌搜索时,它重复了菜单和搜索结果。这是一个经过数十年数万亿工程努力的产品!
如果我们回顾早期的计算机应用程序,它们的用户界面非常晦涩。人们必须学习许多概念才能执行简单的任务。在这里也适用同样的基本原则。
另一个需要理解的事实是,这些应用和使用案例的复杂性不断增加。我刚开始时可以在半小时内演示大部分关键功能。现在,即使我将演示范围限定于特定角色(比如标注员)和特定媒体类型(比如图像),仍可能需要半小时!一个完整的端到端覆盖将需要数天…… 就像对从未使用过文字处理或电子表格的人进行基础培训课程可能需要数天一样。
放慢速度
虽然 UI 设计和定制化很重要,但过分关注可能会忽略重要点。如果 SEM(搜索引擎营销专员)们太忙以至于无法进行基础培训(或仅是时间问题),那么实际上他们能提供质量高的标注吗?
定制化和配置
进一步地,虽然现成的软件无疑是起点,我们必须认识到总会有一定程度的定制化和配置需求。
新的培训和知识是必需的
每个人
-
介绍:关于监督式人工智能的高层概述及其与贵公司业务的关系。
-
保证:它将提高生产力 - 提议和更正 - 而不是取代他们的工作。
-
概念:监督导致更高效的工作。
-
请求:提出适合此类监督的流程想法。
Annotators
-
标注工具的基础知识。继续办公类比,掌握标注工具的使用将成为现代学习文字处理的等价物。
-
更深入的培训,比如在部分阅读这本书,以及进一步培训关于偏见等敏感问题。
管理人员
上述所有内容以及:
-
如何询问有关新流程和更新流程的问题
-
如何识别在财务上可行的训练数据机会
-
反思在 AI 注释新世界中的生产力目标。在注释中未记录的每一时刻的工作都是一时的损失。
高管们
-
反思公司组织,比如创建一个新的训练数据单位
-
反思、培养和保护围绕培训的文化
-
谨慎考虑供应商选择,以确保未来 AI 目标的安全性
生产和消费训练数据
这其中最令人困惑的一个方面是:“是谁在制作消耗训练数据的软件?”“谁在产生训练数据?”。这里我见过的主要情况有:
-
一个专注于软件的公司生产了一款 AI 驱动的产品,而训练数据的大部分或全部也由他们产生。该公司将软件发布给消费者或其他公司购买软件并成为最终用户。
-
一家拥有内部训练数据生产能力的公司为其自己内部使用创建软件。通常这可能涉及依赖外部合作伙伴或非常大的投资。
-
一个软件公司生产了一款 AI 驱动的产品,但把大部分训练数据留给了购买软件的最终用户来产生。
唯一的情况是最终用户公司不参与训练数据的生产是 1)。一般来说,这要么将企业的核心竞争力转移到软件提供商,要么意味着提供的产品相对静态。这里的类比可以是购买一个无法更新的“网站”。由于很少有人想要一个无法更新的网站,总的趋势可能会是公司始终能够以某种方式产生自己的训练数据。
从高管的角度来看,从某种意义上说,这真的是最关键的问题:“你想要自己生产训练数据吗?”。
避免的陷阱:在训练数据优化过早
| 陷阱 | 发生原因 | 警告信号 | 避免 |
|---|---|---|---|
| 认为一个受训模型==完成 |
-
努力训练模型。
-
它有点起作用,人们感到兴奋。
-
假设只需要做些小的调整
-
认识到这还远远不够。
|
-
“受过训练的模型”被讨论为最终目标。
-
不讨论持续进行的注释。
-
谈论迭代,但在有限的时间窗口内。
|
-
教育人们的目标是建立一个持续改进的系统,而不是一个一次性的模型
-
提前讨论什么性能水平足以发布第一版。例如,对于自动驾驶,有些人采取了“等同于人类就足够好”的方法。^(a)
|
| 过早承诺模式 |
|---|
-
耗费大量资源进行注释
-
意识到标签、属性、整体架构等与他们的需求不匹配。例如,一直在使用边界框,但意识到需要关键点。
|
-
在早期试点工作和更重要的工作之间,架构没有显著变化。
-
架构是在几乎没有数据科学参与的情况下确定的。
-
“最终”架构是在没有证据表明成功实现会解决下游问题的情况下确定的。
|
-
期望架构会变化
-
尝试许多不同的架构方法与实际模型一起,看看什么实际上有效 - 不要假设任何人都有足够的背景知识提前知道答案。
-
问:如果模型能够完美预测,这是否真正解决了我们的下游用例?例如,如果它完美地预测了这个钢筋上的盒子,那是否解决了整体问题?
|
| 过早承诺自动化 |
|---|
-
查看人类标注可能需要多少资源
-
寻找自动化解决方案
-
起初对自动化结果感到满意
-
意识到自动化并没有完全做他们认为它在做的事情
|
-
不切实际的期望。例如,期望自动化几乎可以解决所有标注的问题。
-
探索自动化,而没有涉及数据科学
-
在进行任何重要的人类标注工作之前,详细讨论自动化计划。
-
在虚假假设下,管理思想中对训练数据的减少,认为自动化可以处理它。
|
-
意识到不需要太多的人类标注就可以开始获取对需求的方向性理解。
-
在完成大量手动人类标注之前,最好使用最少甚至零自动化。
-
做比你认为需要的人类标注更多。之后,你将能够选择最有效的自动化。
-
把自动化视为过程的一个预期部分。而不是一个灵丹妙药。
|
| 错误计算工作量的数量 |
|---|
-
查看整体数据集大小
-
项目需要多少标注
-
假设会需要所有这些工具
|
-
假设所有可用的数据都需要被标注(数据可以根据最有价值的项目进行过滤)
-
不考虑数据的持续积累或生产数据
-
不考虑边际效益递减。例如,每进一步注释的项目都会比前一个项目增加的价值少。
|
-
获取足够大的实际工作样本,了解每个样本通常需要多长时间。
-
意识到这总是一个不断移动的目标。例如,随着模型变得更好,每个样本的工作可能会变得更加困难。
|
| 没有花足够的时间来使用工具 没有获得正确的工具 |
|---|
-
过度关注“获取数据集的标注”,而不是实际结果。
-
不切实际的期望。把它看待得更像是一个随便逛逛的购物网站,而不是一个严肃的新生产力工具套件。
|
-
意识到这些新平台就像是 Photoshop 进入酒吧,遇到一个兼职作为数据工程师的严格任务大师。它是复杂而新颖的。
-
工具越强大,理解的需求越大。把它看待得更像是学习一个新的学科领域,一门新的艺术。
|
| ^(a) I’m not commenting if this approach is right or wrong. |
|---|
No Silver Bullets
There are no silver bullets to Annotation. Annotation is work. For that work to have value it must be literally labored at. All of the means to improve the productivity of annotation must have some base that exists.
Training data must be relevant to your business use case. To do this, it needs the insights from your employees. Everything else is noise, or in depth expert, situationally specific concepts.
Instead of looking at some of these optimizations as true gains, rather see missing out on them as being functionally illiterate.
This caution is important because, being such a new area, the norms are poorly established.
Culture of Training Data
One of the biggest mis-conceptions about modern training data is that it is exclusively the realm of data science. This misconception really holds teams back.
True data science is very hard work.
However, the context in which that hard work must be employed is often confused.
If the AI projects are left as “that’s the data science teams’ responsibility” then how likely do you think success company wide will be?
It’s very clear that:
-
Non-data science expertise, in the form of subject matter knowledge, is the core of training data.
-
The ratio of people who are SEMs to data scientists is of vast fields to a single grain.
-
Data science work is increasingly becoming automatic and integrated into applications
The great thing here is that most data scientists would be happy if other people knew more about training data. As a data scientist, I don’t want to worry about the training data for the most part, I have enough of my own concerns.
Not everything, at least right away, is a good candidate for training data. Being able to recognize what will likely work and what won’t work is a key part of this culture. The more bottom-up the ideas for this, the less likely it will be something that appears easy but is actually terribly hard and fails.
Getting everyone involved with training data is at the heart of AI transformation. In the same way that the IT team doesn’t magically recreate every business process on their own. Each line of business manager brings a growing awareness of the capabilities of digital tools, what questions to ask, etc.
New Engineering Principles
The first step is to recognize the intersection of the business need, and the expert annotators, with the day to day concerns about data.
Creating Embedded Annotation Experiences
Creating annotation experiences embedded into existing and new applications. User interfaces, data extraction to training data systems, receiving predictions etc.
Making the Training Data system a Standard central component
要运行 Web 服务器,我们使用标准的 Web 服务器技术。训练数据也是如此。随着这一领域的复杂性和投资持续增长,将训练数据转移到专用系统或一组系统中变得越来越合理。
从数据科学中抽象训练数据
将数据集创建作为一个简单的断点。如果数据集不再是静态的东西,而是允许训练数据自行创建,并由数据科学查询,我们就能得到一个更强大的责任分离。当然,在实践中会有一些相互作用和沟通,但从方向上来看,这提供了一个更清晰的责任范围。
¹ 关于外包的一点快速说明,即使注释者中有一部分是外包的,但涉及的预算如此庞大,可能更合适的思考方式是将它们视为兼职甚至全职等价物。
² 从技术上讲,这是“更高维度的空间”,在这个空间中我们无法合理地进行视觉表示。许多机器学习模型具有数百个维度,而我们只能合理地绘制四维(空间(x,y,z)和时间(t))。
第八章:关于作者
安东尼·萨尔基斯 是 Diffgram 训练数据管理软件的首席工程师,也是 Diffgram 公司的创始人。在此之前,他曾是 Skidmore, Owings & Merrill 的软件工程师,并共同创立了 DriveCarma.ca。







浙公网安备 33010602011771号