本頁說明 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 次的類別會視為「未知」類別。「unknown」類別會取得專屬的查詢索引和產生的嵌入內容。
分類轉換可套用至 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」 | 系統會忽略大小寫。系統會忽略前置加號 ("+") 或減號 ("-") 字元。會解讀為空值。 |
Infinity | 「INF」、「+inf」 | 系統會忽略大小寫。系統會忽略前置加號 ("+") 或減號 ("-") 字元。會解讀為空值。 |
如果使用數值轉換的資料欄中,有任何值不符合其中一種格式,則整個資料列會從訓練中排除,或者該值會視為null。您在選取數值轉換時,可以選擇這些結果。
當您使用具有數值轉換功能的特徵訓練模型時,Vertex AI 會將下列資料轉換套用至該特徵,並使用任何可提供訓練信號的轉換:
- 轉換為 float32 的值。
- 值的 z_score。
- 根據分位數計算的值區索引。值區大小為 100。
- 值大於或等於 0 時,為 log(value+1)。否則,系統不會套用此轉換,並將該值視為遺漏值。
- 當值大於或等於 0 時,log(value+1) 的 z_score。否則,系統不會套用此轉換,並將該值視為遺漏值。
- 布林值,指出值是否為空值。
- 訓練和預測作業不會納入含有無效數值輸入的資料列 (例如無法剖析為 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 |
「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 會根據轉換類型,將資料轉換套用至已展開的欄位。
陣列
陣列可用來表示值清單,其中包含的值必須接受相同的轉換類型。您可以在陣列中加入結構體;陣列中的所有結構體都必須具有相同的結構。
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 空值。
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 資料類型
- 瞭解如何準備表格型訓練資料
- 進一步瞭解建立表格型訓練資料的最佳做法