🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】 深度学习【DL】
🖍foreword
✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。
如果你对这个系列感兴趣的话,可以关注订阅哟👋
文章目录
ML允许机器从数据中学习并以概率方式运行,通过针对给定目标进行优化来解决问题。这与传统编程相反,在传统编程中,程序员编写描述如何解决问题的分步说明。这使得 ML 对于构建我们无法定义启发式解决方案的系统特别有用。
图 1-1描述了两种编写检测猫系统的方法。在左侧,程序由手动编写的过程组成。在右侧,ML 方法利用标有相应动物的猫狗照片数据集,使模型能够学习从图像到类别的映射。在 ML 方法中,没有关于如何实现结果的规范,只有一组示例输入和输出。
图 1-1。从定义程序到展示示例
ML 功能强大,可以解锁全新的产品,但由于它基于模式识别,因此引入了一定程度的不确定性。重要的是要确定产品的哪些部分会从 ML 中受益,以及如何以最大限度地降低用户体验不佳的风险的方式来制定学习目标。
例如,人类几乎不可能(并且尝试极其耗时)编写分步指令以根据像素值自动检测图像中的动物。通过将数千张不同动物的图像输入到卷积神经网络 (CNN),但是,我们可以构建一个模型,该模型比人类更准确地执行此分类。这使得使用 ML 来处理它成为一项有吸引力的任务。
另一方面,自动计算税款的应用程序应依赖政府提供的指南。正如您可能听说过的那样,在您的纳税申报表上出现错误通常是不受欢迎的。这使得使用 ML 自动生成纳税申报表成为一个可疑的提议。
当您可以使用一组可管理的确定性规则来解决问题时,您永远不想使用机器学习。可管理性是指一组您可以自信地编写并且维护起来不会太复杂的规则。
因此,尽管 ML 开辟了一个包含不同应用程序的世界,但重要的是要考虑ML可以而且应该解决哪些任务。在构建产品时,您应该从一个具体的业务问题开始,确定它是否需要 ML,然后努力寻找可以让您尽快迭代的 ML 方法。
我们将在本章中介绍这个过程,从估计 ML 能够解决哪些任务的方法开始,哪些 ML 方法适用于哪些产品目标,以及如何处理数据需求。我将通过我们在“我们的案例研究:ML-Assisted Writing”中提到的 ML Editor 案例研究以及对 Monica Rogati 的采访来说明这些方法。
自从ML 模型可以在不需要人类给它们逐步指导的情况下处理任务,这意味着它们能够比人类专家更好地执行一些任务(例如从放射学图像中检测肿瘤或下围棋)以及一些完全无法达到的任务人类(例如从数百万的文章中推荐文章或改变说话者的声音以听起来像其他人)。
ML 直接从数据中学习的能力使其在广泛的应用中很有用,但也让人类更难准确地区分哪些问题可以通过 ML 解决。对于在研究论文或企业博客中发表的每一个成功结果,都有数百个听起来合理但完全失败的想法。
尽管目前没有可靠的方法来预测 ML 的成功,有一些指南可以帮助您降低与处理 ML 项目相关的风险。最重要的是,你应该始终从产品目标开始,然后决定如何最好地解决它。在这个阶段,无论是否需要 ML,对任何方法都持开放态度。在考虑 ML 方法时,请确保根据这些方法对产品的适用程度来评估这些方法,而不是简单地根据这些方法在真空中的有趣程度来评估。
这最好的方法是遵循两个连续的步骤:(1) 在 ML 范例中构建您的产品目标,以及 (2) 评估该 ML 任务的可行性。根据您的评价,您可以重新调整您的框架,直到我们满意为止。让我们探讨一下这些步骤的真正含义。
在 ML 范例中构建产品目标:当我们构建产品时,我们首先考虑要为用户提供什么服务。正如我们在简介中提到的,我们将使用帮助用户编写更好问题的编辑器的案例研究来说明本书中的概念。该产品的目标很明确:我们希望用户收到关于他们所写内容的可操作且有用的建议。然而,机器学习问题的定义方式完全不同。ML 问题本身涉及从数据中学习函数。一个例子是学习用一种语言输入一个句子并用另一种语言输出它。对于一个产品目标,通常有许多不同的 ML 公式,实现难度各不相同。
评估 ML 可行性:全部机器学习问题生来不平等!随着我们对 ML 的理解不断发展,诸如构建模型以正确分类猫狗照片等问题已经可以在数小时内解决,而其他问题(例如创建能够进行对话的系统)仍然是悬而未决的研究问题. 为了有效地构建 ML 应用程序,重要的是要考虑多个潜在的 ML 框架,并从我们判断为最简单的框架开始。评估 ML 问题难度的最佳方法之一是查看它需要的数据类型以及可以利用这些数据的现有模型。
为了建议不同的框架并评估它们的可行性,我们应该检查 ML 问题的两个核心方面:数据和模型。
ML 中有许多常用的模型,我们不会在这里对所有模型进行概述。请随时参阅“其他资源”中列出的书籍以获得更全面的概述。除了常见模型外,每周都会发布许多模型变体、新颖的架构和优化策略。仅在 2019 年 5 月,就有超过 13,000 篇论文被提交到ArXiv,这是一个流行的电子研究档案,经常提交有关新模型的论文。
然而,分享不同类别模型的概述以及它们如何应用于不同问题是很有用的。为此,我在此提出了一种基于模型处理问题方式的简单模型分类法。您可以将其用作选择解决特定 ML 问题的方法的指南。由于模型和数据在 ML 中紧密耦合,您会注意到本节与“数据类型”之间存在一些重叠。
毫升算法可以根据它们是否需要标签进行分类。在这里,标签是指模型应该为给定示例生成的理想输出数据中的存在。监督算法利用包含输入标签的数据集,他们的目标是学习从输入到标签的映射。无监督算法,关于另一方面,不需要标签。最后,弱监督算法利用不完全是所需输出但在某种程度上类似于它的标签。
许多产品目标可以通过监督和非监督算法来解决。欺诈检测系统可以通过训练一个模型来构建,以检测不同于平均交易的交易,不需要标签。这样的系统也可以通过手动标记交易为欺诈或合法,并训练模型从所述标签中学习来构建。
对于大多数应用程序,监督方法更容易验证,因为我们可以访问标签来评估模型预测的质量。这也使得训练模型变得更容易,因为我们可以访问所需的输出。虽然最初创建带标签的数据集有时会很耗时,但它可以更轻松地构建和验证模型。出于这个原因,本书将主要介绍监督方法。
和话虽这么说,确定您的模型将接受哪种输入以及它将产生哪种输出将帮助您显着缩小潜在方法的范围。基于这些类型,以下任何类别的 ML 方法都可能适合:
分类和回归
知识抽取
目录组织
生成模型
我将在下一节中进一步展开这些内容。当我们探索这些不同的建模方法时,我建议考虑您可以使用或可以收集的数据类型。通常,数据可用性最终成为模型选择的限制因素。
一些项目的重点是在两个或多个类别之间对数据点进行有效分类,或者在连续范围内为它们赋予一个值(称为回归而不是分类)。回归和分类在技术上是不同的,但通常解决它们的方法有很大的重叠,所以我们在这里把它们放在一起。
分类和回归相似的原因之一是因为大多数分类模型输出模型属于某个类别的概率分数。然后分类方面归结为决定如何根据所述分数将对象归入类别。因此,在较高层次上,分类模型可以看作是概率值的回归。
通常,我们对单个示例进行分类或评分,例如垃圾邮件过滤器将每封电子邮件分类为有效或垃圾邮件,将用户分类为欺诈或合法的欺诈检测系统,或计算机视觉放射学模型将骨骼分类为骨折或健康。
在图 1-2中,您可以看到一个示例根据句子的情感及其涵盖的主题对句子进行分类。
图 1-2。将一个句子分类为多个类别
在回归项目中,我们不是为每个示例分配一个类,而是给它们一个值。根据房屋数量和位置等属性预测房屋的销售价格是回归问题的一个示例。
在某些情况下,我们可以访问一系列过去的数据点(而不是一个)来预测未来的事件。这种类型的数据通常被称为时间序列,并根据一系列数据点进行预测被称为作为预测。时间序列数据可以代表患者的病史或国家公园的一系列出勤测量数据。这些项目通常受益于可以利用这个增加的时间维度的模型和功能。
在在其他情况下,我们尝试从数据集中检测异常事件。这称为异常检测。当分类问题试图检测代表少数数据的事件,因此很难准确检测时,通常需要一组不同的方法。大海捞针是一个很好的类比。
好的分类和回归工作通常需要重要的特征选择和特征工程工作。特征选择包括识别具有最大预测价值的特征子集。特征生成是通过修改和组合数据集的现有特征来识别和生成目标的良好预测因子的任务。我们将在第 III 部分中更深入地介绍这两个主题。
最近,深度学习显示出一种很有前途的能力,可以从图像、文本和音频中自动生成有用的特征。将来,它可能会在简化特征生成和选择方面发挥更大的作用,但就目前而言,它们仍然是机器学习工作流程中不可或缺的一部分。
最后,我们通常可以在前面描述的分类或评分之上构建以提供有用的建议。这需要构建可解释的分类模型并使用其功能生成可操作的建议。稍后会详细介绍!
并非所有问题都旨在将一组类别或值归因于一个示例。在某些情况下,我们希望在更细粒度的级别上操作并从输入的部分中提取信息,例如了解对象在图片中的位置。
结构化数据是以表格格式存储的数据。数据库表和 Excel 工作表是结构化数据的好例子。非结构化数据是指非表格格式的数据集。这包括文本(来自文章、评论、维基百科等)、音乐、视频和歌曲。
在图 1-3中,您可以在左侧看到结构化数据的示例,在右侧看到非结构化数据的示例。知识提取模型侧重于获取非结构化数据源并使用 ML 从中提取结构。
例如,在文本的情况下,知识提取可用于为评论添加结构。可以训练模型从评论中提取清洁度、服务质量和价格等方面。然后,用户可以轻松访问提及他们感兴趣的主题的评论。
图 1-3。结构化和非结构化数据的示例类型
在医学领域,可以建立知识抽取模型,以医学论文中的原始文本为输入,提取论文中讨论的疾病、相关诊断及其表现等信息。在图 1-4中,模型以一个句子作为输入,并提取哪些词指代媒体类型,哪些词指代媒体标题。例如,在粉丝论坛中使用这样的评论模型,可以让我们生成关于哪些电影经常被讨论的摘要。
图 1-4。从句子中提取媒体类型和标题
为了对于图像,知识抽取任务通常包括在图像中寻找感兴趣的区域并对它们进行分类。二常见的方法如图 1-5所示:对象检测是一种较粗略的方法,包括在感兴趣区域周围绘制矩形(称为边界框),同时分割将图像的每个像素精确地归为给定类别。
图 1-5。边界框和分割掩码
有时,这些提取的信息可以用作另一个模型的输入。一个例子是使用姿势检测模型从瑜伽士的视频中提取关键点,并将这些关键点提供给第二个模型,该模型根据标记数据将姿势分类为正确与否。图 1-6显示了可以执行此操作的一系列两个模型的示例。第一个模型从非结构化数据(照片)中提取结构化信息(关节坐标),第二个模型获取这些坐标并将它们分类为瑜伽姿势。
图 1-6。瑜伽姿势检测
到目前为止,我们看到的模型侧重于生成以给定输入为条件的输出。在某些情况下,例如搜索引擎或推荐系统,产品目标是显示相关项目。这就是我们将在以下类别中介绍的内容。
目录组织模型通常会产生一组结果呈现给用户。这些结果可以以输入到搜索栏中的输入字符串、上传的图像或对家庭助理说的短语为条件。在许多情况下,例如流媒体服务,这组结果也可以主动呈现给用户,作为他们可能喜欢的内容,而无需他们提出任何请求。
图 1-7显示了这样一个系统的示例,该系统根据用户刚看过的电影自愿推荐潜在的候选电影来观看,但无需用户执行任何形式的搜索。
图 1-7。电影推荐
因此,这些模型要么推荐与用户已经表示感兴趣的项目相关的项目(类似的 Medium 文章或亚马逊产品),要么提供一种有用的方式来搜索目录(允许用户通过键入文本或提交自己的内容来搜索项目相片)。
这些推荐通常基于从以前的用户模式中学习,在这种情况下,它们被称为协作推荐系统。有时,它们基于项目的特定属性,在这种情况下,它们被称为基于内容的推荐系统。一些系统同时利用协作和基于内容的方法。
最后,ML 也可以用于创意目的。模型可以学习生成美观的图像、音频,甚至有趣的文本。这样的模型被称为生成模型。
生成模型专注于生成数据,可能依赖于用户输入。由于这些模型专注于生成数据,而不是将数据分类、评分、从中提取信息或组织数据,因此它们通常具有广泛的输出。这意味着生成模型非常适合翻译等输出千变万化的任务。
另一方面,生成模型通常用于训练并具有较少约束的输出,这使它们成为生产中风险更高的选择。出于这个原因,除非它们是实现您的目标所必需的,否则我建议首先从其他模型开始。但是,对于想要更深入地研究生成模型的读者,我推荐David Foster的《生成深度学习》一书。
实际的例子包括翻译,将一种语言的句子映射到另一种语言;总结;字幕生成,将视频和音轨映射到文字记录;和神经风格迁移(参见Gatys 等人,“艺术风格的神经算法”),它将图像映射到风格化的演绎。
图 1-8显示了一个生成模型的示例,它通过赋予照片类似于右侧小插图中所示的绘画风格来转换左侧的照片。
图 1-8。Gatys 等人的风格迁移示例,“艺术风格的神经算法”
正如您现在所知道的,每种类型的模型都需要不同类型的数据进行训练。通常,模型的选择在很大程度上取决于您能够获得的数据——数据可用性通常会驱动模型选择。
让我们介绍一些常见的数据场景和相关模型。
受监督ML 模型利用数据中的模式来学习输入和输出之间的有用映射。如果数据集包含可预测目标输出的特征,则合适的模型应该可以从中学习。然而,大多数情况下,我们最初没有正确的数据来训练模型来端到端地解决产品用例。
例如,假设我们正在训练一个语音识别系统,该系统将听取客户的请求,了解他们的意图,并根据所述意图执行操作。当我们开始处理这个项目时,我们可能会定义一组我们想要理解的意图,例如“在电视上播放电影”。
为了训练 ML 模型来完成这项任务,我们需要有一个数据集,其中包含不同背景的用户以他们自己的方式要求系统播放电影的音频片段。拥有一组具有代表性的输入是至关重要的,因为任何模型都只能从我们提供给它的数据中学习。如果数据集仅包含来自人口子集的示例,则产品将仅对该子集有用。考虑到这一点,由于我们选择的专业领域,此类示例的数据集极不可能已经存在。
对于我们想要处理的大多数应用程序,我们将需要搜索、管理和收集额外的数据。根据项目的具体情况,数据采集过程的范围和复杂性可能会有很大差异,提前估计挑战对于成功至关重要。
首先,让我们定义一些您在搜索数据集时可能遇到的不同情况。这种初始情况应该是决定如何进行的关键因素。
一次我们将问题定义为将输入映射到输出,我们可以搜索遵循此映射的数据源。
对于欺诈检测,这些可能是欺诈用户和无辜用户的示例,以及我们可以用来预测他们行为的帐户特征。对于翻译,这将是源域和目标域中句子对的语料库。对于内容组织和搜索,这可能是过去搜索和点击的历史记录。
我们很少能够找到我们正在寻找的确切映射。出于这个原因,考虑一些不同的情况是有用的。将此视为数据需求的层次结构。
那里大致分为三个级别的数据可用性,从最佳情况到最具挑战性。不幸的是,与大多数其他任务一样,您通常可以假设最有用的数据类型最难找到。让我们通过它们。
标签数据存在
这是图 1-9中最左边的类别。在监督模型上工作时,找到带标签的数据集是每个从业者的梦想。此处标记意味着许多数据点包含模型试图预测的目标值。这使得训练和判断模型质量变得更加容易,因为标签提供了真实答案。在实践中很少能找到适合您的需求并可在网络上免费获得的标记数据集。然而,将您找到的数据集误认为是您需要的数据集是很常见的。
存在弱标记数据
这个是图 1-9中的中间类别。一些数据集包含的标签不完全是建模目标,但在某种程度上与之相关。音乐流媒体服务的播放和跳过历史记录是用于预测用户是否不喜欢歌曲的弱标记数据集的示例。虽然听众可能没有将歌曲标记为不喜欢,但如果他们在播放时跳过它,则表明他们可能不喜欢这首歌。根据定义,弱标签不太精确,但通常比完美标签更容易找到。
存在未标记的数据
该类别位于图 1-9的右侧。在某些情况下,虽然我们没有将所需输入映射到输出的标记数据集,但我们至少可以访问包含相关示例的数据集。对于文本翻译示例,我们可能可以访问两种语言的大量文本集合,但它们之间没有直接映射。这意味着我们需要标记数据集,找到一个可以从未标记数据中学习的模型,或者两者兼而有之。
我们需要获取数据
在在某些情况下,我们离未标记的数据只有一步之遥,因为我们需要先获取它。在许多情况下,我们没有所需的数据集,因此需要找到一种方法来获取此类数据。这通常被视为一项无法克服的任务,但现在有许多方法可以快速收集和标记数据。这将是第 4 章的重点。
对于我们的案例研究,理想的数据集是一组用户输入的问题,以及一组措辞更好的问题。一个弱标签数据集将是一个包含许多问题的数据集,带有一些弱标签表明它们的质量,例如“喜欢”或“赞成”。这将有助于模型了解什么是好问题和坏问题,但不会为同一问题提供并排示例。您可以在图 1-9中看到这两个示例。
图 1-9。数据可用性与数据有用性
一般来说,在 ML 中,弱标记数据集是指包含有助于模型学习的信息的数据集,但不包含确切的基本事实。在实践中,我们可以收集到的大多数数据集都是弱标记的。
有一个不完美的数据集完全没问题,不应该阻止你。ML 过程本质上是迭代的,因此无论数据质量如何,从数据集开始并获得一些初步结果是最好的前进方式。
让我们了解我们如何遍历产品用例以找到正确的 ML 框架。我们将通过概述从产品目标(帮助用户编写更好的问题)到 ML 范例的方法来完成此过程。
我们想构建一个编辑器来接受用户的问题并改进它们以写得更好,但是在这种情况下“更好”是什么意思?让我们首先更清楚地定义写作助手的产品目标。
许多人们使用论坛、社交网络和Stack Overflow等网站来寻找问题的答案。然而,人们提问的方式对他们是否得到有用的答案有着巨大的影响。对于希望问题得到解答的用户和可能遇到相同问题并可能发现现有答案有用的未来用户来说,这都是不幸的。为此,我们的目标是构建一个可以帮助用户写出更好问题的助手。
我们有一个产品目标,现在需要决定使用哪种建模方法。为了做出这个决定,我们将经历前面提到的模型选择和数据验证的迭代循环。
在在这种情况下,端到端意味着使用单个模型从输入到输出,没有中间步骤。由于大多数产品目标都非常具体,因此尝试通过端到端学习来解决整个用例通常需要定制的尖端 ML 模型。对于有资源开发和维护此类模型的团队来说,这可能是正确的解决方案,但通常值得首先从更容易理解的模型开始。
在我们的案例中,我们可以尝试收集一个包含问题表述不当的数据集,以及它们经过专业编辑的版本。然后我们可以使用生成模型直接从一个文本转到另一个文本。
图 1-10描述了这在实践中的样子。它显示了一个简单的图表,左侧是用户输入,右侧是所需的输出,中间是一个模型。
图 1-10。端到端的方法
正如您将看到的,这种方法带来了重大挑战:
数据
要获取这样的数据集,我们需要找到具有相同意图但措辞质量不同的成对问题。这是一个很难找到的数据集。自己构建它的成本也很高,因为我们需要专业编辑的协助来生成这些数据。
模型
模型从一个文本序列到另一个文本序列,如前面讨论的生成模型类别所示,近年来取得了巨大进展。序列到序列模型(如 I. Sutskever 等人在论文“Sequence to Sequence Learning with Neural Networks”中所述)最初于 2014 年提出,用于翻译任务,正在缩小机器翻译和人工翻译之间的差距。然而,这些模型的成功主要体现在句子级任务上,它们并不经常用于处理长于段落的文本。这是因为到目前为止,他们还无法捕捉到从一个段落到另一个段落的长期上下文。此外,由于它们通常具有大量参数,因此它们是训练速度最慢的模型。如果一个模型只训练一次,这不一定是个问题。如果需要每小时或每天重新训练,训练时间可能成为一个重要因素。
潜伏
序列到序列模型通常是自回归模型,这意味着它们需要模型输出前一个词才能开始处理下一个词。这使它们能够利用来自相邻单词的信息,但会导致它们的训练和推理速度比更简单的模型慢。此类模型可能需要几秒钟才能在推理时产生答案,而更简单的模型则需要亚秒级延迟。虽然可以优化这样的模型以足够快地运行,但这将需要额外的工程工作。
易于实施
训练复杂的端到端模型是一个非常微妙且容易出错的过程,因为它们有许多活动部件。这意味着我们需要考虑模型的潜在性能和它给管道增加的复杂性之间的权衡。这种复杂性会减慢我们构建管道的速度,但也会带来维护负担。如果我们预计其他队友可能需要迭代和改进您的模型,那么选择一组更简单、更容易理解的模型可能是值得的。
这种端到端的方法可能有效,但它需要大量的前期数据收集和工程工作,并且不能保证成功,因此探索其他替代方案是值得的,我们将在接下来介绍。
作为你会在本节末尾的访谈中看到,数据科学家在实现算法之前成为算法通常是一个好主意。换句话说,要了解如何最好地自动化解决问题,请从尝试手动解决它开始。那么,如果我们自己编辑问题以提高可读性和获得答案的几率,我们将如何着手呢?
第一种方法是根本不使用数据,而是利用现有技术来定义什么使问题或文本主体写得很好。对于一般的写作技巧,我们可以联系专业编辑或研究报纸的风格指南以了解更多信息。
此外,我们应该深入研究数据集以查看各个示例和趋势,并让它们为我们的建模策略提供信息。我们将暂时跳过这一点,因为我们将在第 4 章中更深入地介绍如何做到这一点。
首先,我们可以查看现有研究来确定我们可以用来帮助人们更清楚地书写的一些属性。这些特征可能包括以下因素:
散文简洁
我们经常给新作家建议使用更简单的单词和句子结构。因此,我们可以建立一套关于适当句子和单词长度的标准,并根据需要提出更改建议。
语气
我们可以衡量副词、最高级和标点符号的使用来衡量文本的极性。根据上下文,更多自以为是的问题可能会得到更少的答案。
结构特点
最后,我们可以尝试提取重要结构属性的存在,例如问候语或问号的使用。
一旦我们识别并生成了有用的特征,我们就可以构建一个简单的解决方案,使用它们来提供建议。这里不涉及 ML,但这一阶段至关重要,原因有二:它提供了一个可以非常快速实施的基线,并将作为衡量模型的准绳。
为了验证我们关于如何检测好文章的直觉,我们可以收集“好”和“坏”文本的数据集,看看我们是否可以使用这些特征来区分好坏。
现在我们有一组基线特征,我们可以尝试使用它们从大量数据中学习风格模型。为此,我们可以收集一个数据集,从中提取我们之前描述的特征,并在其上训练一个分类器来区分好的和坏的例子。
一旦我们有了一个可以对书面文本进行分类的模型,我们就可以对其进行检查,以确定哪些特征具有高度预测性,并将这些特征用作推荐。我们将在第 7 章中看到如何在实践中做到这一点。
图 1-11描述了这种方法。在左侧,训练了一个模型来将问题分类为好或坏。在右侧,训练模型给出了一个问题,并对这个问题的候选重新表述打分,这将导致它获得更好的分数。向用户推荐得分最高的重新制定。
图 1-11。手动和端到端之间的中间地带
让我们检查一下我们在“尝试使用 ML 做这一切:端到端框架”中概述的挑战,看看分类器方法是否使它们变得更容易:
数据集
我们可以通过从在线论坛收集问题及其质量的一些衡量标准(例如观看次数或投票数)来获得好例子和坏例子的数据集。与端到端方法相反,这不需要我们访问相同问题的修订版。我们只需要一组好的和坏的例子,我们希望从中学习聚合特征,这是一个更容易找到的数据集。
模型
我们在这里需要考虑两件事:模型的预测能力如何(它能否有效区分好文章和坏文章?)以及从中提取特征的难易程度(我们能否看到哪些属性用于对示例进行分类?)。我们可以在这里使用许多潜在的模型,以及我们可以从文本中提取的不同特征,以使其更易于解释。
潜伏
大多数文本分类器都非常快。我们可以从一个简单的模型开始,例如随机森林,它可以在常规硬件上在不到十分之一秒的时间内返回结果,然后在需要时转向更复杂的架构。
易于实施
与文本生成相比,文本分类相对容易理解,这意味着构建这样的模型应该相对较快。在线存在许多工作文本分类管道的示例,并且许多此类模型已经部署到生产环境中。
如果我们从人类启发式开始,然后构建这个简单的模型,我们将很快能够拥有一个初始基线,以及迈向解决方案的第一步。此外,初始模型将是告知下一步要构建什么的好方法(更多内容在第 III 部分)。
关于从简单基线开始的重要性的更多信息,我采访了 Monica Rogati,她分享了她在帮助数据团队交付产品方面学到的一些经验教训。
后获得博士学位 在计算机科学领域,Monica Rogati 在 LinkedIn 开始了她的职业生涯,在那里她从事核心产品的工作,例如将 ML 集成到您可能认识的人算法中,并构建了第一个版本的工作与候选人匹配。然后,她成为 Jawbone 的数据副总裁,在那里她建立并领导了整个数据团队。莫妮卡现在是数十家公司的顾问,这些公司的员工人数从 5 人到 8,000 人不等。在 ML 产品的设计和执行方面,她欣然同意分享她经常给团队的一些建议。
问:您如何确定 ML 产品的范围?
答:你必须记住,你正在尝试使用最好的工具来解决问题,并且只有在有意义的情况下才使用机器学习。
假设您想预测应用程序的用户将做什么并将其作为建议展示给他们。您应该首先结合对建模和产品的讨论。除其他事项外,这包括围绕优雅地处理 ML 故障来设计产品。
您可以首先考虑我们的模型对其预测的信心。然后,我们可以根据置信度得分以不同方式制定我们的建议。如果置信度在90%以上,我们就突出显示建议;如果它超过 50%,我们仍然会显示它,但不会那么强调,如果置信度低于这个分数,我们不会显示任何内容。
问:您如何决定在 ML 项目中关注什么?
答:你必须找到影响瓶颈,这意味着如果你改进它可以提供最大价值的管道部分。在与公司合作时,我经常发现他们可能没有在解决正确的问题,或者没有处于正确的成长阶段。
模型周围经常存在问题。找出这一点的最佳方法是用简单的东西替换模型并调试整个管道。通常,问题不在于模型的准确性。通常,即使您的模型成功了,您的产品也会死掉。
Q:为什么通常建议从简单的模型入手?
答:我们计划的目标应该是以某种方式降低我们模型的风险。最好的方法是从“稻草人基线”开始评估最坏情况下的性能。对于我们之前的示例,这可能只是建议用户之前采取的任何操作。
如果我们这样做,我们的预测多久会是正确的,如果我们错了,我们的模型对用户来说会有多烦人?假设我们的模型并不比这个基线好多少,我们的产品还会有价值吗?
这非常适用于自然语言理解和生成的示例,例如聊天机器人、翻译、问答和摘要。通常在摘要中,例如,简单地提取一篇文章涵盖的热门关键字和类别就足以满足大多数用户的需求。
问:一旦你有了整个管道,你如何识别影响瓶颈?
A:你应该先想象冲击瓶颈已经解决,然后问问自己,你预估的付出是否值得。我鼓励数据科学家撰写推文,鼓励公司在开始项目之前撰写新闻稿。这有助于他们避免仅仅因为他们认为这很酷就去做某件事,并将结果的影响置于基于努力的背景中。
理想的情况是,无论结果如何,你都可以推销结果:如果你没有得到最好的结果,这还有影响力吗?您是否学到了一些东西或验证了一些假设?解决此问题的一种方法是构建基础架构以帮助降低部署所需的工作量。
在 LinkedIn,我们可以使用一个非常有用的设计元素,一个带有几行文本和超链接的小窗口,我们可以使用我们的数据对其进行自定义。由于设计已经获得批准,因此更容易为工作推荐等项目启动实验。因为资源投入少,影响没那么大,迭代周期更快。然后,障碍就变成了非工程问题,例如道德、公平和品牌。
问:您如何决定使用哪种建模技术?
A:第一道防线是自己看数据。假设我们想要构建一个模型来向 LinkedIn 用户推荐群组。一种天真的方法是推荐最受欢迎的组,在组标题中包含他们公司的名称。在查看了几个示例之后,我们发现甲骨文公司的热门群体之一是“甲骨文糟透了!” 向甲骨文员工推荐这将是一个糟糕的群体。
花费人工来查看模型的输入和输出总是有价值的。滚动浏览一堆示例,看看是否有任何东西看起来很奇怪。我在 IBM 的部门负责人有这样的口头禅:在投入任何工作之前手动完成一小时的工作。
查看您的数据可以帮助您思考良好的启发式方法、模型和重构产品的方法。如果您按频率对数据集中的示例进行排名,您甚至可以快速识别和标记 80% 的用例。
例如,在 Jawbone,人们输入“短语”来记录他们的膳食内容。到我们手工标记前 100 个时,我们已经涵盖了 80% 的短语,并且对我们必须处理的主要问题有很强的想法,例如各种文本编码和语言。
最后一道防线是拥有一支注重结果的多元化员工队伍。这将使您能够捕捉到模型表现出歧视行为的实例,例如将您的朋友标记为大猩猩,或者通过其智能的“去年这个时候”回顾来展示过去痛苦的经历而变得麻木不仁。
作为我们已经看到,构建 ML 驱动的应用程序始于判断可行性和选择方法。大多数情况下,选择监督方法是最简单的入门方法。其中,分类、知识提取、目录组织或生成模型是实践中最常见的范例。
在选择一种方法时,您应该确定访问强标记或弱标记数据或任何数据的难易程度。然后,您应该通过定义产品目标并选择最能实现该目标的建模方法来比较潜在的模型和数据集。
我们为 ML Editor 说明了这些步骤,选择从简单的启发式方法和基于分类的方法开始。最后,我们介绍了 Monica Rogati 等领导者如何应用这些实践成功地将 ML 模型交付给用户。
现在我们已经选择了初始方法,现在是定义成功指标并制定行动计划以取得定期进展的时候了。这将涉及设置最低性能要求,深入研究可用的建模和数据资源,以及构建一个简单的原型。