篩選建議

如果您有推薦應用程式,可以使用文件欄位篩選推薦結果。本頁面說明如何使用文件欄位,將推薦內容篩選為特定文件組合。雖然本頁的範例是針對媒體推薦內容,但這裡顯示的原則也適用於自訂推薦內容。如要進一步瞭解媒體推薦功能,請參閱「Vertex AI Search for media 簡介」。

篩選推薦內容和資料儲存庫更新

任何資料儲存庫更新後,您需要等待最多 8 小時,等待模型重新訓練。這是因為模型需要瞭解文件中繼資料的目前值,以及哪些欄位已設為可篩選的欄位。您必須等待文件變更和結構定義變更套用完成。系統不會即時篩選推薦內容 (與搜尋不同)。

篩選器和多元化設定 (僅限媒體推薦)

除了篩選器之外,應用程式的多元化設定也會影響媒體推薦回應中傳回的結果。濾鏡和多元化策略的效果會加總。系統會先進行分類,然後再進行篩選。

結合高層級的規則多樣性和以類別為依據的屬性篩選功能,通常會導致輸出內容為空白。這是因為多樣性高,應用程式會限制每個類別只傳回一個結果。

舉例來說,假設您想推薦與《玩具總動員》相關的電影,您將以規則為準的多樣化程度設為高。由於多樣性高,雖然系統可能會推薦多部電影,但只會傳回兒童電影類別中的一部電影 (例如 WALL·E)。套用兒童電影篩選器後,系統只會將 WALL·E 列為推薦內容。

如要進一步瞭解多元化資訊,請參閱「讓媒體推薦內容多元化」。

事前準備

請確認您已建立推薦應用程式和資料儲存庫。詳情請參閱「建立媒體應用程式」或「建立自訂推薦內容資料儲存區」。

文件範例

請查看以下媒體文件範例。您可以參考這些範例文件,瞭解本頁內容。

{"id":"1","schemaId":"default_schema","structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"88125","schemaId":"default_schema","structData":{"title":"Harry Potter and the Deathly Hallows: Part 2 (2011)","categories":["Action","Adventure","Drama","Fantasy","Mystery","IMAX"],"uri":"http://mytestdomain.movie/content/88125","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"2857","schemaId":"default_schema","structData":{"title":"Yellow Submarine (1968)","categories":["Adventure","Animation","Comedy","Fantasy","Musical"],"uri":"http://mytestdomain.movie/content/2857","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"60069","schemaId":"default_schema","structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}

篩選運算式

使用篩選器運算式定義推薦內容篩選器。

篩選運算式語法

以下的 擴充 Backus-Naur 格式總結了篩選器運算式語法,可用於定義最佳化建議篩選器。

  # A single expression or multiple expressions that are joined by "AND" or "OR".
  filter = expression, { " AND " | "OR", expression };
  # An expression can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
    # A parenthesized expression
    | "(", expression, ")"
    # A simple expression applying to a textual field.
    # Function "ANY" returns true if the field contains any of the literals.
    textual_field, ":", "ANY", "(", literal, { ",", literal }, ")"
    # OR filter by "available"
    available, ":", "true",
  # A literal is any double-quoted string. You must escape backslash (\) and
  # quote (") characters.
  literal = double-quoted string;
  textual_field = see the tables below;

篩選器運算式限制

以下限制適用於推薦內容的篩選器運算式:

  • 在括號中嵌入 ANDOR 運算子的深度有限。篩選器中的邏輯運算式必須採用連接詞正規形式 (CNF)。最複雜的支援邏輯運算式可以是 AND 連結的條件清單,且只包含 OR 運算子,例如:(... OR ... OR ...) AND (... OR ...) AND (... OR ...)
  • 您可以使用 NOT 關鍵字或 - 來否定運算式。這項功能僅適用於單一引數的 ANY() 運算式。

  • available 限制必須位於頂層。這些運算子無法用於 OR 子句或否定運算子 (NOT)。您只能使用 available: true。如果省略這個篩選器,系統可能會將已過期和尚未提供的文件做為建議。

    available 欄位會對應至下列邏輯:

    datetime.now >= available_time AND datetime.now <= expire_time

    如果未設定 expire_timedatetime.now <= expire_time 會解析為 true

  • 頂層 AND 子句中的條件數量上限為 20 個。

  • OR 子句最多可包含 100 個引數,這些引數會納入 ANY() 運算式。如果 OR 子句含有多個 ANY() 運算式,則這些運算式的引數都會計入此限制。例如,categories: ANY("drama", "comedy") OR categories: ANY("adventure") 有三個引數。

篩選運算式範例

下表列出有效和無效的篩選器運算式範例。並說明無效範例無效的原因。

運算式 有效 附註
language_code: ANY("en", "fr")
NOT language_code: ANY("en")
NOT language_code: ANY("en", "fr") 對多個引數的 ANY() 執行否定運算。
language_code: ANY("en", "fr") OR categories: ANY("drama")
(language_code: ANY("en") OR language_code: ANY("fr")) AND categories: ANY("drama")
(language_code: ANY("en") AND language_code: ANY("fr")) OR categories: ANY("drama") 不符合聯合標準形式。
(language_code: ANY("en")) AND (available: true)
(language_code: ANY("en")) OR (available: true) OR 運算式中的 available 與其他條件結合。

下列篩選運算式可篩選屬於戲劇或動作類別、非英文且可用的文件:

categories: ANY("drama", "action") AND NOT language_code: ANY("en") AND available: true

篩選限制

每個可篩選的文件欄位都會在每個模型中消耗一些記憶體。下列限制有助於避免放送成效受到不利影響:

  • 在結構定義中,最多可將 10 個自訂欄位設為可篩選。

    如果應用程式訓練期間找到超過 10 個自訂欄位,系統只會使用其中 10 個。

  • 結構定義中最多可包含 100,000,000 個可篩選的欄位值。

    您可以將結構定義中的文件數量乘以可篩選欄位數量,藉此估算結構定義中可篩選欄位值的總數。如果超出這些限制,會發生以下情況:

    • 您無法將其他欄位設為可篩選。
    • 應用程式訓練失敗。

篩選建議

如要篩選媒體推薦內容,請按照下列步驟操作:

  1. 找出資料儲存庫 ID。如果您已取得資料儲存庫 ID,請略過至下一個步驟。

    1. 前往 Google Cloud 控制台的「AI Applications」頁面,然後在導覽選單中按一下「資料儲存庫」

      前往「資料儲存庫」頁面

    2. 點按資料儲存庫的名稱。

    3. 在資料儲存庫的「資料」頁面中,取得資料儲存庫 ID。

  2. 決定要篩選的文件欄位。舉例來說,如果要處理開始前的文件,您可以使用 categories 欄位做為篩選條件。

  3. 如要讓 categories 欄位可篩選,請按照下列步驟操作:

    1. 前往 Google Cloud 控制台的「AI Applications」頁面。

      AI 應用程式

    2. 按一下推薦應用程式。

    3. 按一下 [Schema] (結構定義) 分頁標籤。這個分頁會顯示目前的欄位設定。

    4. 按一下 [編輯]

    5. 如果尚未選取,請選取「類別」列中的「可篩選」核取方塊,然後按一下「儲存」

    6. 請等待六小時,讓結構定義編輯內容生效。六小時後,您可以繼續進行下一個步驟。

  4. 如要取得 categories 欄位的推薦內容和篩選條件,請在指令列中執行下列程式碼:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d '{
         "userEvent": {
           "eventType": "EVENT_TYPE",
           "userPseudoId": "USER_PSEUDO_ID",
           "documents": {
             "id": "DOCUMENT_ID"
           }
         },
         "params": {
           "returnDocument": true,
           "attributeFilteringSyntax": true,
           "strictFiltering": true
         },
         "filter": "FILTER"
       }' \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/SERVING_CONFIG_ID:recommend"
    

    更改下列內容:

    • PROJECT_ID:專案 ID。
    • DATA_STORE_ID:資料儲存庫的 ID。
    • DOCUMENT_ID:您要預覽推薦內容的文件 ID。請使用您在擷取資料時,為這份文件使用的 ID。
    • EVENT_TYPE:使用者事件類型。如需瞭解 eventType 值,請參閱 UserEvent
    • USER_PSEUDO_ID:使用者的化名 ID。您可以使用 HTTP Cookie 填入這個欄位,這樣系統就能唯一識別單一裝置上的訪客。請勿為多位使用者將這個欄位設為相同的 ID。這會合併他們的事件記錄,並降低模型品質。請勿在這個欄位中加入個人識別資訊 (PII)。
    • SERVING_CONFIG_ID:供應設定的 ID。服務設定 ID 與引擎 ID 相同,因此請在此處使用引擎 ID。
    • FILTER:文字欄位,可讓您使用篩選運算式語法,針對特定欄位組合進行篩選。預設值為空字串,表示不會套用篩選器。

    舉例來說,假設您想針對特定媒體播放使用者事件提供建議,並且希望篩選建議結果,只包含 (1) 屬於「兒童」類別,且 (2) 目前可用的文件。方法是在呼叫中加入下列陳述式:

    • "eventType": "media-play"
    • "filter": "categories: ANY(\"Children\") AND available: true"

    詳情請參閱 recommend 方法。

    按一下即可查看回覆範例。

    如果您提出上述建議要求,系統會回傳類似以下的內容。請注意,回應中包含兩份文件,其中 categories 值為 Children,而 availability_start_time 值則晚於目前日期。

    {
    "results": [
      {
        "id":"1",
        "schemaId":"default_schema",
        "structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1",
        "availability_start_time":"2023-01-01T00:00:00Z",
        "media_type":"movie"
        }
      },
      {
        "id":"60069",
        "schemaId":"default_schema",
        "structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069",
        "availability_start_time":"2023-01-01T00:00:00Z",
        "media_type":"movie"
        }
      }
    ],
    "attributionToken": "ChMzMDk3NTQ4MzQxOTcxOTE0ODM1GglhZi10ZXN0LTEiDmFmLXRlc3QtMTE0NTE0KAAwBg"
    }