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

User-Personalization 配方

User-Personalization (aws-user-personalization) 配方针对所有个性化建议场景进行了优化。它根据交互数据集、物品数据集和用户数据集预测用户将与之交互的物品。推荐物品时,它会使用自动物品浏览。

在浏览中,建议包括一些通常不太可能向用户建议的物品或操作,例如新物品或操作、交互量很少的物品或操作,或者根据用户以前的行为与用户不太相关的物品或操作。当您目录的更新速度非常快,或者当新物品(如新闻文章或推广)在上架之初时与用户更相关时,这可以提高物品的发现率和参与度。

在通过市场活动部署解决方案版本时,您可以权衡要浏览的程度(其中物品交互数据较少或相关性较低的物品建议频率更高)和要利用的程度(其中建议基于我们所了解的情况或相关性)。

自动更新

借助 User-Personalization,为了获得实时建议,Amazon Personalize 会在后台每两小时自动更新一次最新模型(解决方案版本),以便通过浏览在建议中加入新物品。为了获得批量物品建议,Amazon Personalize 会在解决方案版本是您解决方案的最新版本时,更新您在批量推理作业中指定的解决方案版本。

每次更新时,Amazon Personalize 都会更新解决方案版本,以便通过浏览考虑任何新物品。并且,它还使用任何新的物品交互数据(包括展示数据)来确定浏览中应包含或不包含哪些物品。这并非一次全面的再训练;您仍然应该每周训练一个新的解决方案版本,并将 trainingMode 设置为 FULL,这样模型就可以从用户的行为和任何物品元数据中学习。

自动更新不会产生任何费用。要获得实时建议,解决方案版本必须通过 Amazon Personalize 市场活动部署,才能进行更新。您的市场活动会自动使用更新的解决方案版本。自动更新完成后,不会创建新的解决方案版本,也不会生成新的模型指标。这是因为不会进行全面的再训练。如果您创建新的解决方案版本,则 Amazon Personalize 不会自动更新较旧的解决方案版本,即使您已在市场活动中部署了这些版本。如果您删除了数据集,也不会进行更新。

如果每两个小时的频率不够高,则您可以手动创建解决方案版本,并将 trainingMode 设置为 UPDATE,以将这些新物品加入建议中。请注意,Amazon Personalize 只会自动更新经过全面训练的最新解决方案版本,因此,手动更新的解决方案版本将来不会自动更新。

自动更新要求

实时建议的自动更新要求包括以下内容:

  • 您必须通过市场活动部署解决方案版本(有关更多信息,请参阅创建市场活动)。市场活动会自动使用自动更新的最新解决方案版本。

  • 必须训练解决方案版本,并将 trainingMode 设置为 FULL(这是创建解决方案版本时的默认设置)。

  • 您必须提供自上次自动更新以来的新物品或物品交互数据。

批量物品建议的自动更新要求包括以下内容:

  • 您在批量推理作业中指定的解决方案版本必须是您的解决方案的最新解决方案版本。

  • 必须训练解决方案版本,并将 trainingMode 设置为 FULL(这是创建解决方案版本时的默认设置)。

  • 您必须提供自上次自动更新以来的新物品或物品交互数据。

处理展示数据

与其他仅使用积极交互(单击、观看或购买)的配方不同,User-Personalization 配方也可以使用展示数据。展示是用户与特定物品交互(单击、观看、购买等)时可见的物品列表。

Amazon Personalize 使用展示数据来确定浏览中应包含哪些物品。物品在展示数据中出现的频率越高,Amazon Personalize 将该物品包含在浏览中的可能性就越小。展示数据

属性和超参数

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 就可以更准确地计算物品的使用期限并识别冷物品。有关创建数据集组和上传训练数据的更多信息,请参阅架构

通过 Amazon SDK 使用 User-Personalization 配方训练解决方案
  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 SDK 获取批量建议的信息,请参阅创建批量推理作业 (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