Vertex AI 托管数据集制作指南
Google 的 Vertex AI 是一个基于 Google Cloud 的平台,企业家、开发者和 AI 研究人员可以使用它来管理他们的 AI 项目。我们在之前的文章“Google Vertex AI:加速 AI 开发及更多”中详细讨论了整个 Vertex AI 生态系统的架构。
本文将讨论 Vertex AI 中的托管 ML 数据集以及如何使用它们来创建生成式 AI 应用程序。
1、什么是托管数据集?
托管数据集是在 Vertex AI 框架内工作的数据集。你需要它们进行 AutoML 训练(和 Gemini 训练),但不需要它们进行自定义模型。
但是,通过提供多种功能,管理数据库可以减少你在 Vertex 生态系统中的工作量。托管数据库的好处是:
- 你可以从集中位置管理数据集。
- 你可以轻松创建标签和多个注释集。
- 你可以创建人工标记任务。
- 你可以根据 AI 模型跟踪此数据库的沿袭以进行迭代和训练。
- 你可以通过使用同一数据集训练多个模型来比较 AI 模型性能。
- 你可以生成统计数据,
- Vertex 允许你将数据集拆分为训练、测试和验证数据。
这些功能允许你使用想要的任何数据集在 Vertex AI 上以本地方式端到端运行你的 AI 项目。你还可以使用 Google 提供的数据集来训练你的模型并检查其性能。
但是,你可以访问的数据库将取决于数据集的服务器位置。由于训练和迭代的速度取决于你与所选服务器之间的物理距离,因此建议你选择距离项目所需的模型和训练数据集最近的位置。
现在,让我们来谈谈如何创建数据集。
如何为 Vertex AI 准备数据集?
可以使用 Google Cloud Platform (GCP) 或 Google Vertex API 创建 Vertex AI 的托管数据集。你的流程将根据使用的数据类型和要执行的操作而有所不同。
对于你导入的每个数据集,都需要一个结构化的 JSON 或 CSV 文件,将数据放入结构中并允许标注。
2、制作用于分类的图像数据集
分类任务是自动标记图像和识别特征的任务。例如,分类任务可能是找到照片中描绘的花朵类型。让我们来谈谈训练这种模型所需的数据。
2.1 支持的图像格式
你可以使用 Vertex 训练单标签和多标签分类模型。两种类型的模型都接受以下类型的图像作为输入:
- PNG
- JPEG
- GIF
- BMP
- ICO
输出图像将遵循相同的文件格式,但如果需要,这些模型也可以训练为输出 TIFF 和 WEBP 文件。
注意:另外,请记住你的文件需要进行 Base64 编码。
2.2 准备数据
现在,我们将准备用于单标签分类的图像。你需要遵循如下所示的 JSON 格式:
{
"imageGcsUri": "gs://bucket/filename.ext",
"classificationAnnotation": {
"displayName": "LABEL",
"annotationResourceLabels": {
"aiplatform.googleapis.com/annotation_set_name": "displayName",
"env": "prod"
}
},
"dataItemResourceLabels": {
"aiplatform.googleapis.com/ml_use": "training/test/validation"
}
}
这里,
- imageGCsUrl — 指定图像的位置
- commentResourceLabels — 用于注释输入数据。系统只保留
"aiplatform.googleapis.com/annotation_set_name":"isplayName"
- dataitemResourceLabels — 用于指定要上传图像的元数据。系统保留
"aiplatform.googleapis.com/ml_use":"training/test/validation"
为了说明,如果我们在用于 Kommunicate 的 gs://bucket
中有三个图像,我们可能会生成如下 JSON 格式:
此外,你可以使用 label_type
自定义键值对对你添加到图像的多个标签进行分类。
2.3 指南
现在,你需要遵循这些数据集的一些指南:
- Vertex 针对真实世界图像进行了优化。
- 你的训练数据决定了输出,因此图像应该接近。例如,如果你想分析低质量、模糊的照片,必须在类似的图像上训练你的模型。
- Vertex AI 的预测能力有限,因此如果人类无法在 1-2 秒内对图像进行分类,Vertex AI 也无法做到。
- 建议你至少使用 1000 张图像进行训练。
- 最好将出现频率最高的标签的图像保留在 100 倍于原始图像的数量
- 标有最不常见标签的照片。
None_of_the_above
分类器可以帮助模型更好地运行。
基于图像的 ML 模型的另一个流行业务用例是对象检测,接下来让我们讨论一下。
3、制作用于对象检测的图像数据集
在对象检测模型中,模型会尝试在照片中找到特定对象。这对于在图像中查找特定图案或对象很有用。例如,你可以使用它在街头摄影数据集中查找品牌徽标。
让我们讨论如何为这些任务准备数据集。
3.1 支持的图像格式
Vertex AI 支持以下用于对象检测和识别的图像格式:
- PNG
- JPEG
- GIF
- BMP
- ICO
3.2 输出格式
经过训练的模型通常以与训练数据相同的格式输出图像。但是,Vertex AI 也可以输出:
- TIFF
- WEBP
3.3 准备用于对象识别的图像
Vertex AI 使用特定的 JSON 格式进行对象识别任务。以下是示例:
{
"imageGcsUri": "gs://bucket/filename.ext", # Location of the image
"objectAnnotations": [
{
"boundingBox": {
"normalizedVertices": [
{ "x": 0.1, "y": 0.2 },
{ "x": 0.3, "y": 0.2 },
{ "x": 0.3, "y": 0.4 },
{ "x": 0.1, "y": 0.4 }
]
},
"displayName": "LABEL", # Label associated with the object
"annotationResourceLabels": {
"aiplatform.googleapis.com/annotation_set_name": "displayName", # Annotation set name
"env": "prod" # Optional custom key-value pair (e.g., environment)
}
}
],
"dataItemResourceLabels": {
"aiplatform.googleapis.com/ml_use": "training/test/validation" # Intended use of the data item
}
}
在此示例中,JSON 字段表示:
- imageGcsUri:指定图像文件的 Google Cloud Storage URI
- objectAnnotations:此数组包含表示图像中检测到的对象的对象
- boundingBox:此对象定义对象周围的边界框
- normalizedVertices:此数组以规范化坐标(0 到 1)指定边界框顶点的坐标
- displayName:此键保存与检测到的对象关联的标签
- annotationResourceLabels:此对象提供有关注释的其他元数据
- aiplatform.googleapis.com/annotation_set_name:此键引用现有注释集,其中相关注释分组在一起。将“displayName”替换为实际的集合名称
- env(可选):在此处添加自定义键值对以获取更多信息(例如环境)
- dataItemResourceLabels:此对象提供有关数据项本身的元数据
- aiplatform.googleapis.com/ml_use:此键指定数据项的预期用途(“训练”、“测试”、“验证”)
例如,对于我们 Google Cloud 存储桶中名为 Kommunicate_1.jpeg
的图像,我们将编写一个 JSON:
3.4 数据集指南
图像大小:
- 最佳范围:图像大小介于 512×512 和 1024×1024 像素之间。
- 缩放:建议的最大值是 1024×1024。如果图像明显较大,请考虑缩小它们,同时保持纵横比。
边界框大小:
- 准确度:确保边界框紧密贴合物体。
- 避免重叠:尽量减少边界框之间的重叠。
- 尺寸变化:包括各种尺寸的边界框。
- 规范化:对边界框使用规范化坐标(0 到 1)。
其他注意事项:
- 纵横比:保持图像的原始纵横比。
- 数据增强:尝试裁剪、填充和调整大小等技术。
- 硬件限制:设置图像和边界框大小时考虑硬件资源。
数据集质量和多样性:
- 图像质量:使用具有不同背景、光照条件和对象大小的高质量图像。
- 标签准确性:确保准确一致的标签。
- 数据量:争取足够大的数据集。
- 数据平衡:保持平衡的数据集。
- 注释一致性:确保注释类型和属性的一致性。
标注集管理:
- 创建集:根据对象类别或属性将标注组织成集。
- 分配标注:将标注与适当的集关联。
元数据:
- 包括元数据:添加相关元数据,如对象类型、属性或时间戳。
数据格式:
- JSON 格式:使用提供的 JSON 格式进行对象检测和分类任务。
- 模式定义:为您的数据集定义一个明确的模式。
为两个基于图像的任务准备指定格式的数据集后,你就可以开始在任务中使用它们了。接下来是表格数据集。
4、制作用于分类和回归的表格数据集
此上下文的分类任务是预测分类结果的任务。因此,如果你想预测客户是否会流失,可以使用这些模型。
回归任务用于预测连续数值数据,因此如果你想将房价与数据关联起来时。
重要提示:对于表格数据,Vertex 会将 80% 的数据随机拆分为训练、10% 用于验证和 10% 用于测试用例。如果你想要手动拆分或按时间顺序映射,则需要添加单独的拆分列。
除此之外,你的数据集必须具有以下内容。
4.1 数据集指南
- 最大尺寸:数据集必须为 100 GB 或更小
- 最小列数:2 列(包括目标和至少一个特征)
- 最大列数:1,000 列(包括特征和非特征)
- 目标列:指定 Vertex AI 可用于将训练数据与所需结果相关联的目标列,目标列不能包含缺失值
- 你可以添加两种数据类型:分类或数值。
- 分类:最少两个不同值,最多 500 个不同值
- 数值:无限制
- 列名:允许数字、字符和下划线。但是,列名不能以下划线开头。
- 行数:最小1,000 行,最大100,000,000 行
- 首选宽数据格式:每行代表一个训练数据项。
- 除非你为数据添加特定权重,否则所有数据都将被视为相等。如果你想强调某个特定子集,请在权重列中从范围 [0,10000] 中分配一个相对更重要的数字。
4.2 数据源
你可以从 BigQuery 或 CSV 导入表格数据:
- 对于 BigQuery,你需要一个位置 ID,格式如下:
bq://<project_id>.<dataset_id>.<table_id>
- 对于 CSV,每个文件应小于 10GB,但如果总文件大小小于 100GB,您可以上传多个文件。
此外,表格数据集也用于预测任务。让我们继续介绍它们。
5、制作用于预测的表格数据集
预测任务尝试根据历史数据预测未来的数值。这些任务具有强制性的时间序列组件。
重要提示:与分类和回归表格数据一样,你的数据将被随机拆分为训练、验证和测试子集。根据您的训练要求,您可以手动或按时间顺序拆分。
此处所需数据的基本准则如下。
5.1 数据集准则
- 数据集大小:最大 100GB。
- 列数:最少 3 列(目标、时间、时间序列 ID),最多 100 列。考虑使用 3 列以上以获得更好的性能。
- 目标列:必填。你不能添加空值。
- 时间列:必填。你需要为每一行添加一个值,并且建议数据粒度保持一致的周期性。
- 时间序列标识符列:为每一行添加一个值,以标识观察结果属于哪个时间序列。
- 列名:使用字母数字字符和下划线;不能以下划线开头。
- 行数:最少 1,000 行,最多 100,000,000 行。考虑使用 1,000 行以上以获得更好的性能。
- 数据格式:使用窄(长)数据格式,其中每行代表时间序列 ID 及其数据的特定时间点。
- 行间间隔:确保行间间隔一致,以实现一致的数据粒度。
- 时间序列长度:每个时间序列最多 3,000 个时间步长。
5.2 数据源
你可以从 BigQuery 或 CSV 导入表格数据。
- 对于 BigQuery,你需要一个位置 ID,格式如下:
bq://<project_id>.<dataset_id>.<table_id>
- 对于 CSV,每个文件应小于 10GB,但如果总数小于 100 GB,你可以上传多个文件。
如果你想要处理基于文本的任务,如情绪分析或 NLP,请转到下一部分。
准备文本数据集。你可以使用 Vertex 中的 Gemini AI 模型来处理文本数据集。用于文本提取、分类和实体识别的 AutoML 将从 2024 年 9 月 15 日起停用。
现在,让我们看看如何为各种任务准备数据集。
6、制作用于分类的文本数据集
分类模型尝试将文档分类为不同的类别。这可用于将书籍分类为流派,将不同的研究论文分类为主题等。让我们来谈谈具体的数据要求。
数据准则
- 最少文档数:20
- 最多文档数:1,000,000
- 唯一标签:最少 2 个,最多 5000 个
- 每个标签的文档数:每个标签至少 10 个文档
- 数据格式:内联或引用 Cloud Storage 存储桶中的 TXT 文件
最佳实践:
- 数据变化:使用具有不同长度、作者、措辞和样式的多样化训练数据。
- 人工分类能力:确保文档可由人工轻松分类。
- 足够的示例:为每个标签提供尽可能多的训练文档。
- 标签平衡:争取使最常见标签的文档数比标准最低的标签多 100 倍。
- 域外标签:考虑为不符合定义标签的文档添加“None_of_the_above”标签。
- 过滤:过滤掉与您的标签不匹配的文档,以避免预测出现偏差。
多标签分类:
- 多标签:文档可以有一个或多个标签。
- 数据要求:遵循与单标签相同的准则
要准备数据集,请按照此 .yaml 文件中的说明进行操作。
JSON 模式的示例如下:
准备好此格式的数据集后,你可以将文本用于分类任务。我们将尝试从文本中提取一些特征以用于下一组任务。
7、制作用于实体提取的文本数据集
实体提取模型经过训练,可以识别并从文本中提取特定实体。例如,你可以使用它来收集潜在客户并从聊天对话中查找潜在客户的姓名。
以下是数据要求。
数据指南:
- 最少文档:50
- 最多文档:100,000
- 唯一标签:最少 1 个,最多 100 个
- 标签长度:2 到 30 个字符之间
- 每个标签的注释:每个标签至少出现 200 次
- 标注位置:考虑结构化文档(例如发票、合同)的空间位置。
数据格式:
- JSON 行:直接在 JSON 行文件中包含注释。
- 云存储:引用云存储存储桶中的 TXT 文件以获取文档。
最佳实践:
- 标注所有出现:标注要提取的每个实体实例。
- 数据变化:使用具有不同长度、作者、措辞和样式的多样化训练数据。
- 这些模型无法进行人类无法进行的实体提取。因此,任何人类无法分类的内容都无法通过模型进行分类。
其他注意事项:
- 结构化文档:结构化文档将允许您使用实体的位置进行更好的提取。
- 数据质量:强烈建议您拥有高质量的注释和干净的数据。
- 标签一致性:在整个数据集中保持一致的标签实践。
架构:
优先考虑 JSON 文件会更好,因为用于基于文本的任务的 AutoML 将于 2024 年 9 月停止使用。Gemini 将取而代之,只允许使用 JSON 文件执行任务
8、制作用于情感分析的文本数据集
情感分析任务试图检查文本以了解其背后的情感。这对于客户服务聊天机器人非常重要,情感分析可以帮助企业了解客户对其聊天机器人的感受。
数据要求如下:
- 最少文档数:10
- 最多文档数:100,000
- 情绪值:你的情绪值应为从 0 到所选最大值的整数(例如,可以使用范围 [0,1,2],其中 0 为负,1 为中性,2 为正)
- 每个情绪的文档数:为每个情绪值添加至少十个文档
- 情绪分数一致性:你的情绪必须是从 0 开始的连续整数。
- 数据格式:你可以添加内联文本或使用你的 Google Cloud Storage 参考文本文件。
最佳实践:
- 每个情绪的文档数:每个情绪值至少有 100 个文档。
- 平衡数据集:为避免偏见,请为每个情绪分数使用平衡数量的文档。
- 数据变化:包括具有不同长度、作者和样式的多样化文本数据。
- 人类可分类性:如果人类无法识别您提供的用于预测的文档中的情绪,那么机器学习算法也无法做到这一点。
架构:
- 对于 JSON 文件 — 使用此架构。
- 对于 CSV 文件 — 使用以下列。
[ml_use]
列是可选的
[ml_use],gcs_file_uri|"inline_text",sentiment,sentimentMax
例如,如果我们想通过 JSON 文件导入两种类型的文本(一个内联和一个 .txt 文档),我们使用以下格式:
重要提示:对 Text AutoML 模型的支持将从 2025 年 9 月开始不再使用,此后只有 Gemini 模型可用于这些任务。不建议使用 CSV 数据,因为 Gemini 模型仅使用结构化 JSON 数据。
9、制作用于动作识别的视频数据集
动作识别机器学习任务尝试识别视频中的特定人类动作。因此,这些算法在一个过程中识别和分类人类行为。
这对于银行的安全计划可能很重要。
数据格式:
- 支持的格式:.MOV、.MPEG4、.MP4、.AVI
- 推荐格式:最好使用 MPEG4 或 .MP4 以实现浏览器兼容性。
文件大小:
- 最大:50 GB(最多 3 小时)。
- 时间戳格式错误:避免使用时间戳格式错误或为空的文件。
标签限制:
- 最大标签数:每个数据集 1,000 个。
动作识别:
- 标记所有动作:使用 VAR 标签控制台标记视频中的所有动作。
最佳实践:
- 数据相关性:使用与目标数据类似的训练数据(例如,安全摄像头用例的模糊视频)。
- 人类可分类性:确保人类可以在 1-2 秒内分配标签。
- 标签平衡:争取最常见标签的视频数量是最少见标签的 100 倍。
- 动作识别:每个标签至少使用 100 个训练视频帧,并考虑高分辨率的图像质量限制。
架构:
- JSON — 使用以下 JSONL 文件 作为你的架构。
例如:
- CSV — 你的 CSV 文件需要遵循以下格式。
VIDEO_URI, TIME_SEGMENT_START, TIME_SEGMENT_END, LABEL, ANNOTATION_SEGMENT_START, ANNOTATION_SEGMENT_END
10、制作用于分类的视频数据集
视频的分类任务尝试根据训练数据标记视频。为了实现粒度,建议你创建一个全局标签并为视频的每个帧创建一个标签。
数据格式:
- 支持的格式:.MOV、.MPEG4、.MP4、.AVI
- 推荐的格式:MPEG4 或 .MP4 以实现浏览器兼容性
文件大小:
- 最大:50 GB(最多 3 小时)
- 格式错误的时间戳:避免使用格式错误或为空的时间戳的文件。
标签限制:
- 最大标签:每个数据集 1,000 个
ML_USE 标签:
- 可选:为训练/测试分割分配“ML_USE”标签。
视频分类:
- 添加类别:添加至少两个不同的类别(例如,“新闻”和“MTV”)。
- 域外标签:对于未分类的视频,请考虑使用“以上均无”。
最佳实践:
- 数据相关性:使用与目标数据类似的训练数据(例如,安全摄像头用例的模糊视频)。
- 人类可分类性:确保人类可以在 1-2 秒内分配标签。
- 标签平衡:最常见标签的视频数量应比最不常见标签多 100 倍。
- 训练视频:每个标签至少使用 100 个训练视频(高级模型为 50 个)。
- 多个标签:当你在视频中使用多个标签时,每个标签需要更多示例,并且解释可能具有挑战性。
架构:
- JSON — 遵循以下架构。例如:
- CSV — 对于 CSV,请使用以下格式:
[ML_USE,]VIDEO_URI,LABEL,START,END
11、制作用于对象跟踪的视频数据集
对象跟踪可让你通过视频帧跟踪对象。这些任务允许你查找和跟踪视频中的特定对象。
数据格式:
- 支持的格式:.MOV、.MPEG4、.MP4、.AVI
- 推荐格式:MPEG4 或 .MP4 以实现浏览器兼容性
文件大小:
- 最大:50 GB(最多 3 小时)
- 格式错误的时间戳:避免使用格式错误或为空的时间戳的文件。
标签限制:
- 每个数据集的最大标签数:1,000
- 最大标记帧数:150,000
- 最大边界框数:1,000,000
- 每个标注集的最小标签数:1,000
ML_USE 标签:
- 可选:为训练/测试分割分配“ML_USE”标签。
最佳实践:
- 数据相关性:使用与目标数据类似的训练数据(例如,安全摄像头用例的模糊视频)。
- 人工分类能力:确保人工可以在 1-2 秒内分配标签。
- 标签平衡:最常见标签的视频数量应比最不常见标签多 100 倍。
- 边界框大小:最小边界框大小为 10 像素 x 10 像素。
- 标签频率:每个唯一标签应出现在至少三个不同的视频帧中,并至少有十个注释。
- 视频分辨率:考虑高分辨率(超过 1024 x 1024 像素)的图像质量限制。
架构:
- JSONL:可以使用以下架构文件。例如:
- CSV:对于 CSV,请使用以下格式:
[ML_USE,] VIDEO_URI, LABEL, [INSTANCE_ID], TIME_OFFSET, BOUNDING_BOX
12、如何创建托管数据集?
要在 Vertex AI 中创建数据集,请按照以下步骤操作:
- 在 Google Cloud Console 的 Vertex AI 部分中,转到数据集页面。
- 单击创建。
- 根据你的数据选择选项卡 — 图像/文本/视频/表格。
- 选择任务。
- 选择具有你要使用的资源的区域。
- 单击“创建”以创建一个空数据集,然后转到“数据导入”。
- 选择要从哪里导入数据,你可以使用计算机中的导入文件(你创建的 JSON 和 CSV 文件),从云存储中选择一个导入文件,或者从计算机中选择所有文件。
- 单击“继续”。
这将启动数据的上传过程,并创建可用于项目的托管数据集。
13、结束语
在本文中,我们介绍了可以在 Vertex AI 中创建的不同类型的任务和数据集。请记住,这些数据集可用于多个模型进行比较和特定的训练过程。
根据你的目标,你必须自定义数据集和训练数据。我们希望你能通过 Google 的 Vertex AI 模型获得出色的结果!
原文链接:Managing Machine Learning Datasets with Vertex AI: A Complete Guide
汇智网翻译整理,转载请标明出处