AutoML 模型的数据拆分简介

本页面介绍 Vertex AI 如何使用数据的训练集、验证集和测试集来训练 AutoML 模型,以及控制这三个数据集拆分方式的方法。根据训练数据的数据类型,AutoML 使用数据拆分的方式有所不同。

本页面介绍图片、文本和视频数据的数据拆分。如需了解表格数据的数据拆分,请参阅表格数据的数据拆分

图片

对于图片数据集,AutoML 使用训练集来训练模型,使用验证集来验证模型在训练期间返回的结果。训练完成后,AutoML 使用测试集提供最终评估指标。

文本

对于文本数据集,训练集和验证集用于尝试不同的预处理、架构和超参数选项组合。这些试验会生成经过训练的模型,这些模型随后在验证集上接受质量评估,并用于指导探索更多选项组合。

当后续试验无法继续提升质量时,该版本的模型将被视为是经过训练的性能最佳的最终模型。接下来,Vertex AI 使用在并行微调阶段确定的参数和架构再训练两个模型:

  1. 使用您的训练集和验证集训练的模型。

    Vertex AI 会使用您的测试集在此模型上生成模型评估指标。这是首次在过程中使用测试集。该方法可确保最终评估指标能公正地反映最终训练出的模型在生产环境中的表现。

  2. 使用您的训练集、验证集和测试集训练的模型。

    此模型是您用来请求预测的模型。

视频

对于视频数据集,AutoML 使用训练集来训练模型,然后使用测试集提供最终评估指标。验证集不用于视频数据集。

您可以让 Vertex AI 自动划分您的数据。您的数据会按百分比随机拆分为三个集合。这是拆分数据最简单的方式,并且在大多数情况下效果都很好。

文本 图片 视频
训练 80 80 80
验证 10 10 不适用
测试 10 10 20

如需使用默认数据拆分,请在 Google Cloud 控制台中接受默认值,或者将 API 的 split 字段留空。

如果您想要控制数据集的拆分方式,可以使用以下选项:

您只能选择以上选项之一;您需要在训练模型时进行选择。其中一些选项需要更改训练数据(例如 ml_use 标签)。为数据拆分选项添加数据或标签不要求您必须使用这些选项;在训练模型时,您仍然可以选择其他选项。

非结构化数据的手动拆分

手动拆分也称为“预定义拆分”。

如需使用 ml_use 标签来控制数据拆分,您必须首先为数据设置 ml_use 标签。

设置 ml_use 标签的值

您可以在数据导入时为视觉、视频和文本数据设置 ml_use 标签(按数据项或整个导入文件),或在数据导入之后使用 Google Cloud 控制台进行设置。

在导入时为各个数据项设置 ml_use

您可以通过在 JSON Lines 数据中添加 aiplatform.googleapis.com/ml_use 字段的值或设置 CSV 文件第一列的值来设置每个数据项的 ml_use 标签。如需了解详情,请参阅相关数据类型的准备数据部分。

如果数据中有重复数据项(即相同的视频、图片或文本片段在导入文件中多次出现),Vertex AI 会使用遇到的第一个数据项的 ml_use 值,并忽略任何后续 ml_use 值。第一个遇到的项不一定是最靠近上传文件开头的项。

为整个上传文件设置 ml_use

如果您的数据可以按 ml_use 值归类为不同的上传文件,您可以为整个上传文件设置 ml_use 值,具体方法是,在使用 Google Cloud 控制台上传文件时使用每个文件的下拉菜单,或者使用 datasets.import 方法中的 dataItemLabels 映射字段。

如果您为上传文件设置了 ml_use,并且该文件也包含 ml_use 值,则文件中的 ml_use 值优先于文件级的值。

导入后设置 ml_use

上传数据后,您可以在 Google Cloud 控制台中指定或更新特定数据项的 ml_use 值,只需在列表视图中选择一个或多个项并使用指定机器学习用途下拉菜单。

如果您重新上传数据文件,即使 ml_use 值已更改,它也不会更新 ml_use 值。您无法使用 Vertex AI API 在导入后更新 ml_use 值。

使用 ml_use 标签

在训练模型时,您可以在 Google Cloud 控制台中将数据拆分指定为手动(高级)。如果您使用 Vertex AI API 进行训练,请使用 FilterSplit 对象,为训练过滤器指定 labels.aiplatform.googleapis.com/ml_use=training,为验证过滤器指定 labels.aiplatform.googleapis.com/ml_use=validation,以及为测试过滤器指定 labels.aiplatform.googleapis.com/ml_use=test。例如:

model = job.run(
dataset=dataset,
model_display_name=_name,
training_filter_split="labels.aiplatform.googleapis.com/ml_use=training",
validation_filter_split="labels.aiplatform.googleapis.com/ml_use=validation",
test_filter_split="labels.aiplatform.googleapis.com/ml_use=test")

具有 ml_use 值的所有数据项会被分配给指定的数据集。未设置 ml_use 的数据项会从训练过程中排除。

数据过滤条件拆分

您可以通过在 Vertex AI API 中使用 FilterSplit 对象来使用其他标签(除 ml-use 外)和其他字段来拆分数据。例如,您可以将 trainingFilter 设置为 labels.flower=rose,将 validationFilter 设置为 labels.flower=daisy,并将 testFilter 设置为 labels.flower=dahlia。此设置会使标记为 rose 的所有数据添加到训练集,标记为 daisy 的所有数据添加到验证集,标记为 dahlia 的所有数据添加到测试集。

如果您对多个字段进行过滤,那么一个数据项可能匹配多个过滤条件。在这种情况下,训练集优先,其次是验证集,最后是测试集。换句话说,只有在数据项匹配测试集的过滤条件且不匹配训练集和验证集的过滤条件时,该数据项才会放入测试集中。如果一个数据项不匹配任何集合的过滤条件,则会从训练中排除。

请勿将与模型预测内容相关的数据拆分类别用于数据拆分;每个数据集必须反映模型用于预测的数据的范围。(例如,不应为要按花卉类型对图片进行分类的模型使用上文所述的过滤条件。)

如果您不想让过滤条件匹配任何数据项,请将其设置为“-”(减号)。

数学拆分

数学拆分也称为“分数拆分”。

默认情况下,系统会根据数据类型的默认百分比将数据随机拆分为各个数据集。您可以将百分比更改为总和为 100 的任意值(对于 Vertex AI API,使用总和为 1.0 的分数)。

如需更改百分比(分数),您可以使用 FractionSplit 对象来定义分数。对于图片、文本和视频数据类型,您还可以在训练模型时使用 Google Cloud 控制台更新拆分百分比。