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

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

用户个性化配方

用户个性化(aws-用户个性化)配方针针对所有个性化推荐方案进行了优化。它基于交互、项目和用户数据集预测用户将与之交互的项目。推荐项目时,它使用自动项目浏览。

借助自动浏览功能,Amazon Personalize 会自动测试不同的商品推荐,了解用户如何与这些推荐商品进行交互,并为推动更好的参与度和转化率的商品提供推荐。当您拥有快速变化的目录时,或者当新的项目(如新闻文章或促销)与用户更相关时,这样就可以提高项目发现和参与度。

您可以平衡需要探索的程度(其中更频繁地推荐交互数据或相关性较少的项目)和利用多少(其中建议是基于我们知道的内容或相关性)。Amazon Personalize 会根据隐式用户反馈自动调整未来推荐。

自动更新

借助用户个性化功能,Amazon Personalize 每两小时在幕后自动更新最新模型(解决方案版本),以包含新数据,而无需创建新的解决方案版本。每次更新都会 Amazon Personalize 最新的项目信息更新解决方案版本,并根据用户隐含的反馈调整浏览。这使得 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

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

  • 范围:[上界, 下界]

  • 值类型:Integer、Continuous(浮点数)、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. 使用新架构创建数据集组,并上传包含展示次数数据的数据集。可调 Hampaign创建时间戳非结构化文本元数据数据,以便 Amazon Personalize 可以更准确地计算商品的使用期限并识别冷藏商品。

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

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

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

  5. 在存储库的创建解决方案页面上,用于解决方案名称下,输入新解决方案的名称。

  6. 适用于Recipe中,选择AWS 用户个性化。这些区域有:解决方案配置部分提供了多个配置选项。

  7. In解决方案配置,如果您的数据具有 EVENT_TYPE 或 EVENT_VALE_TENTANT 列,请使用以下字段选择 Amazon Personalize 在训练模型时使用的交互数据。

    • Event type:整数 如果您的数据在 EVENT_TYPE 列中有多个事件类型,并且您只想使用单一类型的事件进行训练,则可以选择输入事件类型,例如单击。在训练模型时,Amazon Personalize 将仅使用具有此类型的事件。您只能输入一种类型。如果您不提供事件类型,Amazon Personalize 将使用所有交互数据来训练模型,而不考虑类型。

    • 事件值阈值: 如果 “交互” 数据集具有 “EVENT_VALUE_阈值” 列,并且您希望基于值训练事件,请根据需要输入一个值。Amazon Personalize 将仅具有大于或等于此值的值的值的事件来训练模型。如果未提供值,Amazon Personalize 用所有交互数据来训练模型,而不考虑值。

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

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

  9. 选择 Next。您可以在创建解决方案版本页.

  10. 选择Finish以创建解决方案版本。

    在解决方案详细信息页面上,您可以在解决方案版本部分. 当培训完成时,状态会变为处于活动状态

创建广告活动并获取建议(控制台)

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

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

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

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

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

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

    • 每秒最小预配置事务: 设置 Amazon Personalize ical Categorical 支持的每秒最小预配置交易数。有关更多信息,请参阅 。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)进行培训

创建数据集组并上传带有展示次数数据的数据集后,您可以使用用户个性化配方来培训解决方案。可调 Hampaign创建时间戳非结构化文本元数据数据,以便 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 用户个性化配方属性和超参数的列表,请参阅属性和超级参数

  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 日之前创建的解决方案版本。

获取推荐和记录展示次数(适用于 Python 的 SDK(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 请求的新事件跟踪器。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 示例笔记本,请参阅利用探索实现用户个性化