資料類型和轉換

本頁說明 Agent Platform 如何搭配不同類型的表格資料,用於 AutoML 模型。

Gemini Enterprise Agent Platform 的轉換功能簡介

模型訓練

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

支援的轉換如下:

如果資料來源是 Cloud Storage 中的 CSV 檔案,則必須使用半形逗號 (「,」) 做為分隔符號。Agent Platform 使用 RFC 4180 CSV 格式。

如果資料來源是 BigQuery,且您要執行分類或迴歸,可以納入由多個資料基本型別組成的資料。轉換作業前必須先預先處理這些複合資料型別。系統支援下列複合資料類型:

如果缺少或沒有型別值,Gemini Enterprise Agent Platform 會根據模型目標和該特徵套用的轉換來處理。詳情請參閱「如何處理遺漏或空值」。

預測

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

Agent Platform 轉換

類別

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

類別值的範例如下:

  • 布林值 - truefalse
  • 國家/地區 - "USA""Canada""China" 等。
  • HTTP 狀態碼 - "200""404""500" 等等。

類別值需區分大小寫,且系統會將拼法不同的值視為不同類別 (例如,「Color」和「Colour」無法合併處理)。

使用經過類別轉換的特徵訓練模型時,Agent Platform 會對特徵套用下列資料轉換,並使用任何可提供訓練信號的轉換:

  • 類別字串的格式必須完全相同,大小寫、標點符號、拼字、時態等都不得變更。
  • 將類別名稱轉換為字典查閱索引,並為每個索引產生嵌入。
  • 如果類別在訓練資料集中出現的次數少於 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"

預測模型不支援對共變數特徵進行文字轉換。

使用經過文字轉換的特徵訓練模型時,Agent Platform 會對特徵套用下列資料轉換,並使用任何可提供信號的轉換進行訓練:

  • 文字內容不變,大小寫、標點符號、拼字、時態等都不會變更。
  • 將文字標記化為單字,並從單字生成 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。選取數值轉換時,您可以選擇下列結果。

使用經過數值轉換的特徵訓練模型時,Agent Platform 會對特徵套用下列資料轉換,並使用任何可提供訓練信號的轉換:

  • 轉換為 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。選取時間戳記轉換時,您可以選擇下列結果。

使用經過時間戳記轉換的特徵訓練模型時,Agent Platform 會對特徵套用下列資料轉換,並使用任何提供信號的特徵進行訓練:

  • 為「數值」資料欄套用轉換。
  • 判斷年、月、日和星期幾。將時間戳記中的每個值視為類別資料欄。
  • 無效的數值 (例如超出一般時間戳記範圍或極端值) 不會經過特殊處理,也不會移除。
  • 如果資料列含有無效的時間戳記輸入內容 (例如無效的時間戳記字串),系統就不會將其納入訓練和預測。

時間戳記轉換可套用至 CSV 檔案中的 STRING 資料,或下列 BigQuery 資料類型:

  • INT64
  • STRING
  • DATE
  • DATETIME
  • TIMESTAMP

複合資料類型

有時您需要納入由多個資料原始型別組成的資料,例如陣列或結構體。複合資料類型只能透過 BigQuery 做為資料來源使用,且不支援預測模型。

結構

結構可用來表示一組加上標籤的欄位。結構具有欄位名稱清單,其中每個欄位名稱皆與某個資料類型相關聯。資料欄中所有結構值的欄位清單及其資料類型都必須相同。

結構的範例如下:

  • 血壓 - {"timestamp": 1535761416, "systolic": 110, "diastolic": 70}
  • 產品 - {"name": "iPhone", price: 1000}

您可以使用 BigQuery STRUCT 資料類型來表示結構。

系統會自動將結構值扁平化為欄位。Agent Platform 會根據平坦化欄位的轉換類型,對這些欄位套用資料轉換。

陣列

陣列可用來表示值清單。 其中包含的值必須接受相同的轉換類型。您可以在陣列中加入結構體,但陣列中的所有結構體都必須具有相同結構。

Agent Platform 會處理陣列,進而表示各項目的相對權重。換句話說,與陣列中較早顯示的項目相比,陣列中較晚顯示的項目所佔權重會比較高。

陣列的範例如下:

  • 產品類別:

    ["Clothing", "Women", "Dress", ...]

  • 最近購買的商品:

    ["iPhone", "Laptop", "Suitcase", ...]

  • 使用者記錄:

    [{"name": "Joelle", ID: 4093}, {"name": "Chloe", ID: 2047}, {"name": "Neko", ID: 3432}, ...]

您可以使用 BigQuery ARRAY 資料類型來表示陣列。

Agent Platform 套用的資料轉換方式取決於陣列套用的轉換類型:

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

如何處理遺漏值或空值

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

分類和迴歸

如果是分類和迴歸模型,空值會產生類別和文字轉換的嵌入;如果是其他轉換,空值會保留為空值。

預測

如果是預測模型,系統會根據周圍的資料填補空值。(無法將空值保留為空值)。如果您偏好控制空值的插補方式,可以明確插補空值。要使用哪些值,可能取決於您的資料和業務問題。

允許缺少資料列 (例如,特定日期沒有資料列,且資料細微程度為每日),但 Agent Platform 不會推算遺漏資料的值。因為缺少資料列可能會降低模型品質,所以請盡可能避免缺少資料列。舉例來說,如果某天的銷售量為零,導致該資料列遺失,請為該天新增資料列,並明確將銷售資料設為 0。

哪些值會視為空值

訓練 AutoML 表格模型時,Agent Platform 會將下列值視為空值:

  • BigQuery NULL 值

  • NaN 或無限數值。

  • 空字串。Agent Platform 不會從字串中移除空格。 也就是說,「 」會視為空值。

  • 轉換為 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",

後續步驟