資料類型和轉換

本頁說明 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 次,系統會視為「未知」類別。「不明」類別有專屬的查詢索引和產生的嵌入。

類別轉換可套用至 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 套用的資料轉換方式取決於陣列套用的轉換類型:

陣列類型 轉換
數字陣列
  • 系統會將 Numerical 類型的所有轉換套用至最後 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 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",

後續步驟