篩選即時建議 - Amazon Personalize

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

篩選即時建議

您可以使用 Amazon Personalize 主控台 AWS Command Line Interface (AWS CLI) 或 來篩選即時建議 AWS SDKs。

當您取得個人化項目建議或類似項目時,您可以在請求中指定提升。提升會使用篩選條件來定義適用於建議項目可設定子集的其他業務規則。如需詳細資訊,請參閱在即時建議中提升項目

篩選即時建議 (主控台)

若要使用主控台篩選即時建議,請建立篩選條件,然後將其套用至建議請求。

注意

若要使用篩選條件來篩選建議,其中包含 2020 年 11 月 10 日之前部署的參數和行銷活動,您必須使用 UpdateCampaign操作或建立新的行銷活動來重新部署行銷活動。

建立篩選條件 (主控台)

若要在主控台中建立篩選條件,請選擇包含您想要用來取得篩選建議之行銷活動或推薦人的資料集群組。然後提供篩選條件名稱和篩選條件表達式。

建立篩選條件 (主控台)
  1. https://console.aws.amazon.com/personalize/在家中開啟 Amazon Personalize 主控台並登入您的帳戶。

  2. 選擇包含您想要用來取得篩選建議之行銷活動或推薦人的資料集群組。

  3. 在導覽窗格中,選擇篩選條件,然後選擇建立新篩選條件。隨即顯示建立篩選條件頁面。

    顯示具有篩選條件名稱和表達式欄位的建立篩選條件頁面。
  4. 針對篩選條件名稱,輸入篩選條件的名稱。當您將篩選條件套用到建議請求時,會依此名稱選擇篩選條件。

  5. 針對表達式,選擇建置表達式手動新增表達式,然後建置或插入您的表達式:

    • 若要使用表達式建置器,請選擇建置表達式。表達式建置器提供結構、欄位和準則,用於建置正確格式的篩選條件表達式。如需詳細資訊,請參閱使用篩選條件表達式建置器

    • 若要輸入您自己的表達式,請選擇手動新增表達式。如需詳細資訊,請參閱篩選條件表達式元素

  6. 選擇 Finish (完成)。篩選條件的概觀頁面會顯示篩選條件的 Amazon Resource Name (ARN)、狀態和完整的篩選條件表達式。若要刪除篩選條件,請選擇刪除。如需在離開概觀頁面後尋找和刪除篩選條件的相關資訊,請參閱 刪除篩選條件 (主控台)

    使用篩選條件的 ARN和 表達式來描述篩選條件詳細資訊頁面。

套用篩選條件 (主控台)

若要套用篩選條件,請在測試建議者 (適用於建議者) 或測試行銷活動結果 (適用於自訂行銷活動) 中選擇篩選條件,然後輸入任何篩選條件參數值。然後取得使用者的建議。

重要

對於使用 INCLUDE元素的篩選條件表達式,您必須為表達式中定義的所有參數提供值。對於具有使用 EXCLUDE元素之表達式的篩選條件,您可以省略 filter-values。在此情況下,Amazon Personalize 不會使用該表達式的該部分來篩選建議。

套用篩選條件 (主控台)
  1. https://console.aws.amazon.com/personalize/在家中開啟 Amazon Personalize 主控台並登入您的帳戶。

  2. 選擇包含您想要用來取得篩選建議之行銷活動或建議的資料集群組。

  3. 根據您的資料集群組類型或資源類型,執行下列其中一項操作:

    1. 對於網域資料集群組,在導覽窗格中選擇建議者

    2. 對於自訂資料集群組或自訂資源,在導覽窗格中選擇自訂資源,然後選擇行銷活動

  4. 建議者行銷活動頁面上,選擇目標建議者或行銷活動。

  5. 為了進行比較,請先取得建議,而不套用篩選條件。在測試建議者/測試行銷活動結果下,輸入您要取得建議的使用者 ID,或相關項目的項目 ID,然後選擇取得建議。隨即顯示包含最佳建議的資料表。

    顯示建議結果,而不套用篩選條件。
  6. 篩選條件名稱功能表中,選擇您建立的篩選條件。如果您的篩選條件有任何預留位置參數,則會顯示每個參數的關聯欄位。

  7. 如果您使用具有預留位置參數的篩選條件,請針對每個參數輸入值以設定篩選條件。若要對一個參數使用多個值,請以逗號分隔每個值。

  8. 使用與先前步驟相同的 User IDItem ID ,選擇取得建議。系統會顯示建議表格。

    顯示套用篩選條件的建議結果。

    例如,如果使用者已購買建議項目,篩選條件會從建議清單中將其移除。在此範例中,項目 2657、2985 已由使用者未購買的最合適項目取代 (項目 2641 和 1573)。

使用篩選條件表達式建置器

建立篩選條件頁面上的表達式建置器提供結構、欄位和準則,用於建置正確格式的篩選條件。

顯示建立篩選條件頁面上表達式建置器的欄位。

若要建置篩選條件表達式:

  • 使用類型動作屬性運算子欄位來建立表達式。

    對於,輸入固定值,或若要在取得建議時設定篩選條件,請輸入 $ + 參數名稱。例如:$GENRES。當您取得建議時,您會提供要篩選的值。在此範例中,您會在取得建議時提供類型或類型清單。

    以逗號分隔多個非參數值。您無法將逗號分隔參數新增至篩選條件。

    注意

    在您選擇屬性 (dataset.field格式) 之後,由 ANDOR條件鏈結的任何後續資料列的屬性值必須使用相同的 dataset

  • 使用 X 按鈕,從您的表達式中新增或刪除資料列。您無法刪除第一列。

  • 對於新資料列,請使用 AND 選單上的 IFANDOR運算子來建立條件鏈。

    針對IF條件:

    • 每個表達式只能包含一個IF項目。如果您移除 IF 條件,表達式建置器會移除其之後的任何AND條件。

    • 您只能將IF條件用於依 篩選的表達式CurrentUser

  • 選擇新增表達式按鈕來新增額外的篩選條件表達式,以便更精確地篩選。每個表達式都會先獨立評估,結果是兩個結果的聯集。

    注意

    若要建立同時使用項目和項目互動資料集,或動作和動作互動資料集的篩選條件,您必須使用多個表達式。

表達式建置器範例

下列範例示範如何建置篩選條件,以排除您在取得建議時指定的類型項目 (請注意 $GENRES 預留位置參數)。篩選條件也會排除 DOWNLOAD_COUNT大於 的項目200,但僅限於目前使用者的使用期限大於 時17

說明如何使用運算式建置器來建置範例篩選條件運算式。

刪除篩選條件 (主控台)

刪除篩選條件會從資料集群組的篩選條件清單中移除篩選條件。

重要

當批次推論任務正在進行時,您無法刪除篩選條件。

刪除篩選條件 (主控台)
  1. https://console.aws.amazon.com/personalize/在家中開啟 Amazon Personalize 主控台並登入您的帳戶。

  2. 資料集群組清單中,選擇包含您要刪除之篩選條件的資料集群組。

  3. 在導覽窗格中,選擇篩選條件

  4. 從篩選條件清單中,選擇您要刪除的篩選條件,然後選擇檢視詳細資訊。隨即顯示篩選條件詳細資訊頁面。

  5. 選擇刪除,然後在確認對話方塊中確認刪除。

篩選即時建議 (AWS CLI)

若要使用 篩選建議 AWS CLI,您可以建立篩選條件,然後在 GetRecommendationsGetPersonalizedRanking請求ARN中指定篩選條件來套用。

重要

若要使用篩選條件篩選建議,其中包含參數和您在 2020 年 11 月 10 日之前部署的行銷活動,您必須使用 UpdateCampaign 呼叫或建立新的行銷活動來重新部署行銷活動。

建立篩選條件 (AWS CLI)

使用下列create-filter操作建立篩選條件並指定篩選條件表達式。

Filter name 將 取代為篩選條件的名稱,將 Dataset group ARN取代為資料集群組的 Amazon Resource Name (ARN)。將範例取代filter-expression為您自己的篩選條件表達式。

aws personalize create-filter \ --name Filter name \ --dataset-group-arn dataset group arn \ --filter-expression "EXCLUDE ItemID WHERE Items.CATEGORY IN (\"$CATEGORY\")"

如果成功,ARN則會顯示篩選條件。記錄以供日後使用。若要驗證篩選條件是否作用中,請在使用篩選條件之前使用 DescribeFilter操作。

如需 API 的詳細資訊,請參閱 CreateFilter。如需篩選表達式的詳細資訊,包括範例,請參閱 篩選表達式結構和元素

套用篩選條件 (AWS CLI)

當您使用 get-recommendationsget-action-recommendationsget-personalized-ranking操作時,您可以透過傳遞 filter-arn和任何篩選條件值做為參數來套用篩選條件。

以下是 get-recommendations操作的範例。將 Campaign ARN取代為行銷活動的 Amazon Resource Name (ARN),User ID將 取代為您取得建議的使用者 ID,並將 Filter ARN取代為篩選條件ARN的 。如果您從推薦者而非行銷活動取得建議,請使用 來recommender-arn取代 ARN --campaign-arn並為推薦者提供 。

如果您的表達式有任何參數,請包含 filter-values 物件。針對篩選條件表達式中的每個參數,提供參數名稱 (區分大小寫) 和值。例如,如果您的篩選條件表達式有 $GENRE 參數,請提供「GENRE」做為索引鍵,而類型或類型,例如 "Comedy"做為值。使用逗號分隔多個值。例如:"\"comedy\",\"drama\",\"horror"\"

重要

對於使用 INCLUDE元素包含項目的篩選條件表達式,您必須提供表達式中定義之所有參數的值。對於具有使用 EXCLUDE元素排除項目之表達式的篩選條件,您可以省略 filter-values。在此情況下,Amazon Personalize 不會使用該表達式的該部分來篩選建議。

aws personalize-runtime get-recommendations \ --campaign-arn Campaign ARN \ --user-id User ID \ --filter-arn Filter ARN \ --filter-values '{ "Parameter name": "\"value\"", "Parameter name": "\"value1\",\"value2\",\"value3\"" }'

刪除篩選條件 (AWS CLI)

使用下列delete-filter操作來刪除篩選條件。filter ARN 將 取代為 篩選條件ARN的 。

aws personalize delete-filter --filter-arn Filter ARN

篩選即時建議 (AWS SDKs)

若要使用 篩選建議 AWS SDKs,您可以建立篩選條件,然後在 GetRecommendationsGetPersonalizedRanking請求ARN中指定篩選條件來套用。

重要

若要使用篩選條件篩選建議,其中包含參數和您在 2020 年 11 月 10 日之前部署的行銷活動,您必須使用 UpdateCampaign 呼叫或建立新的行銷活動來重新部署行銷活動。

建立篩選條件 (AWS SDKs)

使用 CreateFilter操作建立新的篩選條件。下列程式碼說明如何建立篩選條件。指定篩選條件名稱、資料集群組的 Amazon Resource Name (ARN),並提供篩選條件表達式。

SDK for Python (Boto3)
import boto3 personalize = boto3.client('personalize') response = personalize.create_filter( name = 'Filter Name', datasetGroupArn = 'Dataset Group ARN', filterExpression = 'EXCLUDE ItemID WHERE Items.CATEGORY IN ($CATEGORY)' ) filter_arn = response["filterArn"] print("Filter ARN: " + filter_arn)
SDK for Java 2.x
public static String createFilter(PersonalizeClient personalizeClient, String filterName, String datasetGroupArn, String filterExpression) { try { CreateFilterRequest request = CreateFilterRequest.builder() .name(filterName) .datasetGroupArn(datasetGroupArn) .filterExpression(filterExpression) .build(); return personalizeClient.createFilter(request).filterArn(); } catch(PersonalizeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }
SDK for JavaScript v3
// Get service clients module and commands using ES6 syntax. import { CreateFilterCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); // Set the filter's parameters. export const createFilterParam = { datasetGroupArn: "DATASET_GROUP_ARN" /* required */, name: "NAME" /* required */, filterExpression: "FILTER_EXPRESSION" /*required */, }; export const run = async () => { try { const response = await personalizeClient.send( new CreateFilterCommand(createFilterParam), ); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

記錄篩選條件ARN以供日後使用。若要驗證篩選條件是否作用中,請在使用篩選條件之前使用 DescribeFilter操作。如需 API 的詳細資訊,請參閱 CreateFilter。如需篩選表達式的詳細資訊,包括範例,請參閱 篩選表達式結構和元素

套用篩選條件 (AWS SDKs)

當您使用 GetActionRecommendations或 GetPersonalizedRanking 操作時 GetRecommendations,透過傳遞 filterArn和任何篩選條件值做為參數來套用篩選條件。

下列程式碼說明如何取得使用者的篩選 Amazon Personalize 項目建議。指定您要取得建議的使用者 ID、行銷活動的 Amazon Resource Name (ARN) 和篩選條件ARN的 。如果您從推薦者而非行銷活動取得建議,請使用 recommenderArn,而非 ARN ,campaignArn並為推薦者提供 。

對於 filterValues,針對篩選條件表達式中的每個選用參數,提供參數名稱 (區分大小寫) 和值或值。例如,如果您的篩選條件表達式有 $GENRES 參數,請提供「GENRES」做為索引鍵,而類型或類型,例如 "\"Comedy"\"做為值。對於多個值,請以逗號分隔每個值。例如:"\"comedy\",\"drama\",\"horror\""

重要

對於使用 INCLUDE元素包含項目的篩選條件表達式,您必須提供表達式中定義之所有參數的值。對於具有使用 EXCLUDE元素排除項目之表達式的篩選條件,您可以省略 filter-values。在此情況下,Amazon Personalize 不會使用該表達式的該部分來篩選建議。

SDK for Python (Boto3)
import boto3 personalize_runtime = boto3.client("personalize-runtime") response = personalize_runtime.get_recommendations( campaignArn = "Campaign ARN", userId = "User ID", filterArn = "Filter ARN", filterValues = { "Parameter name": "\"value1\"", "Parameter name": "\"value1\",\"value2\",\"value3\"" .... } )
SDK for Java 2.x

下列範例使用兩個參數,一個有兩個值,另一個值為一個值。根據您的篩選條件表達式,修改程式碼以新增或移除 parameterName 和 parameterValue 欄位。

public static void getFilteredRecs(PersonalizeRuntimeClient personalizeRuntimeClient, String campaignArn, String userId, String filterArn, String parameter1Name, String parameter1Value1, String parameter1Value2, String parameter2Name, String parameter2Value){ try { Map<String, String> filterValues = new HashMap<>(); filterValues.put(parameter1Name, String.format("\"%1$s\",\"%2$s\"", parameter1Value1, parameter1Value2)); filterValues.put(parameter2Name, String.format("\"%1$s\"", parameter2Value)); GetRecommendationsRequest recommendationsRequest = GetRecommendationsRequest.builder() .campaignArn(campaignArn) .numResults(20) .userId(userId) .filterArn(filterArn) .filterValues(filterValues) .build(); GetRecommendationsResponse recommendationsResponse = personalizeRuntimeClient.getRecommendations(recommendationsRequest); List<PredictedItem> items = recommendationsResponse.itemList(); for (PredictedItem item: items) { System.out.println("Item Id is : "+item.itemId()); System.out.println("Item score is : "+item.score()); } } catch (PersonalizeRuntimeException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }
SDK for JavaScript v3
// Get service clients module and commands using ES6 syntax. import { GetRecommendationsCommand } from "@aws-sdk/client-personalize-runtime"; import { personalizeRuntimeClient } from "./libs/personalizeClients.js"; // Or, create the client here: // const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION"}); // Set recommendation request parameters. export const getRecommendationsParam = { campaignArn: "CAMPAIGN_ARN" /* required */, userId: "USER_ID" /* required */, numResults: 15 /* optional */, filterArn: "FILTER_ARN" /* required to filter recommendations */, filterValues: { PROPERTY: '"VALUE"' /* Only required if your filter has a placeholder parameter */, }, }; export const run = async () => { try { const response = await personalizeRuntimeClient.send( new GetRecommendationsCommand(getRecommendationsParam), ); console.log("Success!", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

刪除篩選條件 (AWS Python SDK)

使用下列delete_filter方法刪除篩選條件。filter ARN 將 取代為 篩選條件ARN的 。

import boto3 personalize = boto3.client("personalize") response = personalize.delete_filter( filterArn = "filter ARN" )