如果您有推薦應用程式,可以使用文件欄位篩選推薦結果。本頁面說明如何使用文件欄位,將推薦內容篩選為特定文件組合。雖然本頁的範例是針對媒體推薦內容,但這裡顯示的原則也適用於自訂推薦內容。如要進一步瞭解媒體推薦功能,請參閱「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;
篩選器運算式限制
以下限制適用於推薦內容的篩選器運算式:
- 在括號中嵌入
AND
和OR
運算子的深度有限。篩選器中的邏輯運算式必須採用連接詞正規形式 (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_time
,datetime.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 個可篩選的欄位值。
您可以將結構定義中的文件數量乘以可篩選欄位數量,藉此估算結構定義中可篩選欄位值的總數。如果超出這些限制,會發生以下情況:
- 您無法將其他欄位設為可篩選。
- 應用程式訓練失敗。
篩選建議
如要篩選媒體推薦內容,請按照下列步驟操作:
找出資料儲存庫 ID。如果您已取得資料儲存庫 ID,請略過至下一個步驟。
前往 Google Cloud 控制台的「AI Applications」頁面,然後在導覽選單中按一下「資料儲存庫」。
點按資料儲存庫的名稱。
在資料儲存庫的「資料」頁面中,取得資料儲存庫 ID。
決定要篩選的文件欄位。舉例來說,如果要處理開始前的文件,您可以使用
categories
欄位做為篩選條件。如要讓
categories
欄位可篩選,請按照下列步驟操作:前往 Google Cloud 控制台的「AI Applications」頁面。
按一下推薦應用程式。
按一下 [Schema] (結構定義) 分頁標籤。這個分頁會顯示目前的欄位設定。
按一下 [編輯]。
如果尚未選取,請選取「類別」列中的「可篩選」核取方塊,然後按一下「儲存」。
請等待六小時,讓結構定義編輯內容生效。六小時後,您可以繼續進行下一個步驟。
如要取得
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" }