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

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

用户个性化配方

用户个性化 (aws-user-personalization) 配方针对所有个性化推荐场景进行了优化。它根据交互的项目、项目数据集和用户数据集、项目数据集和用户数据集。推荐物品时,它使用自动物品探索。

通过自动探索,Amazon Personalize 可自动测试不同的商品推荐,了解用户如何与这些推荐商品互动,并提升对可提高参与度和转化率的商品的推荐。当您的目录变化很快,或者当新商品(例如新闻文章或促销活动)与用户的相关性更高时,这可以提高商品的发现和参与度。

你可以平衡要探索的数量(其中推荐互动数据或相关性较少的项目)和要利用的数量(其中推荐的内容是基于我们所知道的或相关性)。Amazon Personalize 会根据隐含的用户反馈自动调整future 推荐。

自动更新

借助用户个性化,Amazon Personalize 每两个小时在幕后自动更新一次最新模型(解决方案版本),以包含新数据。自动更新不收取任何费用。解决方案版本必须使用Amazon Personalize ers以便进行更新。您的活动会自动使用更新的解决方案版本。auto 更新完成后,不会创建新的解决方案版本。如果您训练新的解决方案版本,Amazon Personalize 不会自动更新旧的解决方案版本,即使您已在活动中部署了这些版本。如果您删除了数据集,也不会进行更新。

每次更新时,Amazon Personalize 都会使用最新的项目信息更新解决方案版本,并根据用户的隐含反馈调整探索范围。这使得 Amazon Personalize 能够根据已探索物品的新互动来评估物品质量,并不断更新物品探索情况。这不是一次全面的再培训;你仍然应该每周训练一个新的解决方案版本trainingMode设置FULL因此,该模型可以从用户的行为中学习。

如果每两个小时不够频繁,则可以使用以下命令手动创建解决方案版本trainingMode设置UPDATE将这些新项目纳入建议中。请记住,Amazon Personalize 仅自动更新您经过全面培训的最新解决方案版本,因此手动更新的解决方案版本将future 不会自动更新。

自动更新要求

自动更新要求包括以下内容:

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

  • 必须使用以下方法对解决方案版本进行训练trainingMode设置FULL(这是创建解决方案版本时的默认设置)。

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

  • Amazon Personalize 仅自动更新您在 2020 年 11 月 17 日当天或之后创建的解决方案版本。

使用展示数据

与其他仅使用正面互动(点击、观看或购买)的食谱不同,用户个性化配方也可以使用展示次数数据。曝光量是用户在与特定物品互动(点击、观看、购买等)时可见的物品列表。

利用这些信息,使用用户个性化配方创建的解决方案可以根据项目被忽略的频率来计算新项目的适用性,并相应地更改建议。有关更多信息,请参阅展示数据.

属性和超参数

用户个性化配方,具有以下属性:

  • 名称aws-user-personalization

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

  • 算ARNarn:aws:personalize:::algorithm/aws-user-personalization

有关更多信息,请参阅 第 1 步:选择配方

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

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

  • 范围:[上界, 下界]

  • 值类型:整数、连续(浮点数)、分类(布尔值、列表、字符串)

  • 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]

值类型:Float

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]

值类型:Float

HPO 可调:否

物品探索战役配置超参数
exploration_weight

确定推荐包含交互数据或相关性较低的项目的频率。该值越接近 1.0,探索的次数越多。如果为零,则不进行探索,建议基于当前数据(相关性)。有关更多信息,请参阅CampaignConfig.

默认值:0.3

范围:[0.0, 1.0]

值类型:Float

HPO 可调:否

exploration_item_age_cut_off

根据自上次互动以来的时间范围确定要探索的项目。提供自最近一次互动以来的最大物品寿命,以天数为单位,以定义物品探索的范围。值越大,在探索过程中考虑的物品就越多。有关更多信息,请参阅CampaignConfig.

默认值:30.0

范围:正数

值类型:Float

HPO 可调:否

使用用户个性化配方进行训练(控制台)

要使用用户个性化配方在控制台中生成推荐,请首先使用该配方训练新的解决方案版本。然后使用解决方案版本部署营销活动并使用该活动获取建议。

使用用户个性化配方训练新的解决方案版本(控制台)

  1. 在以下位置打开 Amazon Personalize 控制台https://console.aws.amazon.com/personalize/home并登录您的账户。

  2. 使用新架构创建自定义数据集组,然后上传包含展示次数数据的数据集。(可选)包括创建时间戳非结构化文本元数据您的商品数据集中的数据,因此 Amazon Personalize 可以更准确地计算商品的寿命并识别冷藏商品。

    有关导入数据的更多信息,请参阅准备和导入数据.

  3. 数据集组页面上,选择包含数据集或包含展示次数数据集的新数据集组。

  4. 在导航格中,选择解决方案和配方数然后选择创建解决方案.

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

  6. 对于解决方案类型,选择项目建议为您的用户获取商品推荐。

  7. 对于Recipe,选择aws-user-personalization. 这些区域有:解决方案配置出现的部分提供了多个配置选项。

  8. 解决方案配置,如果你的 Interactions 数据集有 EVENT_TYPE 或者同时有 EVENT_TYPE 和 EVENT_VALUE 列,可以选择使用Event type事件值阈值字段用于选择 Amazon Personalize 在训练模型时使用的交互数据。

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

  9. (可选)为您的解决方案配置超参数。有关用户个性化配方属性和超参数的列表,请参阅属性和超参数.

  10. 选择创建和训练解决方案开始训练。这些区域有:控制面板页面将显示。

    您可以导航到解决方案详细信息页面以跟踪培训进度解决方案版本部分。在训练完成时,状态为处于活动状态.

创建活动并获取推荐(控制台)

当您的解决方案版本状态为处于活动状态您已准备好创建您的广告活动并获取建议,如下所示:

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

  2. 创建新市场活动页面活动详情,提供以下信息:

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

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

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

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

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

    • 探索权重:配置要探索的范围,其中推荐包括互动数据或相关性较少的项目,您指定的探索次数越多,频率越高。该值越接近 1,探索的次数越多。如果为零,则不进行探索,建议基于当前数据(相关性)。

    • 探险物品年龄截止:输入自最近一次互动以来的天数为单位的最大物品寿命,以定义物品探索的范围。要增加 Amazon Personalize 在探索期间考虑的物品数量,请输入更大的值。

      例如,如果输入 10,则在探索期间,仅考虑数据集中最近一次交互后的 10 天内交互数据的项目。

      注意

      建议可能包括来自此时间范围之外的没有互动数据的项目。这是因为这些物品与用户的兴趣相关,不需要通过探索来识别它们。

  4. 选择 Create campaign (创建活动)

  5. 在活动详情页面上,当活动状态为处于活动状态,您可以使用该活动获取推荐并记录曝光量。有关更多信息,请参阅 。第 5 步:获取建议在 “入门” 中。

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

    要手动更新活动,您首先要使用控制台或CreateSolutionVersion操作trainingMode设置update. 然后,你可以手动更新广告系列市场活动控制台的页面或使用UpdateCampaign操作。

    注意

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

使用用户个性化配方 (Python SDK) 进行训练

创建数据集组并上传包含展示次数数据的数据集后,您可以使用用户个性化配方训练解决方案。(可选)包括创建时间戳非结构化文本元数据您的商品数据集中的数据,因此 Amazon Personalize 可以更准确地计算商品的寿命并识别冷藏商品。有关创建数据集群和上传训练数据的更多信息,请参阅数据集和架构.

要使用用户个性化配方训练解决方案,请使用Amazon开发工具包

  1. 使用创建新的解决方案create_solution方法。

    Replace(替换)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. 创建新的解决方案版本使用更新的训练数据和集合trainingModeFULL使用以下代码片段。替换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还有solution version arn在步骤 2 中生成。

    • 修改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)

    借助用户个性化功能,Amazon Personalize 每两小时自动更新您的解决方案版本以包含新数据。您的活动会自动使用更新的解决方案版本。有关更多信息,请参阅自动更新.

    要手动更新活动,您首先要使用控制台或CreateSolutionVersion操作trainingMode设置update. 然后,你可以手动更新广告系列市场活动控制台的页面或使用UpdateCampaign操作。

    注意

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

获取推荐并记录展示次数(SDK for Python (Boto3))

创建广告系列后,您可以使用它为用户获取推荐并记录曝光量。有关使用获取批量推荐的信息Amazon开发工具包参见创建批处理推理作业 (Amazon开发工具包).

获取推荐并记录印象

  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 请求。Replace(替换)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. 使用recommendationId从步骤 1 和event tracking id从步骤 2 开始创建新的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 notebook

有关演示如何使用用户个性化配方的 Jupyter 笔记本示例,请参阅通过探索实现用户个性化.