メディア レコメンデーションをブーストまたはベリーする

このページでは、ブースト サービング コントロール(コントロール)を使用して、モデルから返されたメディア レコメンデーションのランキング順位を変更する方法について説明します。

ブースト制御は、モデルから返された推奨事項の順序を変更します。結果にフィルタ式を適用して、ブーストまたはベリーするレコメンデーションを特定し、-1 ~+1 のブースト値を適用します。ブースト値が +1 の場合、最適化案のブーストが最大になり、返された最適化案の上部に表示されます。値が -1 の場合、返された推奨事項のリストの最下部に推奨事項が埋もれます。

ブーストはサービス提供時のコントロールです。まず、レコメンデーション モデルがレコメンデーションのリストを返します。サービス構成を使用して、ブースト コントロールがそのリストに適用され、おすすめのランキングが調整されます。ブースト管理では、おすすめコンテンツの追加や削除は行われませんが、おすすめコンテンツがユーザーに表示される順序は管理できます。

ブーストとフィルタリングの最適化案

ブーストはソフト フィルタです。一方、レコメンデーションをフィルタするで説明されているレコメンデーションの通常のフィルタはハード フィルタです。

推奨事項にハードフィルタを適用すると、除外されたドキュメントは表示されなくなります。ただし、ソフトフィルタでは、推奨事項のリストからドキュメントが削除されることはありません。代わりに、フィルタを使用して、返される候補リストで上位または下位に表示するドキュメントを決定します。

レコメンデーション モデルの過負荷を回避する

ブースト フィルタまたは埋め込みフィルタを適用する場合は、ゼロに近い小さな値を指定することをおすすめします。値が +1 または -1 に近い場合、レコメンデーション モデルが圧倒される可能性があり、モデルによって適用されたレコメンデーションのランキングが、ユーザーに表示されるレコメンデーションの順序に反映されません。

たとえば、アニメーション ムービーを +1 でブーストすると、おすすめリストの上部にアニメーション ムービーのみが表示されます。これにより、モデルによって高く評価されたアニメーション以外のムービーはリストの下部に移動し、ユーザーが目にする機会が減る可能性があります。

降格と目立たないようにする

降格と非表示化の両方を行うと、返された推奨事項のリスト内で、推奨事項がそれ以外の場合は表示される位置よりも下位に移動します。

ただし、降格はコンテンツの公開日や、ユーザーがコンテンツの一部をすでに視聴しているかどうかに基づいて行われます。降格の詳細については、メディア レコメンデーションの順位を下げるをご覧ください。

非表示化は、フィルタによって特定されたコンテンツに適用されます。フィルタは、スキーマでフィルタ可能とマークされている任意のデータフィールドにできます。フィールドをフィルタ可能としてマークする方法など、推奨事項フィルタに関する一般的な情報については、推奨事項をフィルタするをご覧ください。

ブースト コントロールとサービス構成について

各ブースト サービス提供コントロールは、フィルタとブースト値で構成されています。たとえば、1 つのブースト コントロールでは、タイトルに「クリスマス」が含まれる映画を 0.1 の値でブーストし、別のブースト コントロールでは、ホラー映画を -0.2 の値で非表示にします。

1 つ以上のブースト コントロールを作成したら、コントロールをサービス構成に関連付けます。Vertex AI Search アプリを作成すると、デフォルトのサービング構成も自動的に作成されます。サービス構成は、サービス提供時に参照され、アプリが生成する結果を決定します。サービス提供構成には、ブースト コントロールに加えて、多様化コントロールや降格コントロールなどの他のタイプのコントロールを含めることができます。

サービング構成は、recommend メソッドを呼び出すときに適用できます。その後、サービス構成内のすべてのコントロールが、メソッド呼び出しによって返された推奨事項に適用されます。

さらに、アプリに複数のサービス構成を関連付けることができます。これにより、状況に応じて異なるコントロール セットを適用できます。たとえば、おすすめのリクエストが子どものアカウントから送信された場合は、子どもに適したカテゴリの映画を優先し、不適切な映画を非表示にします。同様に、リクエストが成人向けとマークされたアカウントから送信された場合は、成人に人気のあるタイトルやカテゴリをブーストします。また、地域ごとに異なるサービング構成を設定し、地域で人気のあるコンテンツをブーストすることもできます。サービス構成の詳細については、メディア サービング構成の作成と管理をご覧ください。

強調数値は累積されます

複数のサービス提供コントロールをサービス構成にアタッチすると、ブーストと埋め込みが加算されます。

たとえば、子供向けアニメーション映画を 0.3、アニメーション アドベンチャー映画を 0.4 にブーストすると、子供向けアニメーション アドベンチャーに分類される映画は 0.7 にブーストされます。

同様に、同じサービス構成でホラー映画が 1 つのコントロールによって 0.2 増加し、別のコントロールによって -0.3 減少した場合、最終的な結果は映画が -0.1 減少することです。

ブーストの合計は +1 を超えることができます。たとえば、制御によってアニメーションの子供向け映画が 0.6 ポイント、アニメーションのアドベンチャー映画が 0.5 ポイント上昇した場合、子供向けのアニメーション アドベンチャー映画は +1.1 ポイント上昇します。

フィルタの例

メディア レコメンデーションのフィルタの例を以下に示します。

一般的なキー プロパティのフィルタ

一般的なキー文字列プロパティ(categoryimage_nameimage_urilanguagetitleuri)のフィルタの例。

  • 子供向けアニメーション:
    "filter": "categories: ANY(\"animation\") AND categories: ANY(\"children\")"

  • 恐怖を感じるメディア:
    "filter": "categories: ANY(\"horror\", \"thriller\", \"crime\")

  • タイトルが「クリスマス」のメディア:
    "filter": "title: ANY(\"Christmas\")"

  • images 配列の最初のアイテムに name「ビーチボール」が含まれているメディア:
    "filter": "images[0].name: ANY(\"beach ball\")"

メディアキー プロパティのフィルタ

メディアキー プロパティのフィルタの例。メディアキー プロパティは media_ で始まり、フィルタ構文ではフィールド名の前に media_key_properties. が付きます。メディアキー プロパティの一覧については、Google の定義済みスキーマとカスタム スキーマをご覧ください。

  • タイプが audio のメディア:
    "filter": "media_key_properties.media_type: ANY(\"audio\")"

  • hash_tags 配列に文字列 #winter が含まれているメディア:
    "filter": "media_key_properties.hash_tags: ANY(\"#winter\")"

  • hash_tags 配列の最初の要素が文字列 #winter のメディア:
    "filter": "media_key_properties.hash_tags[0]: ANY(\"#winter\")"

カスタム フィールド

カスタム フィールドのフィルタの例。カスタム属性の場合は、フィールド名の前に attributes. を付けます。

  • 映画のプレミア上映が行われた映画祭を表すカスタム文字列フィールド festival がスキーマにあります。カンヌでプレミア公開された映画のみをフィルタするには:
    "filter": "attributes.festival: ANY(\"Cannes\")

  • カスタム ブール値フィールド audio_desc があり、視覚障がいのある視聴者向けの音声による説明がメディアに含まれている場合は true になります。音声の説明を含むメディアをフィルタするには:
    "filter": "attributes.audio_desc: ANY(true)"

フィルタリング可能なフィールドの制限事項

ブースト サービング管理には次の制限が適用されます。

  • ブースト用のフィルタ式で使用できるのは、文字列型とブール型のプロパティ フィールドのみです。

  • 複数レベルにネストされたフィールドでフィルタすることはできません。たとえば、persons.name でフィルタできますが、フィールド persons.name.stage でフィルタすることはできません(そのようなフィールドが存在する場合でも)。

  • フィルタは完全一致である必要があります。つまり、では、「Christmas Story」や「CHRISTMAS」という映画はブーストされません。

始める前に

  • メディア レコメンデーション アプリとデータストアが作成されていることを確認します。詳細については、メディアのおすすめアプリとデータストアを作成するをご覧ください。

  • 省略可: デフォルトのサービング構成を使用しない場合は、サービング構成を作成するのステップ 1 ~ 5 と 7 に沿って、新しいサービング構成を作成します。アプリが本番環境にある場合は、ブースト制御を本番環境のサービス構成に適用する前に、ブースト制御をテストするための個別のサービス構成を作成することをおすすめします。

  • ブースト制御で使用するフィールドが、スキーマで [フィルタ可能] としてマークされていることを確認します。詳細については、フィールド設定を構成するをご覧ください。フィルタリングの上限もご覧ください。

推奨事項をブーストまたはベリーする

この手順では、ブースト コントロールを作成し、コントロールをサービス提供構成に接続する方法について説明します。

コントロールをサービス構成に接続したら、servingConfigs.recommend メソッドを呼び出すときにサービス構成を指定できます。ブースト コントロールは、返されるおすすめコンテンツの順序に影響を与えるために使用されます。

REST

ブースト サービス提供コントロールを作成してサービス提供構成にアタッチする手順は次のとおりです。

  1. アプリ ID を確認します。アプリ ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

      [アプリ] に移動

    2. [アプリ] ページでアプリの名前を見つけ、[ID] 列からアプリの ID を取得します。

  2. データストア ID を確認します。データストア ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで [Agent Builder] ページに移動し、ナビゲーション メニューで [データストア] をクリックします。

      [データストア] ページに移動

    2. データストアの名前をクリックします。

    3. データストアの [データ] ページで、データストア ID を取得します。

  3. ブースト コントロールを作成します。

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -H "X-Goog-User-Project: PROJECT_NUMBER" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID/controls?controlId=CONTROL_ID" \
    -d '{
          "displayName": "CONTROL_DISPLAY_NAME",
              "solutionType": "SOLUTION_TYPE_RECOMMENDATION",
              "boostAction": {
                   "dataStore": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/dataStores/DATA_STORE_ID",
                   "boost" :  BOOST_VALUE,
                   "filter": "FILTER"
              }
        }'
    
    • PROJECT_NUMBER: Google Cloud プロジェクトの数。

    • CONTROL_DISPLAY_NAME: コントロールを識別するための判読可能な名前。UTF-8 文字列で、最大長は 128 文字です。

    • CONTROL_ID: コントロールの一意の識別子(データストア内)。ID には、小文字、数字、ハイフン、アンダースコアを使用できます。

    • APP_ID: Vertex AI Search アプリの ID。

    • DATA_STORE_ID: Vertex AI Search データストアの ID。

    • BOOST_VALUE: [-1,1] の範囲内の浮動小数点数。値が負の場合、おすすめは結果の下部に表示されます。値が正の値の場合、推奨事項が昇格されます(結果の上位に表示されます)。

    • FILTER: ブーストまたは埋め込むドキュメントを記述するフィルタ式。フィルタ式の作成方法の詳細については、フィルタ式をご覧ください。

  4. おすすめコンテンツに適用するブースト コントロールごとに手順 3 を繰り返します。たとえば、子供向け映画をブーストする 1 つのブースト コントロール(boost-kids)と、ホラー映画を埋め込む 2 つ目のコントロール(bury-horror)を作成できます。

  5. サービス提供構成の ID を確認します。サービング構成 ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

      [アプリ] に移動

    2. [アプリ] ページで、アプリの名前をクリックします。

    3. [構成] ページに移動し、[サービス提供] タブをクリックします。

    4. [ID] 列からサービス提供構成 ID を取得します。

  6. engines.servingConfigs.patch メソッドを使用して更新リクエストで、新しいブースト サービング コントロールをサービス構成に接続します。

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/CONFIG_ID?update_mask=boost_control_ids" \
    -d '{
      "boostControlIds": ["CONTROL_ID"]
    }'
    

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

    • CONFIG_ID: ブースト制御を適用するサービング構成の ID(例: my_app-1234567_id)。前の手順をご覧ください。

    • CONTROL_ID: サービス提供構成に接続する 1 つ以上のブースト サービング制御の ID が含まれます(例: "boost-kids", "bury-horror")。これは文字列の配列です。複数の ID がある場合は、引用符とカンマで区切ってください。

  7. 結果が有効になるまで数分待ちます。

  8. ブースト制御の効果をプレビューします。メディア レコメンデーションを取得するをご覧ください。

ブースト コントロールを更新する

この手順では、既存のブースト コントロールを更新して、ブーストまたはフィルタの値を変更する方法について説明します。

ブースト コントロールをテストした後、ブーストを強めたり弱めたりしたい場合があります。または、フィルタ文字列を変更することもできます。

ブースト値またはフィルタを更新する場合は、engines.controls.patch メソッドを呼び出します。

パッチ メソッドは、boostfilter の値を指定された新しい値に置き換えます。この手順では、boost 値(ステップ 3)と filter 値(ステップ 4)を個別に編集する方法について説明します。ただし、両方を編集する場合は、1 つの curl コマンドで行うことができます。

REST

既存のコントロールのフィルタのブースト値を変更する手順は次のとおりです。

  1. アプリ ID を確認します。アプリ ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

      [アプリ] に移動

    2. [アプリ] ページでアプリの名前を見つけ、[ID] 列からアプリの ID を取得します。

  2. engines.servingConfigs.get メソッドを使用して、更新するブースト コントロールの ID を見つけます。ID がすでにある場合は、次のステップに進みます。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/controls"
    
    • PROJECT_ID: Google Cloud プロジェクトの ID。

    • APP_ID: Vertex AI Search アプリの ID。

  3. コントロールのブースト値を編集します。

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/controls/CONTROL_ID?update_mask=boost_action.boost" \
    -d '{
        "name": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/controls/CONTROL_ID",
        "boostAction": {
          "boost": BOOST_VALUE
        }
    }'
    
    • PROJECT_ID: Google Cloud プロジェクトの ID。

    • APP_ID: Vertex AI Search アプリの ID。

    • CONTROL_ID: 編集するブースト制御の一意の ID。ステップ 2 の GET コマンドによって出力された name フィールドの最後の部分。例: boost-kids

    • BOOST_VALUE: [-1,1] の範囲内の浮動小数点数。値が負の場合、おすすめは結果の下部に表示されます。値が正の値の場合、推奨事項が昇格されます(結果の上位に表示されます)。

  4. ブースト コントロールのフィルタを編集します。

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/controls/CONTROL_ID?update_mask=boost_action.filter" \
    -d '{
        "name": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/controls/CONTROL_ID",
        "boostAction": {
          "filter": "FILTER"
        }
    }'
    
    • PROJECT_ID: Google Cloud プロジェクトの ID。

    • APP_ID: Vertex AI Search アプリの ID。

    • CONTROL_ID: 編集するブースト制御の一意の ID。ステップ 2 の GET コマンドによって出力された name フィールドの最後の部分。

    • FILTER: ブーストまたは埋め込むドキュメントを記述するフィルタ式。フィルタ式の作成方法の詳細については、フィルタ式をご覧ください。

ブースト コントロールを削除する

この手順では、ブースト制御を削除する方法について説明します。ブースト管理を使用していない場合は、許可されている管理の数の割り当てに達したり超過したりしないように、管理を削除することをおすすめします。

ブースト制御を削除する場合は、engines.controls.delete メソッドを呼び出します。

サービス構成に接続されているブースト コントロールは削除できません。ブースト制御を削除しようとすると、エラー メッセージにサービング構成の名前が表示されます。その後、そのサービス構成を削除するか、そのコントロールをサービス構成から切断する必要があります。

REST

ブースト制御を削除する手順は次のとおりです。

  1. アプリ ID を確認します。アプリ ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

      [アプリ] に移動

    2. [アプリ] ページでアプリの名前を見つけ、[ID] 列からアプリの ID を取得します。

  2. engines.servingConfigs.get メソッドを使用して、削除するブースト制御の ID を見つけます。ID がすでにある場合は、次のステップに進みます。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/controls"
    
    • PROJECT_ID: Google Cloud プロジェクトの ID。

    • APP_ID: Vertex AI Search アプリの ID。

  3. 出力を確認します。ブースト コントロールがサービス構成に関連付けられている場合は、サービス構成を更新して、削除するコントロールを削除します。サービス構成を更新してブースト コントロールを削除するをご覧ください。

  4. 次の curl コマンドを実行して、ブースト制御を削除します。

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/controls/CONTROL_ID"
    
    • PROJECT_ID: Google Cloud プロジェクトの ID。

    • APP_ID: Vertex AI Search アプリの ID。

    • CONTROL_ID: 削除するブースト制御の一意の識別子。ステップ 2 の GET コマンドによって出力された name フィールドの最後の部分。

    コントロールが 1 つ以上のサービス構成によってアクティブに参照されていることを示すエラー メッセージが表示された場合は、サービス構成を更新してブースト制御を削除するをご覧ください。

サービス構成を更新してブースト コントロールを削除する

ブースト コントロールを削除する前に、すべてのサービス提供コントロールから切断する必要があります。これを行うには、サービス提供コントロールにパッチを適用して、ブースト コントロールの ID を削除します。

ブースト制御をサービス構成から切断する手順は次のとおりです。

  1. engines.servingConfigs.get リクエストを実行し、レスポンスの boostControlIds フィールドを確認して、サービス構成にアタッチされているブースト コントロールを確認します。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/CONFIG_ID"
    
    • PROJECT_ID: Google Cloud プロジェクトの ID。

    • APP_ID: Vertex AI Search アプリの ID。

    • CONFIG_ID: 詳細を確認するサービング構成の ID。

  2. サービス構成を更新してブースト コントロールを 1 つ削除するには、engines.servingConfigs.patch メソッドを使用します。

    curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/CONFIG_ID?update_mask=boost_control_ids" \
    -d '{
      "boostControlIds": ["CONTROL_ID"]
    }'
    
    • CONFIG_ID: ブースト制御を適用するサービング構成の ID(例: my_app-1234567_id)。前の手順をご覧ください。

    • CONTROL_ID: サービス提供構成に含めるブースト制御の ID が 1 つ以上含まれます。削除するブースト管理は必ず除外してください。これは文字列の配列です。ID が複数ある場合は、区切り文字として引用符とカンマを使用します(例: boost-1", "boost-2)。