エンベディングを使用した検索

最適化されたオンライン サービング用に作成されたオンライン ストア インスタンスでは、ベクトル類似性検索を実行して、意味的に類似したエンティティまたは意味的に関連するエンティティのリストを取得できます。これは近似最近傍探索とも呼ばれます。エンティティ ID またはエンベディングに基づいて検索できます。

オンライン ストア インスタンスに構成されたエンドポイントのタイプに応じて、次のいずれかを行うことができます。

始める前に

近似最近傍を検索するには、まず次の操作を行う必要があります。

  • embedding 列を追加して、エンベディングをサポートするように BigQuery データソースを設定します。必要に応じて、フィルタリング列とクラウディング列を追加します。詳細については、データソースの準備のガイドラインをご覧ください。

  • 最適化されたオンライン サービング用のオンライン ストア インスタンスを作成します

  • BigQuery データソースを直接関連付けることで、エンベディングをサポートする特徴ビューを作成します。特徴ビューの作成時に、embedding 列を指定します。エンベディングをサポートする特徴ビューを作成する方法については、特徴ビューのベクトル取得を構成するをご覧ください。

  • Private Service Connect エンドポイントを使用して最近傍一致を検索する場合は、Python SDK の最新バージョンをインストールするか、最新バージョンにアップグレードします。次のコマンドを実行します。
    pip3 install --upgrade --quiet google-cloud-aiplatform

  • まだ行っていない場合は、次の手順に沿って Vertex AI に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Python

    ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

      Google Cloud CLI をインストールします。

      外部 ID プロバイダ(IdP)を使用している場合は、まずフェデレーション ID を使用して gcloud CLI にログインする必要があります。

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    詳細については Set up authentication for a local development environment をご覧ください。

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールします。

      外部 ID プロバイダ(IdP)を使用している場合は、まずフェデレーション ID を使用して gcloud CLI にログインする必要があります。

    詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

パブリック エンドポイントを使用して最近傍の一致を検索する

最適化されたオンライン サービングを使用してパブリック エンドポイントから特徴値を処理するようにオンライン ストア インスタンスを構成した場合は、近似最近傍探索の一致を取得するために次の操作を行う必要があります。

  1. オンライン ストアのパブリック エンドポイント ドメイン名を取得する

  2. エンベディングまたはエンティティの最近傍の一致を取得する

オンライン ストアのパブリック エンドポイント ドメイン名を取得する

最適化されたオンライン サービング用のオンライン ストア インスタンスを作成すると、Vertex AI Feature Store がオンライン ストア用のパブリック エンドポイント ドメイン名を生成します。オンライン ショップの特徴ビューから最近傍の検索を開始する前に、オンライン ショップの詳細からパブリック エンドポイント ドメイン名を取得する必要があります。

次のサンプルを使用して、オンライン ストア インスタンスの詳細を取得します。

REST

プロジェクト内の FeatureOnlineStore リソースの詳細を取得するには、featureOnlineStores.get メソッドを使用して GET リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: オンライン ストアがあるリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREONLINESTORE_NAME: オンライン ストア インスタンスの名前。

HTTP メソッドと URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME"

PowerShell

次のコマンドを実行します。

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

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME_1",
  "createTime": "2023-09-06T23:25:04.256314Z",
  "updateTime": "2023-09-06T23:25:04.256314Z",
  "etag": "AMEw9yMgoV0bAsYuKwVxz4Y7lOmxV7riNVHg217KaQAKORqvdqGCrQ1DIt8yHgoGXf8=",
  "state": "STABLE",
  "dedicatedServingEndpoint": {
    "publicEndpointDomainName": "PUBLIC_ENDPOINT_DOMAIN_NAME"
  },
  "optimized": {}
}

次のステップで近似最近傍を取得するには、レスポンスの PUBLIC_ENDPOINT_DOMAIN_NAME が必要です。

パブリック エンドポイントを使用して近似最近傍を取得する

オンライン ストアのパブリック エンドポイント ドメイン名を取得したら、それを使用して、エンベディングまたはエンティティの近似最近傍を検索できます。

エンベディングの近似最近傍を取得する

次のサンプルを使用して、パブリック エンドポイントを使用しながらエンベディングを指定して、意味的に関連するエンティティを検索します。

REST

エンベディングの最近傍を検索するには、featureViews.searchNearestEntities メソッドを使用して POST リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PUBLIC_ENDPOINT_DOMAIN_NAME: featureOnlineStores.get メソッドを使用して取得したオンライン ストア インスタンスのパブリック エンドポイント ドメイン名。
  • PROJECT_ID: プロジェクト ID。
  • LOCATION_ID: オンライン ストア インスタンスが配置されているリージョン(us-central1 など)。
  • FEATUREONLINESTORE_NAME: 近似最近傍を検索する特徴ビューを含むオンライン ストア インスタンスの名前。
  • FEATUREVIEW_NAME: 近似最近傍を検索する特徴ビューの名前。
  • EMBEDDING: 近似最近傍を検索するエンベディング。エンベディングは、double 値の配列として表されます。
  • RETURN_FULL_ENTITY: 省略可。レスポンスのエンティティの特徴を含めるかどうかを指定します。レスポンスにエンティティとともに特徴を含めるには、「true」と入力します。デフォルト値は false です。
  • NEIGHBOR_COUNT: 取得する近似最近傍の数。

HTTP メソッドと URL:

POST https://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities

リクエストの本文(JSON):

{
  "query": {
    "embedding": {
      "value": EMBEDDING
    },
    "neighbor_count": NEIGHBOR_COUNT
  },
  "return_full_entity": RETURN_FULL_ENTITY
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities"

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://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "nearestNeighbors": {
    "neighbors": [
    {
      "entityId": "305281",
      "distance": -41.115459442138672
    },
    {
      "entityId": "80280",
      "distance": -38.703567504882812
    },
    {
      "entityId": "80280",
      "distance":-38.703567504882812
    },
    {
      "entityId": "903779",
      "distance": -38.214759826660156
    },
    {
      "entityId": "1008145",
      "distance": -36.271354675292969
    },
    {
      "entityId": "606431",
      "distance": -34.791431427001953
    } ]
  }
}

エンティティの近似最近傍を取得する

次のサンプルを使用して、パブリック エンドポイントを使用しながらエンティティ ID を指定して、意味的に関連するエンティティを検索します。

REST

最近傍でエンティティ ID を検索するには、featureViews.searchNearestEntities メソッドを使用して POST リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PUBLIC_ENDPOINT_DOMAIN_NAME: featureOnlineStores.get メソッドを使用して取得したオンライン ストア インスタンスのパブリック エンドポイント ドメイン名。
  • PROJECT_ID: プロジェクト ID。
  • LOCATION_ID: オンライン ストア インスタンスが配置されているリージョン(us-central1 など)。
  • FEATUREONLINESTORE_NAME: 近似最近傍を検索する特徴ビューを含むオンライン ストア インスタンスの名前。
  • FEATUREVIEW_NAME: 近似最近傍を検索する特徴ビューの名前。
  • ENTITY_ID: 近似最近傍探索を取得するエンティティのエンティティ ID。
  • RETURN_FULL_ENTITY: 省略可。レスポンスのエンティティの特徴を含めるかどうかを指定します。レスポンスにエンティティとともに特徴を含めるには、「true」と入力します。デフォルト値は false です。
  • NEIGHBOR_COUNT: 取得する近似最近傍の数。

HTTP メソッドと URL:

POST https://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities

リクエストの本文(JSON):

{
  "query": {
    "entity_id": ENTITY_ID,
    "neighbor_count": NEIGHBOR_COUNT
  },
  "return_full_entity": RETURN_FULL_ENTITY
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities"

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://PUBLIC_ENDPOINT_DOMAIN_NAME/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME:searchNearestEntities" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "nearestNeighbors": {
    "neighbors": [
    {
      "entityId": "305281",
      "distance": -41.115459442138672
    },
    {
      "entityId": "80280",
      "distance": -38.703567504882812
    },
    {
      "entityId": "80280",
      "distance":-38.703567504882812
    },
    {
      "entityId": "903779",
      "distance": -38.214759826660156
    },
    {
      "entityId": "1008145",
      "distance": -36.271354675292969
    },
    {
      "entityId": "606431",
      "distance": -34.791431427001953
    } ]
  }
}

Private Service Connect エンドポイントを使用して最近傍一致を検索する

最適化されたオンライン サービングを使用して Private Service Connect エンドポイントから特徴値を処理するようにオンライン ストア インスタンスを構成した場合は、近似最近傍一致を取得するために次の操作を行う必要があります。

  1. オンライン ストアのサービス アタッチメント文字列を取得します。

  2. Private Service Connect のエンドポイントをネットワーク構成に追加します。

  3. gRPC 経由で Private Service Connect エンドポイントに接続します。

  4. エンベディングまたはエンティティの最近傍の一致を取得する

オンライン ストアのサービス アタッチメント文字列を取得する

Private Service Connect エンドポイントを使用する最適化されたオンライン サービング用にオンライン ストア インスタンスを作成すると、Vertex AI Feature Store はサービス アタッチメント文字列を生成します。サービス アタッチメント文字列は、オンライン ストアの詳細から取得できます。この文字列を使用して、Private Service Connect エンドポイントを設定します。

次のサンプルを使用して、オンライン ストア インスタンスの詳細を取得します。

REST

プロジェクト内の FeatureOnlineStore リソースの詳細を取得するには、featureOnlineStores.get メソッドを使用して GET リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: オンライン ストアがあるリージョン(us-central1 など)。
  • PROJECT_ID: プロジェクト ID。
  • FEATUREONLINESTORE_NAME: オンライン ストア インスタンスの名前。

HTTP メソッドと URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME"

PowerShell

次のコマンドを実行します。

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

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME_1",
  "createTime": "2023-09-06T23:25:04.256314Z",
  "updateTime": "2023-09-06T23:25:04.256314Z",
  "etag": "AMEw9yMgoV0bAsYuKwVxz4Y7lOmxV7riNVHg217KaQAKORqvdqGCrQ1DIt8yHgoGXf8=",
  "state": "STABLE",
  "dedicatedServingEndpoint": {
    "privateServiceConnectConfig": {
      "enablePrivateServiceConnect": "true",
      "projectAllowlist": [
        "PROJECT_NAME"
      ]
    },
    serviceAttachment: "SERVICE_ATTACHMENT_STRING"
  },
  "optimized": {}
}

次のステップで特徴値を取得するには、レスポンスの SERVICE_ATTACHMENT_STRING が必要です。

Private Service Connect のエンドポイントを追加する

最適化されたオンライン サービングに使用する Private Service Connect のエンドポイントをネットワーク構成に追加するには、次の操作を行います。

  1. Google Cloud コンソールで、オンライン ストア インスタンスを含むプロジェクトを選択します。

  2. SERVICE_ATTACHMENT_STRINGターゲット サービスとして指定して、Private Service Connect のエンドポイントを作成します。

エンドポイントを作成すると、[Private Service Connect] ページの [接続エンドポイント] タブに表示されます。エンドポイントの IP アドレスが [IP アドレス] 列に表示されます。

[接続エンドポイント] タブに移動

次の手順では、この IP アドレスを使用して、gRPC を介してオンライン ストア インスタンスのエンドポイントを Private Service Connect エンドポイントに接続する必要があります。

gRPC 経由で Private Service Connect エンドポイントに接続する

次のコードサンプルを使用して、オンライン ストア用に作成された Private Service Connect エンドポイントに gRPC 経由で接続します。

Python

from google.cloud.aiplatform_v1 import FeatureOnlineStoreServiceClient
from google.cloud.aiplatform_v1.services.feature_online_store_service.transports.grpc import FeatureOnlineStoreServiceGrpcTransport
import grpc

data_client = FeatureOnlineStoreServiceClient(
  transport = FeatureOnlineStoreServiceGrpcTransport(
    # Add the IP address of the Endpoint you just created.
    channel = grpc.insecure_channel("ENDPOINT_IP:10002")
  )
)

次のように置き換えます。

  • ENDPOINT_IP: [Private Service Connect] ページの [IP アドレス] 列にあるエンドポイントの IP アドレス。

Private Service Connect エンドポイントを使用して近似最近傍を取得する

gRPC 経由で Private Service Connect エンドポイントに接続したら、エンベディングまたはエンティティの近似最近傍を検索できます。

エンベディングの近似最近傍を取得する

次のサンプルを使用して、プライベート エンドポイントを使用しながらエンベディングを指定して、意味的に関連するエンティティを検索します。

Python

data_client.search_nearest_entities(
  request=feature_online_store_service_pb2.SearchNearestEntitiesRequest(
      feature_view=f"projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME",
      query=feature_online_store_service_pb2.NearestNeighborQuery(
          embedding = "EMBEDDING",
          neighbor_count = NEIGHBOR_COUNT,
      ),
      return_full_entity=RETURN_FULL_ENTITY
  ))

次のように置き換えます。

  • LOCATION_ID: オンライン ストアがあるリージョン(us-central1 など)。

  • PROJECT_ID: プロジェクト ID。

  • FEATUREONLINESTORE_NAME: 特徴ビューを含むオンライン ショップの名前。

  • FEATUREVIEW_NAME: 近似最近傍を検索する特徴ビューの名前。

  • EMBEDDING: 近似最近傍を検索するエンベディング。エンベディングは、double 値の配列として表されます。

  • FORMAT: 省略可。特徴値を取得する形式。サポートされている形式には、JSON Key-Value ペアと proto の Struct 形式があります。proto Struct 形式は、バイト型の特徴値をサポートしていません。バイト形式の特徴量値を取得する場合は、レスポンス形式として JSON を使用します。

  • RETURN_FULL_ENTITY: 省略可。レスポンスのエンティティの特徴を含めるかどうかを指定します。レスポンスにエンティティとともに特徴を含めるには、「true」と入力します。デフォルト値は false です。

  • NEIGHBOR_COUNT: 取得する近似最近傍の数。

エンティティの近似最近傍を取得する

次のサンプルを使用して、プライベート エンドポイントを使用しながらエンティティ ID を指定して、意味的に関連するエンティティを検索します。

Python

data_client.search_nearest_entities(
  request=feature_online_store_service_pb2.SearchNearestEntitiesRequest(
      feature_view=f"projects/PROJECT_ID/locations/LOCATION_ID/featureOnlineStores/FEATUREONLINESTORE_NAME/featureViews/FEATUREVIEW_NAME",
      query=feature_online_store_service_pb2.NearestNeighborQuery(
          entity_id = "ENTITY_ID",
          neighbor_count = NEIGHBOR_COUNT,
      ),
      return_full_entity=RETURN_FULL_ENTITY
  ))
 ```

次のように置き換えます。

  • LOCATION_ID: オンライン ストアがあるリージョン(us-central1 など)。

  • PROJECT_ID: プロジェクト ID。

  • FEATUREONLINESTORE_NAME: 特徴ビューを含むオンライン ショップの名前。

  • FEATUREVIEW_NAME: 近似最近傍を検索する特徴ビューの名前。

  • ENTITY_ID: 近似最近傍の一致を取得するエンティティのエンティティ ID。

  • FORMAT: 省略可。特徴値を取得する形式。サポートされている形式には、JSON Key-Value ペアと proto の Struct 形式があります。proto Struct 形式は、バイト型の特徴値をサポートしていません。バイト形式の特徴量値を取得する場合は、レスポンス形式として JSON を使用します。

  • RETURN_FULL_ENTITY: 省略可。レスポンスのエンティティの特徴を含めるかどうかを指定します。レスポンスにエンティティとともに特徴を含めるには、「true」と入力します。デフォルト値は false です。

  • NEIGHBOR_COUNT: 取得する近似最近傍の数。