发布于: Nov 30, 2022
【概要】如何提升 Amazon Personalize 推荐结果的相关性,是不少用户关注的问题,尤其是顾客的选择往往具有不确定性,那么如何根据顾客的操作,迅速作出反应更新推荐结果呢?本文将会问你阐述这一操作。
如何提升 Amazon Personalize 推荐结果的相关性,是不少用户关注的问题,尤其是顾客的选择往往具有不确定性,那么如何根据顾客的操作,迅速作出反应更新推荐结果呢?本文将会问你阐述这一操作。
我们首先需要设置以下 Amazon Personalize 资源。关于完整操作说明,请参阅入门指南(控制台)以完成以下操作步骤:
1. 创建一个数据集组,在本文中我们将其命名为 airlines-blog-example。
2. 使用以下 schema 创建 Interactions 数据集,并使用 interactions_dataset.csv 文件导入数据:
{ "type": "record", "name": "Interactions", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "ITEM_ID", "type": "string" }, { "name": "USER_ID", "type": "string" }, { "name": "TIMESTAMP", "type": "long" }, { "name":"CABIN_TYPE", "type": "string", "categorical": true }, { "name": "EVENT_TYPE", "type": "string" }, { "name": "EVENT_VALUE", "type": "float" } ], "version": "1.0" }
3. 使用以下 schema 创建 Users 数据集,并使用 users_dataset.csv 文件导入数据:
{ "type": "record", "name": "Users", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "USER_ID", "type": "string" }, { "name": "USER_RESIDENCE", "type": "string", "categorical": true } ], "version": "1.0" }
4. 创建一个解决方案(solution)。在本文,我们使用默认解决方案配置,只对以下几项做出调整:
- Recipe – aws-hrnn-metadata
- Event type – RATING
- Perform HPO – True
如果您希望 Amazon Personalize 能够并行训练与试验,借此确定性能最高的超参数,则建议大家使用超参数优化(HPO)。关于更多详细信息,请参阅超参数与超参数优化(HPO)。
5. 创建一项活动(campaign)。您可以在 Amazon Personalize 控制台上,或按照 GitHub repo 上的 Jupyter notebookpersonalize_hrnn_metadata_contextual_example.ipynb 示例设置上述资源。
现在,我们已经创建了多项 Amazon Personalize 资源,包括名为 airlines-blog-example 的数据集组。这套数据集组中包含两个数据集,分别为 interactions 与 users,它们包括了用于 Amazon Personalize 模型(也称解决方案)训练的数据。此外,我们还创建了一项 campaign,用于提供实时推荐。
现在,我们将进一步探讨数据集 interactions 与 users 如何帮助我们的模型利用数据集中嵌入的上下文及元数据进行学习。
Interactions 数据集
我们为 Amazon Personalize 提供一套包含数字评分(EVENT_TYPE + EVENT_VALUE 的组合)的交互式数据集,这一评分为用户(USER_ID)在特定时间(TIMESTAMP)乘坐某种客舱类型(CABIN_TYPE)时,为航空公司(ITEM_ID)打出的体验评价。通过在数据集与 schema 中向 Amazon Personalize 提供这些信息,我们可以在查询特定用户推荐并通过 event tracker 记录新交互时,将 CABIN_TYPE 作为上下文信息添加进来。在训练过程中,我们的模型会自动从数据中识别出重要特征(在本用例中,即在各类客舱类型中得分最高的航空公司)。
以下截屏为 interactions_dataset.csv 文件中的部分内容。
User 数据集
我们还需要向 Amazon Personalize 提供一套 user 数据集,其中包含在 interactions 数据集内提交评分的用户(USER_ID),且假定他们是从其常住地(USER_RESIDENCE)打出相应评分的。在本用例中,USER_RESIDENCE 是我们为这些用户选择的元数据。通过用户元数据 USER_RESIDENCE,我们的模型能够学习到各国家/地区的用户与哪些航空公司交互次数最多;因此在查询推荐结果时,模型会将 USER_RESIDENCE 纳入考量。例如,与南美或欧洲的用户相比,亚洲用户所看到的航空公司选项将有所不同。
以下截屏为 user_dataset.csv 文件中的部分内容。
由 Skytrax 提供的各航空公司用户评分原始数据集中包含 20 列,记录超过 40000 多条。在本文中,我们将使用此数据集的精简版本,并将原始数据集中相关度最高的列拆分为两套数据集(users 与 interactions)。关于在 Jupyter notebook 中拆分数据的更多详细信息,请参阅 GitHub repo 上的 personalize_hrnn_metadata_contextual_example.ipynb。
在下一节中,我们将介绍上下文与元数据如何影响 Amazon Personalize 中 campaign 给出的实时推荐结果。
在测试过程中,我们观察到上下文将对提供给用户的推荐结果产生重要影响。在我们的用例中,我们使用一套来自众多用户的航空公司数字评分交互数据集。在 schema 中,客舱类型将作为 interactions 数据集中的一项分类值被包含在内,而用户居住地址则作为 users 数据集内的元数据字段。我们的理论是,通过将客舱类型设定为上下文,模型将会在提供航空公司推荐时考虑到这项影响因素对用户偏好产生的影响。
- 在 Amazon Personalize 数据集组仪表板上,选择 View campaigns。
- 选择您刚刚创建完成的 campaign。
- 在 User ID 部分,输入 JDowns。
- 选择 Get recommendations 获取推荐。
这时,大家应该看到类似于以下截屏的 Test campaign results 页面。
我们起初在不使用任何上下文的前提下,查询得出一份航空公司推荐列表。我们现在关注其中的前 10 项推荐,并验证其是否会根据上下文信息的变化而有所变动。我们可以通过控制台以提供键值对的方式添加上下文。在本用例中,键为 CABIN_TYPE,而其值可以为以下之一:
- Economy
- Premium Economy
- Business Class
- First Class
以下两幅截屏展示了我们在面向同一用户时,分别将 Economy 与 First Class 作为 CABIN_TYPE 上下文的值时查询得出的推荐结果。在将客舱类型设置为 Economy 时,推荐列表的前 10 位并没有出现变化;但在上下文中设置客舱类型为 First Class 时,推荐列表的顺序发生了一些变动——阿拉斯加航空公司(Alaska Airlines)跃居榜首。
您可以浏览 users_dataset.csv 文件以寻找更多用户评分,借此测试您的推荐 API,并根据您在 API 调用中使用的上下文进行类似的转换。此外,我们发现航空公司推荐列表还将根据 User Residency 元数据字段的改变而有所变化。例如,以下截屏展示了为 JDowns 用户的前 10 条推荐结果,该用户的 User Residency 值被设置为 United States;而 PhillipHarris 用户的 User Residency 值则会被设置为 France。
如本文所述,在使用 Amazon Personalize 时,将上下文信息添加至推荐策略当中,是一项非常强大且易于实现的实践。使用上下文丰富推荐结果,您的用户参与度将显著增加,从而真正将推荐系统转化为提升收入的重要工具。
本文还向大家展示了如何创建 Amazon Personalize 上下文感知的部署方案,以及如何通过 Amazon Personalize 控制台使用上下文为实时推荐进行端到端的测试。关于使用 Jupyter 环境设置 Amazon Personalize 并通过 Boto3 Python SDK 获取推荐结果的具体操作说明,请参阅 GitHub repo 上的 personalize_hrnn_metadata_contextual_example.ipynb。
当然,大家还可以使用 Amazon Personalize 实现更多其他用例。关于更多核心用例及自动化示例的详细信息,请参阅 GitHub repo。如果本文对您有所帮助,或者给您的问题解决思路带来一点启发,请和我们分享您的心得与体会。
相关文章