本页面介绍 Vertex AI 如何与 AutoML 模型的不同类型的表格数据搭配使用。
Vertex AI 中的转换简介
模型训练
必须先转换输入表格数据,然后才能用于模型训练。转换表示特定数据特征的函数。
支持以下转换:
如果您的数据源是 Cloud Storage 中的 CSV 文件,则必须使用英文逗号(“,”)作为分隔符。Vertex AI 使用 RFC 4180 CSV 格式。
如果您的数据源是 BigQuery,并且您要执行分类或回归,则可以添加由多个数据原语组成的数据。必须先预处理这些复合数据类型,然后才能应用转换。支持以下复合数据类型:
如果类型值缺失或为 null,则 Vertex AI 会根据您的模型目标和适用于该特征的转换来处理该值。如需了解详情,请参阅如何处理缺失值或 null 值。
预测
用于预测的数据格式必须与用于训练的格式匹配。如需了解详情,请参阅预测的数据格式。
Vertex AI 转换
分类
应用分类转换会导致该特征表示类别中的值。即一个无序分类值。 这些值的差别仅在于名称,没有顺序之分。您可以使用数字来表示分类值,但这些值之间没有数值上的关系。也就是说,分类值 1 并不比分类值 0 更大。
以下是分类值的一些示例:
- 布尔值 -
true
和false
。 - 国家/地区 -
"USA"
、"Canada"
、"China"
等等。 - HTTP 状态代码 -
"200"
、"404"
、"500"
等等。
分类值区分大小写;拼写变体被视为不同的类别(例如,“Color”和“Colour”不会被合并为一类)。
当您通过分类转换训练模型时,Vertex AI 会向特征应用以下数据转换,并使用提供训练的任何信号:
- 分类字符串无任何更改 - 不更改大小写、标点、拼写、时态等。
- 将类别名称转换为字典查找索引,并为每个索引生成嵌入。
- 在训练数据集中的出现次数少于 5 次的类别会被视为“未知”类别。“未知”类别可获得自己的特殊查找索引和生成的嵌入。
分类转换可以应用于 CSV 文件中的 STRING 数据或以下 BigQuery 数据类型:
- INT64
- NUMERIC、BIGNUMERIC
- FLOAT64
- BOOL
- STRING
- DATE
- DATETIME
- TIME
- TIMESTAMP
文本
文本转换使特征可用作自由格式的文本,通常是文本标记。
以下是文本值的一些示例:
"The quick brown fox"
"This restaurant is the best! The food is delicious"
对于预测模型,协变量特征不支持文本转换。
当您通过文本转换训练模型时,Vertex AI 会向特征应用以下数据转换,并使用提供训练的任何信号:
- 文本无任何更改 - 不更改大小写、标点、拼写、时态等。
-
将文本令牌化为字词,并根据字词生成 1-gram 和 2-gram。将每个 n-gram 转换为字典查找索引,并为每个索引生成嵌入。使用平均值将所有元素的嵌入合并到单个嵌入中。
令牌化是基于 Unicode 脚本边界进行的。
- 缺失值可获得自己的查找索引和生成的嵌入。
- 停用词不会受到任何特殊处理,也不会被移除。
文本转换可应用于 CSV 文件中的 STRING 数据或以下 BigQuery 数据类型:
- STRING
- DATETIME
数字
数值转换可将列用作序数或定数。这些数字可以比较。也就是说,两个不同的数字可以小于或大于彼此。
前导空格或尾随空格会被删除。
下表显示了数字转换的所有兼容格式:
格式 | 示例 | 备注 |
数字字符串 | “101”“101.5” | 英文句点字符 (".") 是唯一有效的小数点分隔符。“101,5”和“100,000”不是有效的数字字符串。 |
科学记数法 | “1.12345E+11”“1.12345e+11” | 有关数字字符串十进制分隔符的信息,请参见备注。 |
非数字 | “NAN”“nan”“+NAN” | 忽略大小写。忽略前缀加号(“+”)或减号(“-”)。解释为 NULL 值。 |
无穷大 | “INF”“+inf” | 忽略大小写。忽略前缀加号(“+”)或减号(“-”)。解释为 NULL 值。 |
如果采用数值转换的列中的某个值不符合其中一种格式,则整个行都会被从训练中排除,或者该值被视为 null。选择数值转换时,您可以在这些结果之间进行选择。
当您通过数字转换训练模型时,Vertex AI 会向特征应用以下数据转换,并使用提供训练的任何信号:
- 转换为 float32 的值。
- 值的 z_score。
- 基于分位数的值的存储分区索引。存储分区大小为 100。
- 当值大于或等于 0 时,为 log(value+1)。 否则,系统不会应用此转换,该值会被视为缺失值。
- 当值大于或等于 0 时,为 log(value+1) 的 z_score。否则,系统不会应用此转换,该值会被视为缺失值。
- 一个布尔值,指示值是否为 null。
- 对于训练和预测,不包括包含无效数值输入的行(例如无法解析为 float32 的字符串)。
- 极值/离群值不会受到任何特殊处理。
数值转换可以应用于 CSV 文件中的 STRING 数据或以下 BigQuery 数据类型:
- INT64
- NUMERIC、BIGNUMERIC
- FLOAT64
- STRING
- TIMESTAMP
时间戳
时间戳转换会导致特征被用作时间点,表示为具有时区的民用时间或 Unix 时间戳。只有具有时间戳转换的功能才能用于时间列。
如果未指定民用时间的时区,则默认为世界协调时间 (UTC)。
下表展示了所有兼容的时间戳字符串格式:
格式 | 示例 | 备注 |
---|---|---|
%E4Y-%m-%d |
“2017-01-30” | 有关此格式的说明,请参见 Abseil 文档。 |
%E4Y/%m/%d |
“2017/01/30” | |
%Y/%m/%d %H:%M:%E*S |
“2017/01/30 23:59:58” | |
%d-%m-%E4Y |
“30-11-2018” | |
%d/%m/%E4Y |
“30/11/2018” | |
%d-%B-%E4Y |
“30-November-2018” | |
%Y-%m-%dT%H:%M:%E*S%Ez |
"2019-05-17T23:56:09.05+00:00" | RFC 3339。按以下格式指定时区偏移量 (z ):±HH:MM[:SS[.ffffff]] |
Unix 时间戳字符串(秒) | “1541194447” | 仅适用于 1990 年 1 月 1 日至 2030年 1 月 1 日这一时间范围。 |
Unix 时间戳字符串(毫秒) | “1541194447000” | |
Unix 时间戳字符串(微秒) | “1541194447000000” | |
Unix 时间戳字符串(纳秒) | “1541194447000000000” |
如果采用时间戳转换的列中的某个值不符合其中一种格式,则整个行都会被从训练中排除,或者该值被视为 null。选择时间戳转换时,您可以在这些结果之间进行选择。
在使用时间戳转换训练模型时,Vertex AI 会向特征应用以下数据转换,并使用提供训练的任何信号:
- 应用数值列的转换。
- 确定年、月、日和工作日。将时间戳中的每个值都视为一个分类列。
- 无效数值(例如,超出典型时间戳范围的值或极值)不会受到任何特殊处理,也不会被移除。
- 对于训练和预测,不包括包含无效时间戳输入的行(例如无效的时间戳字符串)。
时间戳转换可以应用于 CSV 文件中的 STRING 数据或以下 BigQuery 数据类型:
- INT64
- STRING
- DATE
- DATETIME
- TIMESTAMP
复合数据类型
有时您需要包含由多个数据基元(如数组或结构体)组成的数据。只有使用 BigQuery 作为数据源时才能使用复合数据类型,并且预测模型不支持复合数据类型。
结构体
结构体可用于表示一组已添加标签的字段。结构体具有一系列字段名称,每个字段名称关联一个数据类型。对于同一列中的所有结构体值,字段列表及其数据类型必须相同。
以下是结构体的一些示例:
- 血压 -
{"timestamp": 1535761416, "systolic": 110, "diastolic": 70}
- 产品 -
{"name": "iPhone", price: 1000}
请使用 BigQuery STRUCT 数据类型来表示结构体。
结构体值会自动展平为字段。Vertex AI 会根据其转换类型将数据转换应用于 the 平字段。
数组
数组可用于表示值列表,包含的值必须接受相同的转换类型。您可以在数组中添加结构体;数组中的所有结构体都必须具有相同的结构。
Vertex AI 将数组视为具有相对权重。换句话说,数组中靠后的项具有的权重比靠前的项大。
以下是数组的一些示例:
产品类别:
["Clothing", "Women", "Dress", ...]
最近购买的商品:
["iPhone", "Laptop", "Suitcase", ...]
用户记录:
[{"name": "Joelle", ID: 4093}, {"name": "Chloe", ID: 2047}, {"name": "Neko", ID: 3432}, ...]
请使用 BigQuery ARRAY 数据类型来表示数组。
Vertex AI 数据转换取决于应用于数组的转换类型:
数组类型 | 转换 |
---|---|
数值数组 |
|
分类数组 |
|
文本数组 |
|
时间戳数组 |
|
结构体数组 |
|
如何处理缺失值或 null 值
缺失值的处理方式取决于模型目标和应用于该特征的转换。
分类和回归
在分类和回归模型中,对于分类和文本转换,null 值会导致嵌入;对于其他转换,null 值将被保留。
预测
对于预测模型,系统会根据周围的数据计算 null 值。(无法保留 null 值。)如果您希望控制 null 值的计算方式,可以明确计算这些值。要使用的最佳值可能取决于您的数据和业务问题。
允许缺失行(例如,在数据粒度为每日时,没有特定日期的行),但 Vertex AI 不会为缺失数据计算值。由于缺失行可能降低模型质量,应尽量避免缺失行。例如,如果由于某一天销售量为零而导致缺失一行,则为这一天添加一行,并将销售数据明确设置为 0。
哪些值被视为 null 值
在训练 AutoML 表格模型时,Vertex AI 会将以下值视为 null 值:
BigQuery NULL 值。
NaN 或无限数值。
空白字符串。Vertex AI 不会剪切字符串中的空格。 也就是说," " 不会被视为 null 值。
可以转换为 NaN 或无限数值的字符串。
- 对于“NAN”:忽略大小写,前面带有可选加号或减号。
- 对于“INF”:忽略大小写,前面带有可选加号或减号。
缺失值。
列中具有数字转换或时间戳转换的值不是有效的列转换格式。在这种情况下,如果指定应在训练中使用无效值,则无效值将被视为 null。
预测的数据格式
用于预测的数据格式必须与用于训练的格式匹配。
如果您使用 Cloud Storage 中的 CSV 文件的数据训练模型,则数据的类型为 STRING。如果您使用 JSON 对象发送预测请求,请确保键值对中的所有值也都是 STRING 类型。
如果您已使用 BigQuery 中存储的数据训练模型,并且要使用 JSON 对象发送预测请求,则 JSON 键值对中值的数据类型必须遵循下表中的映射。
BigQuery 数据类型 | JSON 数据类型 |
---|---|
INT64 | 字符串 |
NUMERIC、BIGNUMERIC | 数字 |
FLOAT64 | 数字 |
BOOL | 布尔值 |
STRING | 字符串 |
DATE | 字符串 |
DATETIME | 字符串 |
时间 | 字符串 |
TIMESTAMP | 字符串 |
数组 | 数组 |
STRUCT | 对象 |
例如,如果您的训练数据包含 FLOAT64 类型的 length
特征,则以下 JSON 键值对是正确的:
"length":3.6,
反之,以下 JSON 键值对会抛出错误:
"length":"3.6",
后续步骤
- 详细了解 BigQuery 数据类型
- 了解如何准备表格训练数据
- 了解创建训练数据的最佳做法。