本頁說明 Vertex AI 如何搭配不同類型的表格資料使用 AutoML 模型。
Vertex AI 中的轉換簡介
模型訓練
輸入的表格資料必須先經過轉換,才能用於模型訓練。轉換是指特定資料特徵的功能。
支援的轉換如下:
如果資料來源是 Cloud Storage 中的 CSV 檔案,則必須使用半形逗號 (「,」) 做為分隔符號。Vertex AI 會採用 RFC 4180 CSV 格式。
如果資料來源是 BigQuery,且您要執行分類或迴歸,可以納入由多個資料原始型別組成的資料。這些複合資料型別必須經過預先處理,才能套用轉換。支援的複合資料類型如下:
如果缺少或沒有類型值,Vertex AI 會根據模型目標和該特徵套用的轉換來處理。詳情請參閱「如何處理遺漏或空值」。
預測
預測用的資料格式必須與訓練用的格式相同。 詳情請參閱「預測資料格式」。
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 元和 2 元語法。將每個 n 元語法轉換為字典查閱索引,並為每個索引產生嵌入。使用平均值將所有元素的嵌入內容合併為單一嵌入內容。
權杖化 是根據 Unicode 指令碼界線。
- 遺漏值會取得自己的查閱索引和產生的嵌入。
- 系統不會特別處理停用字,也不會移除這些字。
文字轉換可套用至 CSV 檔案中的 STRING 資料,或下列 BigQuery 資料類型:
- STRING
- DATETIME
數字
數字轉換會導致資料欄做為序數或定量數使用。而這些數字皆可互相比較。也就是說,兩個不同的數字可能小於或大於對方。
系統會移除開頭或結尾的空白字元。
下表列出數字轉換的所有相容格式:
格式 | 範例 | 附註 |
數字字串 | 「101」、「101.5」 | 只有半形句號「.」是有效的小數分隔符號。「101,5」和「100,000」不是有效的數字字串。 |
科學記號 | 「1.12345E+11」、「1.12345e+11」 | 請參閱有關小數分隔符的數字字串附註。 |
不是數字 | 「NAN」、「nan」、「+NAN」 | 不區分大小寫。系統會忽略前置加號「+」或減號「-」。解讀為空值。 |
Infinity | 「INF」、「+inf」 | 不區分大小寫。系統會忽略前置加號「+」或減號「-」。解讀為空值。 |
如果經過數值轉換的資料欄中的值不符合上述任一格式,系統會將整列資料排除在訓練程序之外,或將該值視為 null。選取數值轉換時,您可以選擇以下結果:
使用經過數值轉換的特徵訓練模型時,Vertex AI 會對特徵套用下列資料轉換,並使用任何可提供訓練信號的轉換:
- 轉換為 float32 的值。
- 值的 z 分數。
- 根據分位數的值區索引。值區大小為 100。
- 當值大於或等於 0 時,為 log(value+1)。 否則系統不會套用這項轉換,且會將該值視為遺漏值。
- 當值大於或等於 0 時,log(value+1) 的 z 分數。否則系統不會套用這項轉換,且會將該值視為遺漏值。
- 指出值是否為空值的布林值。
- 含有無效數值輸入內容的資料列 (例如無法剖析為 float32 的字串) 不會用於訓練和預測。
- 極端/離群值不會獲得任何特殊待遇。
您可以對 CSV 檔案中的 STRING 資料,或下列 BigQuery 資料類型套用數值轉換:
- INT64
- NUMERIC、BIGNUMERIC
- FLOAT64
- STRING
- TIMESTAMP
時間戳記
時間戳記轉換會將特徵當做時間點使用,可利用民用時間 (含時區) 或 Unix 時間戳記來表示。時間欄只能使用經過時間戳記轉換的特徵。
如果沒有使用民用時間指定時區,系統就會將世界標準時間做為預設值。
下表列出所有相容的時間戳記字串格式:
格式 | 範例 | 附註 |
---|---|---|
%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 |
「2018 年 11 月 30 日」 | |
%Y-%m-%dT%H:%M:%E*S%Ez |
"2019-05-17T23:56:09.05+00:00" | RFC 3339。以 ±HH:MM[:SS[.ffffff]] 格式指定時區偏移量 (z ):
|
以秒為單位的 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 會根據轉換類型,將資料轉換套用至平坦化欄位。
陣列
陣列可用來表示值清單。 其中包含的值必須接受相同的轉換類型。您可以在陣列中加入結構體,但陣列中的所有結構體都必須具有相同結構。
Vertex AI 會處理陣列,進而表示各項目的相對權重。換句話說,與陣列中較早顯示的項目相比,陣列中較晚顯示的項目所佔權重會比較高。
陣列的範例如下:
產品類別:
["Clothing", "Women", "Dress", ...]
最近購買的商品:
["iPhone", "Laptop", "Suitcase", ...]
使用者記錄:
[{"name": "Joelle", ID: 4093}, {"name": "Chloe", ID: 2047}, {"name": "Neko", ID: 3432}, ...]
您可以使用 BigQuery ARRAY 資料類型來表示陣列。
Vertex AI 套用的資料轉換方式取決於陣列套用的轉換類型:
陣列類型 | 轉換 |
---|---|
數字陣列 |
|
類別陣列 |
|
文字陣列 |
|
時間戳記陣列 |
|
結構陣列 |
|
如何處理遺漏或空值
遺漏值的處理方式取決於模型目標和套用至該特徵的轉換。
分類和迴歸
如果是分類和迴歸模型,空值會產生類別和文字轉換的嵌入;如果是其他轉換,空值會保留為空值。
預測
如果是預測模型,系統會根據周圍的資料填補空值。(無法選擇將空值保留為空值)。如果您偏好控制空值的填補方式,可以明確填補空值。要使用哪些值,可能取決於您的資料和業務問題。
允許缺少資料列 (例如,特定日期沒有資料列,且資料精細程度為每日),但 Vertex AI 不會推算遺漏資料的值。因為缺少資料列可能會降低模型品質,因此請盡可能避免缺少資料列。舉例來說,如果某天的銷售量為零,導致資料列遺失,請為該天新增資料列,並明確將銷售資料設為 0。
系統會將哪些值視為空值
訓練 AutoML 表格模型時,Vertex AI 會將下列值視為空值:
BigQuery NULL 值。
NaN 或無限數值。
空字串。Vertex AI 不會移除字串中的空格。也就是說,「 」不會視為空值。
可轉換為 NaN 或無限數字值的字串。
- 「NAN」:忽略大小寫,可選擇在前面加上加號或減號。
- 「INF」:忽略大小寫,可選擇在前面加上加號或減號。
缺少值。
資料欄中的值不符合資料欄轉換的有效格式,且該資料欄已轉換為「數字」或「時間戳記」。在這種情況下,如果您指定在訓練中使用含有無效值的資料列,系統會將無效值視為空值。
預測資料格式
用於預測的資料格式必須與訓練時使用的格式相符。
如果您在 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 資料類型
- 瞭解如何準備表格訓練資料
- 瞭解建立表格型訓練資料的最佳做法