11

image

常年混迹于网络,相信你对各大网站和应用的「个性化推荐」系统已经再熟悉不过了。

  • 长假前搜索某个热门旅游城市,随后获得了吃喝玩乐等一系列推荐,挺方便!
  • 买了一款最新电子产品,随后获得了各种配件的推荐,好贴心!
  • 给某位喜欢的歌手点赞,随后获得了更多同类型或同风格的好音乐推荐,真棒!

不过!!这一切都必须基于一个前提:这些推荐系统真的能充分了解你的喜好,并准确推荐你真的会喜欢需要的东西!要想做到这一点可并不容易。回想一下自己的实际体验,是否有很多时候,这些推荐系统的推荐并不合你口味的,甚至是毫无必要的,例如在你购买一款很耐用的大件产品后,反而会密集推送更多同类产品……

对商家来说,如果推荐系统提供的推荐内容准确率低,此类推荐可能影响用户情绪,导致用户参与度降低,最终引发业务营收损失。因此很多企业会编写自定义代码解决此类问题,即通过代码将个性化系统针对每位用户存储在数据库内的数据进行比较,借此提供更为准确的推荐内容,同时删除推荐中用户已经购买过的条目。但老实说,这一实现过程相当耗时且极易出错。

Amazon Personalize 通过「推荐过滤器」为你解忧

Amazon Personalize 是一种客户体验个性化服务,可以帮助开发人员通过 Amazon.com 使用的机器学习技术来构建应用程序,从而提供实时个性化推荐,而无需 ML 专业知识。

借助 Amazon Personalize,开发人员可以轻松构建能够提供广泛的个性化体验的应用程序,包括特定产品推荐、个性化的产品重排序和定制直销。Amazon Personalize 是一项完全托管型机器学习服务,超越了严格的基于静态规则的推荐系统,并且可以训练、调整和部署定制的ML模型,以跨行业(如零售、媒体和娱乐)向客户提供高度定制的建议。

最近,Amazon Personalize 服务正式迎来「推荐过滤器」(Recommendation Filters)功能。推荐过滤器可对用户已经购买的产品、以往观看过的视频以及消费过的其他数字内容进行过滤与推荐,借此提高个性化推荐结果的准确率。

基于亚马逊云科技公司过去20多年的个性化经验,Amazon Personalize 使用户能够通过个性化产品、内容推荐以及更具针对性的宣传促销活动提高客户参与度。在机器学习技术的加持下,Amazon Personalize 将为网站与应用程序生成质量更高的推荐。

更重要的是,无需任何机器学习经验,开发人员即可直接使用简单 API,通过数次单击轻松构建起复杂的个性化功能。Amazon Personalize 将负责处理并检查您的数据,确定其中有意义的内容,自动选择正确的机器学习算法,并根据数据完成自定义模型的训练与优化。所有数据都将经过加密,在保障隐私与安全的同时,保证数据仅被用于为用户生成推荐。

推荐过滤器的设置与使用非常简单。首先,我们可以使用 Amazon Personalize 控制台或 API 通过 Amazon Personalize专用的 DSL(领域特定语言)创建过滤器。接下来就可以使用 GetRecommendationsGetPersonalizedRanking 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。
    image

创建过滤器后,我们将进入包含过滤器详细信息的页面。在这里,大家可以查看关于过滤器的更多细节信息,包括过滤器ARN以及所创建的对应过滤器表达式。大家也可以在此页面上删除过滤器,或者通过摘要页面创建更多过滤器。
image
我们还可以通过Amazon Personalize中的createFilter API创建过滤器。关于更多详细信息,请参阅相关说明文档

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

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

未使用过滤器时的推荐!

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

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


USER_ID,ITEM_ID,EVENT_TYPE,TIMESTAMP

1,2657,Purchase,964983426

1,2985,Purchase,964983034

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

使用过滤器时的推荐

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

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

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

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

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

我们也可以将 FilterArn 作为附加及可选参数添加至 GetRecommendations调用当中,通过 SDK 或者 API 将过滤器应用于实时推荐。使用 filterArn 作为参数键,并将 filterArn 作为其值字符串。FilterArn是 CreateFilter 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 是什么?

image


亚马逊云开发者
2.9k 声望9.6k 粉丝

亚马逊云开发者社区是面向开发者交流与互动的平台。在这里,你可以分享和获取有关云计算、人工智能、IoT、区块链等相关技术和前沿知识,也可以与同行或爱好者们交流探讨,共同成长。