AutoML Natural Language 新手指南

简介

想象一下,您的公司在网站上设置了一张联系表单。公司每天都会通过该表单收到大量消息,其中很多建议在某方面都是具有可操作性的,但它们全部一起涌入,就很容易造成处理不及时,因为不同的员工处理不同的消息类型。如果能有一个自动化系统对它们进行分类,让处理人员看到由自己负责的评论,那就太好了。

已分类图片

您需要利用某种系统来查看评论,然后确定它们是投诉还是对过去服务的赞扬,是想要了解您的业务、安排预约还是想要建立关系。

为什么说机器学习 (ML) 是解决这类问题的最好工具?

传统编程要求程序员指定计算机要逐步完成的指令。但这种方法很快就变得不可行了。客户评论使用的词汇和结构广泛多样,以至于无法通过一组简单的规则来捕获。如果您尝试构建手动过滤器,很快就会发现无法对绝大多数客户评论进行分类。您需要一个可以泛化到各种评论的系统。在一系列特定规则必定呈指数级扩展的场景中,您需要一个可以从示例中学习的系统。幸运的是,机器学习系统可以很好地解决此问题。

Cloud Natural Language API 还是 AutoML Natural Language 适合我?

Natural Language API 可以识别文本中的语法、实体和情感,并将文本划分到一组预定义的类别中。如果您的文本中包含您要分类的新闻报道或其他内容,或者您希望了解样本的情感,那么 Natural Language API 值得尝试。但是,Natural Language API 提供的分类方案要么基于情感,要么基于垂直主题,如果您的文本样本并不能与之完美契合,同时您想要使用自己的标签,则可以尝试使用自定义敏感类别来看看是否能满足您的需求。

Natural Language API 与 AutoML Natural Language 的比较

试用 Natural Language API 开始使用 AutoML

AutoML Natural Language 中的机器学习涉及哪些内容?

为了实现期望的结果,机器学习需要使用数据来训练算法。算法和训练方法的具体细节因用例而异。机器学习有许多不同的子类别,所有子类别均用于解决不同的问题,并具有不同的限制条件。借助 AutoML Natural Language,您可以执行监管学习,这需要训练机器根据已加标签的数据来识别模式。您可以使用监督式学习训练自定义模型,来识别文本中您关注的内容。

数据准备

如需使用 AutoML Natural Language 训练自定义模型,您需要提供您想要分类的各种文本项的加标签样本(输入),以及您希望机器学习系统预测的类别或标签(输出)。

评估您的使用场景

在整合数据集时,应始终以使用场景为基础。您可以从以下问题入手:

  • 您想要实现什么结果?
  • 为了实现这个结果,您需要识别哪些种类的类别?
  • 人类能否识别这些类别?尽管 AutoML Natural Language 每次处理的类别数量都多于人类可以记住和分配的数量,但如果人类无法识别某一具体类别,那么 AutoML Natural Language 也很难识别出来。
  • 哪些种类的样本最能反映您的系统要分类的数据类型和范围?

支持 Google 机器学习产品的核心原则是以人为本的机器学习,这种方法强调负责任的 AI 做法(包括公平性)。机器学习中的公平性目标旨在了解和防止以不公正或有偏见的方式对待不同种族、收入、性取向、宗教、性别以及带有历史上与歧视和边缘化相关的其他特征的人群的倾向(当其无论何时何地表现在算法系统或算法辅助决策中时)。如需了解详情,请参阅包容性机器学习指南;如需查看有关“公平意识”的说明 ,请参阅下述准则。我们建议您在阅读数据集整合准则的同时,考虑与您的使用场景相关的机器学习的公平性。

寻找数据

确定了所需的数据后,您需要找到一种方法来获取数据。首先,您可以考虑使用组织收集的所有数据。 此时您可能会发现,自己已经在收集训练模型所需的数据了。 如果没有收集到所需的数据,您可以手动获取或将这项任务外包给第三方提供商。

在每个类别中添加足够的有标签样本

AutoML Natural Language 训练所需的最低要求是每个类别/标签 10 个文本样本。 每个标签的高质量样本数量越多,成功识别该标签的可能性越大;一般而言,您为训练过程提供的加标签数据越多,您的模型就越出众。所需的样本数量也会随着您想要预测的数据的一致性以及您的目标准确度而变化。您可以使用更少的示例来获得一致的数据集,或者达到 80%的准确度,而不是 97%的准确度。每个标签使用 50 个示例训练模型并评估结果。添加更多示例并进行重新培训,直到达到准确性目标为止,每个标签可能需要数百甚至数千个示例。

在所有类别中平均分配样本

每个类别都获取数量大致相似的训练样本非常重要。即使某一个标签有大量的数据,最好还是为每个标签分配数量大致相等的数据。为了说明原因,我们假设您用于构建模型的客户评论中有 80% 都是预估请求。由于标签的分配如此不均衡,您的模型很可能会发现,总是将客户评论预测为预估请求非常安全,而尝试预测它是一个不那么常见的标签则会有风险。这就像是编写一份单选题试卷,其中几乎所有正确答案都是“C”;在这种情况下,聪明的应试者很快就会发现,每次都可以回答“C”,甚至都不需要看题。

因此,您有可能无法为每个标签找到数量大致相同的样本。某些类别的高质量、无偏见样本可能更难获取。在这些情况下,样本数量最少的标签所具有的样本数应至少达到样本数最多的标签的 10%。因此,如果最大的标签有 10000 个样本,则最小的标签应至少有 1000 个样本。

捕获问题空间中的各种变化

出于类似的原因,请尝试让数据能够捕获问题空间的变化和多样性。当您提供一组范围更广的样本时,模型将能更好地泛化到新数据。假设您正尝试将有关消费电子产品的文章分入不同的主题。您提供的品牌名称和技术规格越多,模型就越容易找出文章应该归入的主题,即使该文章是介绍根本没有收入训练集的品牌也是如此。为了进一步提高模型性能,您还可以考虑为不符合任何已定义标签的文档添加“none_of_the_above”标签。

将数据与模型的预期输出相匹配

文本与输出

寻找的文本样本应与您计划进行预测的文本样本类似。如果您正在尝试对关于玻璃吹制术的社交媒体帖子进行分类,那么在玻璃吹制术信息网站上训练的模型可能无法有出色的表现,因为两者的词汇和风格可能会截然不同。理想情况下,您的训练样本是从您计划使用模型进行分类的数据集中提取的真实数据。

考虑 AutoML Natural Language 在创建自定义模型时如何使用您的数据集

数据集包含训练集、验证集和测试集。如果您未指定分组(如准备数据中所述),那么 AutoML Natural Language 会自动将内容文档的 80% 用于训练,10% 用于验证,另外 10% 用于测试。

培训、验证和测试集

训练集

您的绝大部分数据都应该划分到训练集中。这是您的模型在训练期间“看到”的数据:它用于学习模型的参数,即神经网络节点之间连接的权重。

验证集

验证集(有时也称为“开发集”)也用于训练过程。模型学习框架在训练过程的每次迭代期间吸纳了训练数据之后,会根据模型在验证集上的表现来调整模型的超参数,这些超参数是指定模型结构的变量。如果您尝试使用训练集来调整超参数,则可能会导致模型过度关注训练数据,因而很难通用于并非精确匹配的样本。使用在一定程度上的新数据集微调模型结构,意味着您的模型将会有更好的泛化效果。

测试集

测试集不参与训练过程。在模型完成训练后,AutoML Natural Language 会利用测试集对模型提出挑战。通过模型在测试集上的表现,您可以了解模型在使用真实数据时会有怎样的表现。

手动拆分

您可以自行拆分数据集。如果您想要对流程施加更多控制,或者您确定要在模型训练生命周期的某个环节添加特定的样本,您可以进行手动拆分。

 

准备要导入的数据

决定好手动拆分或自动拆分数据后,您可以选择以下三种方法之一在 AutoML Natural Language 中添加数据:

  • 您可以通过与标签对应的文件夹中存储并排序的文本样本导入数据。
  • 您可以通过内嵌的标签以 CSV 格式从您的计算机或 Cloud Storage 中导入数据,如准备训练数据中所指定。如果您想手动拆分数据集,则必须选择此选项并相应地设置 CSV 的格式。
  • 如果您的数据尚未添加标签,您可以上传不带标签的文本样本,并使用 AutoML Natural Language 界面将标签分配给各个样本。

评估

模型训练完成后,您将收到模型性能总结。 如需查看详细分析,请按一下evaluateevaluate

在评估模型前,需要注意哪些事项?

调试模型主要是调试数据,而非模型本身。在推送到生产环境之前和之后,如果您的模型在您评估其性能时开始以非预期方式运行,您应返回并检查数据,看看有哪些方面可以改进。

我可以在 AutoML Natural Language 中执行哪些种类的分析?

在 AutoML Natural Language 的评估部分,您可以根据自定义模型基于测试样本的输出以及常见的机器学习指标来评估其性能。本节将介绍以下每个概念的含义:

  • 模型输出
  • 分数阈值
  • 真正例、真负例、假正例和假负例
  • 精确率和召回率
  • 精确率/召回率曲线
  • 平均精确率

如何解读模型的输出?

AutoML Natural Language 会从您的测试数据中提取样本,向模型提出全新的挑战。模型会针对每个样本输出一系列数字,用于表示每个标签与该样本相关的程度。如果该数字较大,表示关于该标签应该应用于该文档的模型置信度较高。

什么是分数阈值?

借助分数阈值,AutoML Natural Language 可将概率转换为二进制的“开”/“关”值。分数阈值是指若要将某一类别分配给某一测试项,模型必须具有的置信度水平。界面中的分数阈值滑块是一种直观的工具,用于测试不同阈值对数据集的影响。在上面的示例中,如果我们将所有类别的分数阈值设置为 0.8,则会分配标签“Great Service”(优质服务)和“Suggestion”(建议),但不会分配“Info Request”(信息请求)。如果分数阈值很低,您的模型需要分类的文本项就会较多,但在该过程中对更多文本项的分类就有可能出错。如果分数阈值很高,您的模型需要分类的文本项会较少,但是将文本项错误分类的风险会较低。您可以在界面中调整每个类别的阈值以进行实验。但是,在生产环境中使用模型时,您必须实施您认为最佳的阈值。

置信度阈值

什么是真正例、真负例、假正例和假负例?

应用分数阈值后,模型所做的预测可分为以下四类。

置信度类别说明

您可以使用这些类别来计算精确率和召回率,这两个指标可帮助我们衡量模型的效果。

什么是精确率和召回率?

精确率和召回率有助于我们了解模型捕获信息的精准度以及遗漏的信息量。通过精确率我们可以了解到,在分配了某标签的所有测试样本中,实际有多少样本应该分类到该标签中。通过召回率指标可以了解到,在本应分配该标签的所有测试样本中,有多少样本实际分配了该标签。

我应该针对精确率还是召回率进行优化?

根据您的用例,您可能需要针对精确率或召回率进行优化。 让我们通过以下两个用例来看看如何做出这个决定。

用例:紧急文档

假设您要创建一个可以优先处理紧急文档的系统。

在该用例中,如果一个并不紧急的文档被系统标记为紧急文档,这种情况即为假正例。用户可以将其作为非紧急文档忽略并继续后续步骤。

在该用例中,如果一个紧急文档并未被系统标记为紧急文档,这种情况即为假负例。这可能会引起问题!

在这种情况下,您可能需要针对召回率进行优化。该指标衡量所有的预测中遗漏了多少信息。高召回率的模型可能会为略微相关的样本添加标签,这对于类别缺少训练数据的情况非常有用。

用例:垃圾邮件过滤

假设您要创建一个自动过滤垃圾邮件信息的系统。

在该用例中,如果没有收到垃圾邮件,但您在收件箱中看到这封邮件,这种情况即为假负例。这通常只是有点儿烦人。

如果一封电子邮件被错误地标记为垃圾邮件而清除出收件箱,即为本用例中的假正例。如果电子邮件至关重要,则用户可能会受到严重影响。

在这种情况下,您可能希望优化精确率。 该指标衡量所进行的所有预测的正确程度。高精确率模型可能仅向最相关的样本分配标签,这对于类别在训练数据中很常见的用例非常有用。

如何使用混淆矩阵?

我们可以使用混淆矩阵比较模型在每个标签上的表现。 在理想模型中,对角线上的所有值都将很高,而所有其他值都将很低。 这表明目标类别都得到了正确识别。如果有其他任何值较高,我们可以由此了解模型如何对测试图片进行了错误分类。

混淆矩阵

如何解读精确率/召回率曲线?

精确率/召回率曲线

通过分数阈值工具,您可以研究所选分数阈值会如何影响您的精确度和召回率。当您拖动分数阈值栏上的滑块时,您可以看到该阈值会将您置于精确率/召回率权衡曲线的什么位置,以及该阈值如何分别影响您的精确率和召回率(对于多类模型,这些图表上的精确率和召回率意味着用于计算精确率和召回率指标的唯一标签是我们返回的标签集中分数最高的标签)。这可以帮助您在假正例和假负例之间找到一个很好的平衡点。

在选择了对于整个模型而言似乎可接受的阈值后,您就可以点击各个标签,并查看该阈值在各个标签的精确率与召回率曲线上处于什么位置。在某些情况下,阈值的位置可能表明针对一些标签进行的很多预测都不正确,而这可能有助于您决定选择针对这些标签自定义的按类阈值。例如,假设您查看了客户评论数据集,并注意到阈值如果设为 0.5,每个评论类型都会有合理的精确度和召回率,但"Suggestion"(建议)除外,这可能是因为该类别过于普通。就该类别而言,您会看到大量的假正例。在这种情况下,当您调用分类模型进行预测时,您可能决定只有"Suggestion"(建议)使用阈值 0.8。

什么是平均精确率?

精确率与召回率曲线下的面积是衡量模型准确率的有用指标。 它衡量模型在所有分数阈值上的表现。 在 AutoML Natural Language 中,此指标称为“平均精确率”。此分数越接近 1.0,您的模型在测试集上的表现越好;如果是随机猜测使用哪个标签的模型,平均精确率约为 0.5。

测试模型

AutoML Natural Language 自动使用 10% 的数据(如果您选择自行拆分数据,则为您选择使用的任何百分比)来测试模型,而“评估”页面会显示模型在该测试数据上的表现。但是,万一您想要对模型进行健全性检查,可以通过几种方法执行此操作。最简单的方法是将文本样本输入“预测”页面上的文本框中,然后查看模型为样本选择的标签。希望这符合您的预期。针对你希望收到的每种评论类型,试着举几个例子。

如果您想在自己的自动化测试中使用模型,“预测”页面还会告诉您如何以编程方式调用模型。