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

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

配方用户个性化配方

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

借助自动探索功能,Amazon Personalize 化可以自动测试不同的商品推荐,了解用户与这些推荐商品的互动方式,并提高对推动互动度和转化率的商品的推荐。当您拥有快速变化的目录时,或者新闻文章或促销等新内容(如新闻文章或促销活动)在新品时与用户更相关时,这可以改善商品的发现和参与度。

您可以平衡要探索的程度(更频繁地推荐交互数据或相关性较少的项目)与要利用的程度(建议基于我们所知或相关性)之间取得平衡。Amazon Personalize 化会根据隐含的用户反馈自动调整未来的建议。

自动更新

借助用户个性化功能,Amazon Personalize 会在幕后每两小时自动更新最新模型(解决方案版本)以包含新数据,而无需创建新的解决方案版本。每次更新后,Amazon Personalize 都会使用最新的商品信息更新解决方案版本,并根据用户的隐含反馈调整探索。这使 Amazon Personalize 化能够根据已探索商品的新互动来衡量商品质量,并持续更新商品探索。这不是完整的再培训;你还应该每周训练一个新的解决方案版本trainingMode设置为FULL因此模型可以从用户的行为中学习。

如果每两小时频率不够,您可以使用手动创建解决方案版本trainingMode设置为UPDATE以便将这些新项目纳入建议中. 请记住,Amazon Personalize 只会自动更新您的最新完全训练的解决方案版本,因此手动更新的解决方案版本将来不会自动更新。

注意

自动更新没有成本。

更新要求

Amazon Personalize 化仅自动更新训练的最新解决方案版本trainingMode设置为FULL并且仅当您提供自上次自动更新以来的新项目或互动数据时才能使用。如果您训练了新的解决方案版本,Amazon Personalize 将不会自动更新您在广告活动中部署的旧解决方案版本。如果删除了数据集,也不会进行更新。

注意

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

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

  • 范围:[上界, 下界]

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

  • 可调 HPO:该参数可以参与 HPO 吗?

名称 描述
算法超参数
hidden_dimension

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

默认值:149

Range (范围):[32, 256]

值类型:整数

HPO 可调:是

bptt

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

默认值:32

Range (范围):[2, 32]

值类型:整数

HPO 可调:是

recency_mask

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

默认值:True

范围:TrueFalse

值类型:Boolean

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

Range (范围):[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

Range (范围):[0.0, 1.0]

值类型:Float

HPO 可调:否

物品探索广告活动配置超参数
exploration_weight

确定建议包括交互数据或相关性较少的项目的频率。值越接近 1.0,探索就越多。为零,不会进行任何探索,建议基于当前数据(相关性)。有关更多信息,请参阅CampaignConfig.

默认值:0.3

Range (范围):[0.0, 1.0]

值类型:Float

HPO 可调:否

exploration_item_age_cut_off

根据自上次互动以来的时间范围确定要探索的项目。提供自最新互动以来的最长物品使用期限(以天为单位),以确定物品探索的范围。值越大,勘探期间考虑的物品越多。有关更多信息,请参阅CampaignConfig.

默认值:30.0

Range (范围):正浮点数

值类型:Float

HPO 可调:否

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

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

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

  1. 打开 Amazon Personalize 控制台https://console.aws.amazon.com/personalize/home然后登录您的账户。

  2. 使用新架构创建自定义数据集组并上传包含展示数据的数据集。可选包括CREATION_时间戳非结构化文本元数据商品数据集中的数据,以便 Amazon Personalize 化可以更准确地计算商品的年龄并识别冷藏物品。

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

  3. 在存储库的数据集组页面中,选择包含数据集的新数据集组或包含展示数据的数据集。

  4. 在导航窗格中,选择解决方案和配方然后选择Create solutions.

  5. 在存储库的Create solutions页面,对于解决方案名称中,输入新解决方案的名称。

  6. 适用于方案类型,选择物品推荐为你的用户获取物品推荐。

  7. 适用于Recipe,选择aws-user-personalization. 这些区域有:配置方案此时将显示一节提供了几个配置

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

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

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

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

    您可以导航到解决方案详细信息页面以在Solutions 版本部分。培训完毕后,状态会变为处于活动状态.

创建广告系列并获取推荐(控制台)

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

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

  2. 在存储库的创建新活动页面,对于活动详情,请提供以下信息:

    • 活动名称:输入活动的名称。您在此输入的文本将显示在广告系列控制面板和详情页面上。

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

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

    • 每秒最小预配置交易数:设置 Amazon Personalize 支持的每秒最小预配置交易数。有关更多信息,请参阅 。CreateCampaignoperation.

  3. 适用于活动配置,请提供以下信息:

    • 勘探权重:配置要探索的程度,其中建议包括交互数据或相关性较少的项目,指定的探索越频繁。值越接近 1,探索就越多。为零,不会进行任何探索,建议基于当前数据(相关性)。

    • 探索物品年龄截止:输入物品的最长使用期限(以天为单位),以确定物品探索的范围。要增加 Amazon Personalize 在探索过程中考虑的物品数量,请输入更大的值。

      例如,如果输入 10,则在浏览期间,只会考虑包含自数据集中最新交互之后 10 天内交互数据的项目。

      注意

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

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

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

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

    要手动更新广告系列,首先使用控制台或CreateSolutionVersion配合操作,trainingMode设置为update. 然后,你手动更新广告活动活动使用控制台的页面或使用UpdateCampaignoperation.

    注意

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

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

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

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

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

    Replacesolution 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 namesolution 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. 然后,你手动更新广告活动活动使用控制台的页面或使用UpdateCampaignoperation.

    注意

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

获得推荐和录制展示次数(SDK for Python (Boto3))

创建市场活动时,您可以使用它来获得针对用户的推荐并记录展示次数。有关使用AmazonSDK 请参阅创建批量推理作业 (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 请求。Replaceevent 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 笔记本

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