亚马逊AWS官方博客

在 Amazon Personalize 中引入推荐过滤器

Original URL:https://aws.amazon.com/cn/blogs/machine-learning/introducing-recommendation-filters-in-amazon-personalize/

 

今天,我们兴奋地宣布,Amazon Personalize服务正式迎来“推荐过滤器(Recommendation Filters)”功能。推荐过滤器可对用户已经购买的产品、以往观看过的视频以及消费过的其他数字内容进行过滤与推荐,借此提高个性化推荐结果的准确率。以往推荐系统提供的推荐内容往往准确率较低,此类推荐可能影响用户情绪、导致用户参与度降低,最终引发业务营收损失。目前,大部分客户通过编写自定义代码解决此类问题,即通过代码将个性化系统(例如Amazon Personalize)针对每位用户存储在数据库内的数据进行比较,借此提供更为准确的推荐内容,同时删除推荐中用户已经购买过的条目。但这一实现过程相当耗时且极易出错。Amazon Personalize的推荐过滤器消除了编写自定义代码的必要,并可自动过滤掉用户已经购买过的产品条目。

基于Amazon公司过去20多年的个性化经验,Amazon Personalize使用户能够通过个性化产品、内容推荐以及更具针对性的宣传促销活动提高客户参与度。在机器学习技术的加持下,Amazon Personalize将为您的网站与应用程序生成质量更高的推荐。更重要的是,无需任何机器学习经验,您即可直接使用简单API、通过数次单击轻松构建起复杂的个性化功能。Amazon Personalize将负责处理并检查您的数据,确定其中有意义的内容,自动选择正确的机器学习算法,并根据您的数据完成自定义模型的训练与优化。您的所有数据都将经过加密,在保障隐私与安全的同时,保证数据仅被用于为用户生成推荐。

推荐过滤器的设置与使用非常简单。首先,我们使用Amazon Personalize控制台或API通过Amazon Personalize专用的DSL(领域特定语言)创建过滤器。接下来,大家就可以使用GetRecommendations 或 GetPersonalizedRanking API;或者通过批量推理作业以批量形式生成推荐内容。

本文将引导大家逐步完成在Amazon Personalize中设置及使用推荐过滤器的完整流程。

先决条件

要定义及使用过滤器,我们首先需要设置以下Personalize资源。在完成本文中的演练之前,您需要在Amazon Personalize控制台中按照控制台入门指南中的说明进行操作:

  1. 创建一个数据集组。
  2. 使用以下提供的schema创建一个Interactions数据集,而后使用此数据文件进行数据导入。
    {
        "type": "record",
        "name": "Interactions",
        "namespace": "com.amazonaws.concierge.schema",
        "fields": [
            {
                "name": "ITEM_ID",
                "type": "string"
            },
            {
                "name": "USER_ID",
                "type": "string"
            },
            {
                "name": "TIMESTAMP",
                "type": "long"
            },
            {
                "name": "EVENT_TYPE",
                "type": "string"
            },
            {
                "name": "EVENT_VALUE",
                "type": [
                    "null",
                    "float"
                ]
            }
        ],
        "version": "1.0"
    }
  3.  使用任意recipe创建一套解决方案,在本文中我们使用aws-hrnn recipe。
  4.  创建一项促销活动。

创建过滤器

现在,我们已经完成了Amazon Personalize资源的设置,接下来是对过滤器进行定义与测试。

过滤器表达语言

Amazon Personalize使用自己的领域特定语言(即过滤器表达式)以确定需要在一组推荐中排除或包含的条目。过滤器表达式的作用域为数据集组;大家只能使用该表达式过滤处于同一数据集组范围内的促销活动或解决方案版本(批量推荐)。Amazon Personalize能够根据用户的交互历史记录实现条目过滤,以下为过滤器表达式的部分示例。

  • 要从用户推荐中删除所有以往购买过的条目,请使用以下过滤器表达式:
    EXCLUDE itemId WHERE INTERACTIONS.event_type in ("Purchase")
  • 要删除用户以往 查看、单击或者下载过的条目,请使用以下过滤器表达式:
    EXCLUDE itemId WHERE INTERACTIONS.event_type in ("View","Click","Download")
  • 要删除用户以往交互过的所有条目,请使用以下过滤器表达式:
    EXCLUDE itemId WHERE INTERACTIONS.event_type in ("*")

您可以对交互数据集中所包含的任意事件类型进行过滤。关于更多详细信息,请参阅数据集与Schema。关于过滤器定义DSL的更多详细信息,请参阅相关说明文档

通过控制台创建过滤器

我们可以使用之前提到的DSL在Amazon Personalize控制台上创建过滤器。要创建过滤器,请完成以下操作步骤:

  1. 在Amazon Personalize控制台上的“Filters”选项卡中,选择Create filter。
  2. 在Filter name部分,输入您的过滤器名称。
  3. 在Add filtered event types部分,输入您希望从用户推荐中删除的交互类型。
  4. 选择Add event type,系统将根据您选择过滤的事件类型自动创建对应的过滤器表达式。
  5. 选择Finish

创建过滤器之后,我们将进入包含过滤器详细信息的页面。在这里,大家可以查看关于过滤器的更多细节信息,包括过滤器ARN以及您所创建的对应过滤器表达式。大家也可以在此页面上删除过滤器,或者通过摘要页面创建更多过滤器。

您还可以通过Amazon Personalize中的 createFilter API创建过滤器。关于更多详细信息,请参阅相关说明文档

通过控制台使用过滤器处理实时推荐

Amazon Personalize控制台可帮助用户从“Campaigns”页面中实时检查实时推荐。在此页面中,大家可以在检索用户推荐的同时应用过滤器。为此,请导航至“Campaign”选项卡;该数据集应与创建过滤器时使用的数据集相同。而后,您可以测试应用过滤条件并观察对推荐结果的影响。

未使用过滤器时的推荐

以下截屏所示,为未使用过滤器时的推荐结果。

从 Interactions数据集处,大家可以看到该用户以往购买过的一些推荐条目。 Interactions数据集中包含以下数据点:

USER_ID,ITEM_ID,EVENT_TYPE,TIMESTAMP
1,2657,Purchase,964983426
1,2985,Purchase,964983034

以上数据片段所示,代表UserId 1已经购买过推荐内容中的第三与第四项条目。

使用过滤器时的推荐

以下截屏所示,为在使用预定义过滤器从推荐中删除先前购买过的条目之后,给出的推荐结果。

结果表明,过滤器已经从推荐内容中删除了先前购买过的条目(条目ID 26572985);过滤器将删除与该用户的事件类型Purchase交互过的条目。

通过控制台将过滤器应用于批量推荐

要通过控制台将过滤器应用于批量推荐,请参照实时推荐的相同过程。但请注意在“Create batch inference job”页面上选择过滤器名称,以将先前创建的过滤器应用于本次批量推荐。

通过SDK将过滤器应用于实时推荐

您也可以将FilterArn作为附加及可选参数添加至 GetRecommendations调用当中,通过SDK或者API将过滤器应用于实时推荐。使用“filterArn”作为参数键,并将filterArn作为其值字符串。 FilterArnCreateFilter API调用所返回的一条唯一标识键。您还可以在过滤器的详细信息页面上找到过滤器的ARN。

以下示例代码为GetRecommendations API的请求正文,此请求正文负责将过滤器应用于推荐结果:

{
    "campaignArn": "arn:aws:personalize:us-west-2:000000000000:campaign/test-campaign",
    "userId": "1",
    "itemId": "1",
    "numResults": 5,
    "filterArn": "arn:aws:personalize:us-west-2:000000000000:filter/test-filter"
}

通过SDK将过滤器应用于批量推荐

若要在使用SDK时将过滤器应用于批量推荐,请在请求正文中提交filterArn作为可选参数。使用“filterArn”作为参数键,并将filterArn作为其值字符串。

总结

Amazon Personalize中的推荐过滤器可帮助用户根据业务需求对推荐内容进行微调,且您无需分神设计任何后处理逻辑。关于通过Amazon Personalize优化用户体验的更多详细信息,请参阅Amazon Personalize是什么?

 

本篇作者

Adam Ta

AWS公司软件开发工程师,Amazon Personalize开发团队成员。在业余时间,Adam喜欢演奏音乐并参加各类音乐表演活动。

Vaibhav Sethi

Amazon Personalize产品经理。他专注于开发各类能够降低机器学习解决方案构建难度的产品。在业余时间,他喜欢远足与阅读。