User-Personalization 食谱 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

User-Personalization 食谱

用户个性化 (aws-user-personalization) 配方针对所有个性化推荐场景进行了优化。它可以预测用户最有可能与之互动的物品。您可以使用用户个性化为流媒体应用程序生成个性化电影推荐,或为零售应用程序生成个性化产品推荐。

通过用户个性化,Amazon Personalize 主要根据商品互动数据集中的用户商品互动数据生成推荐。它还可以使用您的项目和用户数据集中的任何项目和用户元数据。有关其使用的数据的更多信息,请参阅必需和可选数据集

配方特征

用户个性化在生成商品推荐时使用以下 Amazon Personalize 配方功能:

  • 实时个性化 — 通过实时个性化设置,Amazon Personalize 可以根据用户不断变化的兴趣更新和调整商品推荐。有关更多信息,请参阅实时个性化

  • 探索 — 通过探索,推荐包括新项目或交互数据较少的项目。当您目录的更新速度非常快,或者当新物品(如新闻文章或推广)在上架之初时与用户更相关时,这可以提高物品的发现率和参与度。有关浏览的更多信息,请参阅探索

  • 自动更新 — 通过自动更新,Amazon Personalize 每两小时自动更新一次最新型号(解决方案版本),以考虑推荐新商品。有关更多信息,请参阅自动更新

必需和可选数据集

要使用用户个性化设置,您必须创建物品交互数据集并导入至少 1000 个项目互动。Amazon Personalize 主要根据商品互动数据生成推荐。

通过用户个性化设置,Amazon Personalize 可以使用包含以下内容的商品互动数据:

  • 事件类型和事件值数据 — Amazon Personalize 使用事件类型数据(例如点击或观看事件类型),通过用户行为中的任何模式来识别用户的意图和兴趣。此外,您还可以在训练前使用事件类型和事件值数据筛选记录。有关更多信息,请参阅事件类型和事件值数据

  • 情境元数据-情境元数据是您在事件发生时在用户环境中收集的互动数据,例如他们的位置或设备类型。有关更多信息,请参阅上下文元数据

  • 展示次数数据 — 展示量是用户在与特定商品互动(点击、观看、购买等)时可见的项目列表。有关更多信息,请参阅展示数据

以下数据集是可选的,可以改进建议:

  • 用户数据集 — Amazon Personalize 可以使用您的用户数据集中的数据来更好地了解您的用户及其兴趣。您也可以使用用户数据集中的数据来筛选推荐。有关您可以导入的用户数据的信息,请参阅用户数据集

  • 商品数据集 — Amazon Personalize 可以使用您的商品数据集中的数据来识别其行为中的联系和模式。这有助于 Amazon Personalize 了解您的用户及其兴趣。您也可以使用 Items 数据集中的数据来筛选推荐。有关您可以导入的物品数据的信息,请参阅物品数据集

属性和超参数

User-Personalization 食谱具有以下属性:

  • 名称aws-user-personalization

  • 食谱 Amazon 资源名称 (ARN) - arn:aws:personalize:::recipe/aws-user-personalization

  • 算法 ARN - arn:aws:personalize:::algorithm/aws-user-personalization

有关更多信息,请参阅选择配方

下表描述了 User-Personalization 食谱的超参数。超参数 是一个算法参数,您可以调整该参数以提高模型性能。算法超参数控制模型的执行方式。特征化超参数控制如何筛选训练中使用的数据。为超参数选择最佳值的过程称为超参数优化 (HPO)。有关更多信息,请参阅超级参数和 HPO

该表为每个超参数提供以下信息:

  • 范围:[上界, 下界]

  • 值类型:Integer、Continuous(浮点数)、Categorical(布尔值、列表、字符串)

  • 可调 HPO:该参数是否可以参与 HPO?

名称 描述
算法超参数
hidden_dimension

模型中使用的隐藏变量的数量。隐藏变量 重新创建用户的购买历史记录和物品统计数据来生成排名分数。当物品交互数据集包含更复杂的模式时,请指定更多数量的隐藏维度。使用更多隐藏维度需要更大的数据集和更多的处理时间。要确定最佳值,请使用 HPO。要使用 HPO,当您调用 CreateSolutionCreateSolutionVersion 操作时,请将 performHPO 设置为 true

默认值:149

范围:[32, 256]

值类型:整数

HPO 可调:是

bptt

确定是否使用基于时间的反向传播技术。反向传播 是一种在基于递归神经网络的算法中更新权重的技术。将 bptt 用于长期积分以将延迟奖励与早期事件联系起来。例如,延迟奖励可以是几次点击后进行的购买。早期事件可以是初始点击。即使在相同的事件类型(例如点击)中,最好考虑长期影响并最大化总奖励。要考虑长期效果,请使用较大的 bptt 值。使用较大的 bptt 值需要更大的数据集和更多的处理时间。

默认值:32

范围:[2, 32]

值类型:整数

HPO 可调:是

recency_mask

确定模型是否应考虑物品交互数据集中的最新流行趋势。最新流行趋势可能包括交互事件的基本模式的突然变化。要训练一个使最近事件具有更高权重的模型,请将 recency_mask 设置为 true。要训练一个使所有过往交互占相同权重的模型,请将 recency_mask 设置为 false。要使用相等权重获得好的建议,您可能需要较大的训练数据集。

默认值:True

范围:TrueFalse

值类型:布尔值

HPO 可调:是

特征化超参数
min_user_history_length_percentile

要包含在模型训练中的用户历史记录长度的最小百分位数。历史记录长度 是有关用户的数据总量。使用 min_user_history_length_percentile 排除历史记录长度较短的一定百分比的用户。历史记录较短的用户通常会根据物品受欢迎程度而不是用户的个人需求或需要来显示模式。删除它们可以在训练模型时更多地关注数据中的基础模式。使用直方图或类似工具查看用户历史记录长度后,请选择适当的值。我们建议您设置一个值,该值将保留大多数用户,但会删除边缘案例。

例如,设置 min_user_history_length_percentile to 0.05max_user_history_length_percentile to 0.95 将包括除那些历史记录长度在最低或最高 5% 内的用户之外的所有用户。

默认值:0.0

范围:[0.0, 1.0]

值类型:浮点数

HPO 可调:否

max_user_history_length_percentile

要包含在模型训练中的用户历史记录长度的最大百分位数。历史记录长度 是有关用户的数据总量。使用 max_user_history_length_percentile 排除具有较长历史记录长度的一定百分比的用户,因为这些用户的数据往往包含噪音。例如,机器人可能有很长的自动交互列表。删除这些用户可限制训练中的噪音。使用直方图或类似工具查看用户历史记录长度后,请选择适当的值。我们建议您设置一个值,该值将保留大多数用户,但会删除边缘案例。

例如,设置 min_user_history_length_percentile to 0.05max_user_history_length_percentile to 0.95 将包括除那些历史记录长度在最低或最高 5% 内的用户之外的所有用户。

默认值:0.99

范围:[0.0, 1.0]

值类型:浮点数

HPO 可调:否

物品浏览市场活动配置超参数
exploration_weight

确定建议包含物品交互数据较少或相关性较低的物品的频率。值越接近 1.0,浏览次数就越多。如果值为零,则表示没有浏览,建议基于当前数据(相关性)。有关更多信息,请参阅 CampaignConfig

默认值:0.3

范围:[0.0, 1.0]

值类型:浮点数

HPO 可调:否

exploration_item_age_cut_off

指定自物品交互数据集中所有物品最近一次交互以来的最大物品使用期限(以天为单位)。这会根据物品使用期限定义物品浏览的范围。Amazon Personalize 根据物品的创建时间戳或物品交互数据(如果缺少创建时间戳数据)来确定物品使用期限。有关 Amazon Personalize 如何确定物品使用期限的更多信息,请参阅创建时间戳数据

要增加 Amazon Personalize 在浏览期间考虑的物品数量,请输入更大的值。最小值为 1 天,默认值为 30 天。建议可能包括比您指定的物品使用期限截止时间更早的物品。这是因为这些物品与用户相关,而浏览并未识别出它们。

默认值:30.0

范围:正浮点数

值类型:浮点数

HPO 可调:否

使用 User-Personalization 食谱进行训练(控制台)

要使用 User-Personalization 食谱在控制台中生成建议,请先使用食谱训练新的解决方案版本。然后,使用解决方案版本部署市场活动并使用市场活动获取建议。

使用 User-Personalization 食谱训练新解决方案版本(控制台)
  1. 打开 Amazon Personalize 控制台(网址为 https://console.aws.amazon.com/personalize/home),并登录您的账户。

  2. 使用新架构创建自定义数据集组,然后上传包含展示数据的数据集。(可选)在物品数据集中包含 CREATION_TIMESTAMP非结构化文本元数据数据,这样,Amazon Personalize 就可以更准确地计算物品的使用期限并识别冷物品。

    有关导入数据的更多信息,请参阅步骤 2:准备和导入数据

  3. 数据集组页面上,选择包含一个或多个带有展示数据的数据集的新数据集组。

  4. 在导航窗格中,选择解决方案和食谱,然后选择创建解决方案

  5. 创建解决方案页面上,对于解决方案名称,输入新解决方案的名称。

  6. 对于解决方案类型,选择物品建议,为用户获取物品建议。

  7. 在 “食谱” 中,选择aws-user-personalization。这时,将显示解决方案配置部分,其中提供了几个配置选项。

  8. 解决方案配置中,如果您的物品交互数据集包含 EVENT_TYPE 或同时包含 EVENT_TYPE 和 EVENT_VALUE 列,则可以选择使用事件类型事件值阈值字段,来选择 Amazon Personalize 在训练模型时使用的物品交互数据。

    有关更多信息,请参阅 选择用于训练的物品交互数据

  9. (可选)为您的解决方案配置超参数。有关 User-Personalization 食谱属性和超参数的列表,请参阅属性和超参数

  10. 选择创建并训练解决方案以开始训练。此时,将显示控制面板页面。

    您可以导航到解决方案详情页面,在解决方案版本 部分跟踪训练进度。训练完成时,状态会变为活动

创建市场活动并获取建议(控制台)

当您的解决方案版本状态为活动时,您就可以按如下方式创建市场活动并获得建议了:

  1. 在解决方案详细信息页面或市场活动 页面上,选择创建新的市场活动

  2. 创建新的市场活动页面上,对于市场活动详细信息,提供以下信息:

    • 市场活动名称:输入市场活动的名称。您在此处输入的文本将显示在市场活动控制面板和详细信息页面上。

    • 解决方案:选择您刚刚创建的解决方案。

    • 解决方案版本 ID:选择您刚刚创建的解决方案版本 ID。

    • 最低预调配每秒事务数:设置 Amazon Personalize 支持的最低预调配每秒事务数。有关更多信息,请参阅 CreateCampaign 操作。

  3. 对于活动配置,提供以下信息:

    • 浏览权重:配置要浏览的程度,其中,建议包含的物品交互数据越少或相关性越低,您所指定的浏览频率就越高。值越接近 1,浏览次数就越多。如果值为零,则表示没有浏览,建议基于当前数据(相关性)。

    • 浏览物品期限截止:输入自上次交互以来的最大物品期限(以天为单位),以定义物品浏览的范围。要增加 Amazon Personalize 在浏览期间考虑的物品数量,请输入更大的值。

      例如,如果您输入 10,则在浏览期间仅考虑数据集中自最近一次交互以来 10 天内具有物品交互数据的物品。

      注意

      建议可能包括没有来自该时间范围之外的物品交互数据的物品。这是因为这些物品与用户兴趣相关,但不需要浏览识别它们。

  4. 选择创建市场活动

  5. 在市场活动详细信息页面上,当市场活动状态变为活动 时,您可以使用市场活动来获取建议并记录展示量。有关更多信息,请参阅“入门”中的步骤 5:获得建议

    Amazon Personalize 会每两小时自动更新一次最新解决方案版本,以包含新数据。您的市场活动会自动使用更新的解决方案版本。有关更多信息,请参阅 自动更新

    要手动更新市场活动,请先使用控制台或 CreateSolutionVersion 操作创建和训练新的解决方案版本,并将 trainingMode 设置为 update。然后,在控制台的市场活动 页面或使用 UpdateCampaign 操作,手动更新市场活动。

    注意

    Amazon Personalize 不会自动更新您在 2020 年 11 月 17 日之前创建的解决方案版本。

使用 User-Personalization 食谱进行训练 (Python SDK)

当您创建了数据集组并上传了包含展示数据的数据集后,您可以使用 User-Personalization 食谱训练解决方案。(可选)在物品数据集中包含 CREATION_TIMESTAMP非结构化文本元数据数据,这样,Amazon Personalize 就可以更准确地计算物品的使用期限并识别冷物品。有关创建数据集组和上传训练数据的更多信息,请参阅架构

使用 SDK 使用用户个性化配方训练解决方案 Amazon
  1. 使用 create_solution 方法创建新的解决方案。

    solution name 替换为您的解决方案名称,将 dataset group arn 替换为数据集组的 Amazon 资源名称 (ARN)。

    import boto3 personalize = boto3.client('personalize') print('Creating solution') create_solution_response = personalize.create_solution(name = 'solution name', recipeArn = 'arn:aws:personalize:::recipe/aws-user-personalization', datasetGroupArn = 'dataset group arn', ) solution_arn = create_solution_response['solutionArn'] print('solution_arn: ', solution_arn)

    有关 aws-user-personalization 配方属性和超参数的列表,请参见属性和超参数

  2. 使用更新的训练数据创建新的解决方案版本,并使用以下代码片段将 trainingMode 设置为 FULL。将 solution arn 替换为您的解决方案 ARN。

    import boto3 personalize = boto3.client('personalize') create_solution_version_response = personalize.create_solution_version(solutionArn = 'solution arn', trainingMode='FULL') new_solution_version_arn = create_solution_version_response['solutionVersionArn'] print('solution_version_arn:', new_solution_version_arn)
  3. 当 Amazon Personalize 创建完解决方案版本后,使用以下参数创建市场活动:

    • 提供新的 campaign name 及步骤 2 中生成的 solution version arn

    • 修改 explorationWeight 物品浏览配置超参数以配置要浏览的程度。值越接近 1.0,建议物品交互数据较少或相关性较低的物品的频率就越高。默认值为 0.3。

    • 修改 explorationItemAgeCutOff 物品浏览配置超参数,以提供应浏览物品的最大持续时间(相对于最新交互的天数)。该值越大,浏览期间考虑的物品就越多。

    使用以下 Python 片段创建新市场活动,其以浏览为重点,浏览截止日期为 30 天。创建市场活动通常需要几分钟,但也可能需要一个多小时。

    import boto3 personalize = boto3.client('personalize') create_campaign_response = personalize.create_campaign( name = 'campaign name', solutionVersionArn = 'solution version arn', minProvisionedTPS = 1, campaignConfig = {"itemExplorationConfig": {"explorationWeight": "0.3", "explorationItemAgeCutOff": "30"}} ) campaign_arn = create_campaign_response['campaignArn'] print('campaign_arn:', campaign_arn)

    通过 User-Personalization,Amazon Personalize 每两小时自动更新一次解决方案版本,以包含新数据。您的市场活动会自动使用更新的解决方案版本。有关更多信息,请参阅 自动更新

    要手动更新市场活动,请先使用控制台或 CreateSolutionVersion 操作创建和训练新的解决方案版本,并将 trainingMode 设置为 update。然后,在控制台的市场活动 页面或使用 UpdateCampaign 操作,手动更新市场活动。

    注意

    Amazon Personalize 不会自动更新您在 2020 年 11 月 17 日之前创建的解决方案版本。

获取建议并记录展示次数 (SDK for Python (Boto3))

创建市场活动后,您可以使用它为用户获取建议并记录展示次数。有关使用 Amazon 软件开发工具包获取批量推荐的信息,请参阅创建批量推理作业 (Amazon SDK)

获取建议并记录展示次数
  1. 调用 get_recommendations 方法。将 campaign arn 更改为新市场活动的 ARN,将 user id 更改为用户的 userId。

    import boto3 rec_response = personalize_runtime.get_recommendations(campaignArn = 'campaign arn', userId = 'user id') print(rec_response['recommendationId'])
  2. 创建用于发送 PutEvents 请求的新事件跟踪器。将 event tracker name 替换为事件跟踪器的名称,将 dataset group arn 替换为数据集组的 ARN。

    import boto3 personalize = boto3.client('personalize') event_tracker_response = personalize.create_event_tracker( name = 'event tracker name', datasetGroupArn = 'dataset group arn' ) event_tracker_arn = event_tracker_response['eventTrackerArn'] event_tracking_id = event_tracker_response['trackingId'] print('eventTrackerArn:{},\n eventTrackingId:{}'.format(event_tracker_arn, event_tracking_id))
  3. 使用步骤 1 中的 recommendationId 和步骤 2 中的 event tracking id 来创建新 PutEvents 请求。此请求记录来自用户会话的新展示数据。将 user id 更改为用户的 ID。

    import boto3 personalize_events.put_events( trackingId = 'event tracking id', userId= 'user id', sessionId = '1', eventList = [{ 'sentAt': datetime.now().timestamp(), 'eventType' : 'click', 'itemId' : rec_response['itemList'][0]['itemId'], 'recommendationId': rec_response['recommendationId'], 'impression': [item['itemId'] for item in rec_response['itemList']], }] )

示例 Jupyter 笔记本

有关展示如何使用 User-Personalization 食谱的示例 Jupyter 笔记本,请参阅具有浏览的 User Personalization