擷取訓練資料

如要擷取特徵資料來訓練模型,請使用批次服務。如要匯出特徵值以進行封存或臨時分析,請匯出特徵值

擷取模型訓練的特徵值

如要訓練模型,您需要包含預測工作範例的訓練資料集。這些範例包含執行個體,其中包含特徵和標籤。執行個體是您要預測的項目。舉例來說,假設某個例項是住家,而您想判斷其市場價值。包括位置、屋齡,以及附近房屋最近的平均售價。標籤是預測工作的答案,例如最終以 $100, 000 美元的價格售出房屋。

由於每個標籤都是特定時間點的觀察結果,因此您需要擷取與觀察時間點相應的特徵值,例如特定房屋售出時附近房屋的價格。隨著時間推移,系統會收集標籤和特徵值,這些特徵值也會隨之變更。Vertex AI 特徵儲存庫 (舊版) 可以執行時間點查詢,讓您擷取特定時間的特徵值。

時間點查詢範例

以下範例會擷取標籤為 L1L2 的兩個訓練例項的特徵值。這兩個標籤分別位於 T1T2。想像一下,在這些時間戳記凍結特徵值的狀態。因此,在 T1 的時間點查詢時,Vertex AI 特徵儲存庫 (舊版) 會傳回 Feature 1Feature 2Feature 3 最新的特徵值 (最多到 T1),不會洩漏 T1 之後的值。隨著時間推移,特徵值和標籤也會隨之變更。因此,在 T2,特徵儲存庫會傳回該時間點的不同特徵值。

時間點查詢範例

批次提供輸入內容

提出批次放送要求時,必須提供下列資訊:

  • 要取得值的現有功能清單。
  • 讀取執行個體清單,其中包含每個訓練樣本的資訊。這份清單列出特定時間點的觀察結果。可以是 CSV 檔案或 BigQuery 資料表。清單必須包含下列資訊:
    • 時間戳記:觀察或測量標籤的時間。系統需要時間戳記,Vertex AI 特徵儲存庫 (舊版) 才能執行時間點查詢。
    • 實體 ID:與標籤相應的一或多個實體 ID。
  • 輸出內容的寫入目的地 URI 和格式。在輸出內容中,Vertex AI 特徵儲存庫 (舊版) 基本上會合併讀取執行個體清單中的表格,以及特徵儲存庫中的特徵值。指定輸出內容的格式和位置,可選擇下列其中一種:
    • 地區或多地區資料集中的 BigQuery 資料表。
    • 位於單一地區或多地區 Cloud Storage 值區的 CSV 檔案。但如果特徵值包含陣列,則必須選擇其他格式。
    • Cloud Storage bucket 中的 Tfrecord 檔案。

區域規定

無論是讀取執行個體或目的地,來源資料集或值區都必須與特徵存放區位於相同區域或多區域位置。舉例來說,us-central1 中的特徵儲存庫只能從 us-central1 或美國多區域位置的 Cloud Storage 值區或 BigQuery 資料集讀取資料,或將資料提供給這些值區/資料集。您無法使用來自 us-east1 等來源的資料。此外,系統也不支援使用雙區域 bucket 讀取或提供資料。

讀取執行個體清單

讀取執行個體清單會指定要擷取的特徵值實體和時間戳記。CSV 檔案或 BigQuery 資料表必須包含下列資料欄,順序不限。每個資料欄都需要欄標題。

  • 你必須加入時間戳記資料欄,標頭名稱為 timestamp,資料欄值為 RFC 3339 格式的時間戳記。
  • 你必須加入一或多個實體類型資料欄,其中標題為實體類型 ID,資料欄值則為實體 ID。
  • 選用:您可以加入直通值 (額外資料欄),這些值會原封不動地傳遞至輸出內容。如果您有不在 Vertex AI 特徵儲存庫 (舊版) 中的資料,但想將該資料納入輸出內容,這項功能就非常實用。

範例 (CSV)

假設特徵儲存庫包含實體類型 usersmovies,以及這些實體類型的特徵。舉例來說,users 的特徵可能包括 agegender,而 movies 的特徵可能包括 ratingsgenre

以這個範例來說,您想收集使用者電影偏好的訓練資料。您會擷取兩個使用者實體 alicebob 的特徵值,以及他們看過的電影特徵。從另一個資料集,您知道 alice 觀看並喜歡 movie_01bob觀看movie_02後不喜歡,因此,讀取執行個體清單可能如下列範例所示:

users,movies,timestamp,liked
"alice","movie_01",2021-04-15T08:28:14Z,true
"bob","movie_02",2021-04-15T08:28:14Z,false

Vertex AI 特徵儲存庫 (舊版) 會擷取所列實體在指定時間戳記或之前的特徵值。您可以在批次服務要求中指定要取得的特定特徵,而非在讀取執行個體清單中指定。

這個範例也包含名為 liked 的資料欄,指出使用者是否喜歡某部電影。這個資料欄不會納入特徵商店,但您仍可將這些值傳遞至批次資料提供輸出內容。在輸出內容中,這些傳遞值會與特徵商店的值合併。

空值

如果在特定時間戳記的特徵值為空值,Vertex AI 特徵儲存庫 (舊版) 會傳回先前的非空值特徵值。如果沒有先前的值,Vertex AI 特徵儲存庫 (舊版) 會傳回空值。

批次提供特徵值

從特徵商店批次提供特徵值,以取得讀取執行個體清單檔案所決定的資料。

如要讀取近期的訓練資料並排除舊資料,藉此降低離線儲存空間用量費用,請指定開始時間。如要瞭解如何指定開始時間來降低離線儲存空間用量費用,請參閱指定開始時間,在批次服務和批次匯出期間最佳化離線儲存空間費用

網路使用者介面

請改用其他方法。您無法從控制台批次提供特徵。Google Cloud

REST

如要批次提供特徵值,請使用 featurestores.batchReadFeatureValues 方法傳送 POST 要求。

以下範例會輸出 BigQuery 資料表,其中包含 usersmovies 實體類型的特徵值。請注意,每個輸出目的地可能都有一些先決條件,您必須符合這些條件才能提交要求。舉例來說,如果您為 bigqueryDestination 欄位指定資料表名稱,就必須有現有資料集。API 參考資料中會說明這些需求。

使用任何要求資料之前,請先替換以下項目:

  • LOCATION_ID:建立特徵商店的區域。例如:us-central1
  • PROJECT_ID:您的專案 ID
  • FEATURESTORE_ID:特徵商店的 ID。
  • DATASET_NAME:目的地 BigQuery 資料集的名稱。
  • TABLE_NAME:目的地 BigQuery 資料表的名稱。
  • STORAGE_LOCATION:讀取執行個體 CSV 檔案的 Cloud Storage URI。

HTTP 方法和網址:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID:batchReadFeatureValues

JSON 要求主體:

{
  "destination": {
    "bigqueryDestination": {
      "outputUri": "bq://PROJECT_ID.DATASET_NAME.TABLE_NAME"
    }
  },
  "csvReadInstances": {
    "gcsSource": {
      "uris": ["STORAGE_LOCATION"]
    }
  },
  "entityTypeSpecs": [
    {
      "entityTypeId": "users",
      "featureSelector": {
        "idMatcher": {
          "ids": ["age", "liked_genres"]
        }
      }
    },
    {
      "entityTypeId": "movies",
      "featureSelector": {
        "idMatcher": {
          "ids": ["title", "average_rating", "genres"]
        }
      }
    }
  ],
  "passThroughFields": [
    {
      "fieldName": "liked"
    }
  ]
}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID:batchReadFeatureValues"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID:batchReadFeatureValues" | Select-Object -Expand Content

畫面會顯示類似以下的輸出。您可以使用回應中的 OPERATION_ID 取得作業狀態

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.BatchReadFeatureValuesOperationMetadata",
    "genericMetadata": {
      "createTime": "2021-03-02T00:03:41.558337Z",
      "updateTime": "2021-03-02T00:03:41.558337Z"
    }
  }
}

Python

如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。 詳情請參閱 Python API 參考說明文件

from google.cloud import aiplatform


def batch_serve_features_to_bq_sample(
    project: str,
    location: str,
    featurestore_name: str,
    bq_destination_output_uri: str,
    read_instances_uri: str,
    sync: bool = True,
):

    aiplatform.init(project=project, location=location)

    fs = aiplatform.featurestore.Featurestore(featurestore_name=featurestore_name)

    SERVING_FEATURE_IDS = {
        "users": ["age", "gender", "liked_genres"],
        "movies": ["title", "average_rating", "genres"],
    }

    fs.batch_serve_to_bq(
        bq_destination_output_uri=bq_destination_output_uri,
        serving_feature_ids=SERVING_FEATURE_IDS,
        read_instances_uri=read_instances_uri,
        sync=sync,
    )

其他語言

您可以安裝及使用下列 Vertex AI 用戶端程式庫,呼叫 Vertex AI API。Cloud 用戶端程式庫會使用每種支援語言的自然慣例與樣式,提供最佳開發人員體驗。

查看批次資料擷取工作

使用 Google Cloud 控制台查看Google Cloud 專案中的批次服務工作。

網路使用者介面

  1. 在 Google Cloud 控制台的 Vertex AI 專區,前往「Features」頁面。

    前往「Features」(功能) 頁面

  2. 從「Region」(區域) 下拉式清單中選取一個區域。
  3. 在動作列中,按一下「查看批次服務工作」,列出所有特徵商店的批次服務工作。
  4. 按一下批次服務工作的 ID,即可查看詳細資料,例如使用的讀取執行個體來源和輸出目的地。

後續步驟