資料類型和轉換

本頁說明 Vertex AI 如何搭配不同類型的表格資料使用 AutoML 模型。

Vertex AI 中的轉換作業簡介

模型訓練

輸入的資料表資料必須經過轉換,才能用於模型訓練。轉換表示特定資料功能的函式。

系統支援下列轉換:

如果資料來源是 Cloud Storage 中的 CSV 檔案,則分隔符號必須是逗號 (「,」)。Vertex AI 會採用 RFC 4180 CSV 格式。

如果資料來源是 BigQuery,且您要執行分類或迴歸,可以加入由多個資料原始值組成的資料。這些複合資料類型必須先經過預先處理,才能套用轉換作業。支援下列複合資料類型:

如果類型值遺漏或為空值,Vertex AI 會根據模型目標和為該特徵套用的轉換,處理這項問題。詳情請參閱如何處理缺少或空值

預測

用於預測的資料格式必須與訓練時使用的格式相符。詳情請參閱「預測資料格式」。

Vertex AI 轉換

類別

套用類別轉換後,該特徵會代表類別中的值。也就是所謂的名目尺度。這些值只會因各自的名稱而異,沒有一定的排列順序。您可以使用數字來表示類別值,但這些值之間不會有任何數字關係,意即類別 1 不會「大於」類別 0。

類別值的範例如下:

  • 布林值 - truefalse
  • 國家/地區:"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 套用的資料轉換方式取決於套用至陣列的轉換類型:

陣列類型 轉換
數字陣列
  • 所有 數值類型的轉換作業都會套用至最後 N 項項目的平均值,其中 N = {1, 2, 4, 8, all}。因此,最強調的項目是陣列末端的項目,而非開頭項目。
  • 空陣列的平均值會視為零。
類別陣列
  • 針對最後 N 項項目的陣列中每個元素 (N = {1, 2, 4, 8, all}),將類別名稱轉換為字典查詢索引,並為每個索引產生嵌入。使用平均值將所有元素的嵌入合併為單一嵌入。
  • 空陣列會視為零的嵌入。
文字陣列
  • 使用空格 (" ") 做為分隔符,將陣列中的所有文字值連接成單一文字值,然後將結果視為單一文字值。套用「文字」欄的轉換。
  • 空陣列會視為零的嵌入。
時間戳記陣列
  • 數值欄的轉換套用至陣列最後 N 項項目的平均值。N = {1, 2, 4, 8, all}。 也就是說,陣列末端的項目會獲得最多強調。
結構體陣列
  • 陣列中的結構體會扁平化為個別欄位,並逐一欄位組合成陣列。系統會根據陣列的欄位類型套用陣列轉換作業 (如本表所述)。

如何處理缺少或空值

遺漏值的處理方式取決於模型目標,以及為該特徵套用的轉換作業。

分類和迴歸

對於分類和迴歸模型,空值會導致分類和文字轉換的嵌入;對於其他轉換,空值會保留為空值。

預測

對於預測模型,系統會從周圍資料推斷空值。(沒有將空值設為空值的選項)。如果您想控制空值的推測方式,可以明確推測空值。最適合的值可能會因資料和業務問題而異。

系統允許缺少資料列 (例如,在資料精細度為每日的情況下,沒有特定日期的資料列),但 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",

後續步驟