使用全新的 Amazon Personalize 配方向您的用户推荐热门商品

Amazon Personalize 很高兴地宣布推出新的 Trending-Now 配方,以帮助您以最快的速度推荐在用户中越来越受欢迎的商品。

Amazon Personalize 是一项完全托管的机器学习 (ML) 服务,开发者可以轻松地向其用户提供个性化体验。它使您能够通过在网站、应用程序和有针对性的营销活动中提供个性化的产品和内容推荐来提高客户参与度。您无需任何机器学习经验即可开始使用 API,只需点击几下即可轻松构建复杂的个性化功能。您的所有数据都经过加密,以确保私密性和安全性,并且仅用于为用户创建推荐。

用户兴趣可能会根据各种因素而变化,例如外部事件或其他用户的兴趣。网站和应用程序必须根据这些不断变化的兴趣量身定制推荐,以提高用户参与度。借助 Trending-Now,您可以显示目录中比其他商品更快的人气上升的商品,例如热门新闻、热门社交内容或新发行的电影。Amazon Personalize 会以比其他目录商品更快的速度寻找越来越受欢迎的商品,以帮助用户发现吸引同行的商品。Amazon Personalize 还允许您定义根据其独特业务环境计算趋势的时间段,根据用户的最新互动数据,可以选择每 30 分钟、1 小时、3 小时或 1 天计算一次。

在这篇文章中,我们将介绍如何使用这个新食谱向您的用户推荐热门商品。

解决方案概述

Trending-Now 通过计算每个项目在可配置的时间间隔内的互动量增加来识别热门项目。增长率最高的项目被视为热门商品。时间基于您的互动数据集中的时间戳数据。在创建解决方案时,您可以通过提供趋势发现频率来指定时间间隔。

Trending-Now 配方需要一个互动数据集,该数据集包含您的网站或应用程序上的个人用户和商品事件(例如点击、观看或购买)的记录以及事件时间戳。您可以使用 趋势发现频率 参数 来定义计算和刷新趋势的时间间隔。例如,如果您的网站流量大,且趋势变化迅速,则可以指定 30 分钟作为趋势发现频率。每隔 30 分钟,Amazon Personalize 就会查看成功引入的互动并刷新热门商品。此食谱还允许您捕获和显示过去 30 分钟内推出的任何新内容,这些内容比任何先前存在的目录项目更受用户群的兴趣。对于任何大于 2 小时的参数值,Amazon Personalize 会每 2 小时自动刷新一次热门商品推荐,以考虑新的互动和新商品。

由于交互数据稀疏或缺失,流量较低但使用 30 分钟值的数据集的推荐准确性可能较差。Trending-Now 配方要求您提供过去至少两个时间段的互动数据(该时间段是您所需的趋势发现频率)。如果在过去 2 个时间段内没有互动数据,Amazon Personalize 会将热门商品替换为热门商品,直到所需的最低数据可用为止。

Trending-Now 配方既适用于自定义数据集组,也适用于视频点播域数据集组。在这篇文章中,我们将演示如何使用这项针对带有自定义数据集组的媒体用例的全新 Trending-Now 功能,针对用户兴趣的快速变化趋势量身定制推荐。下图说明了解决方案的工作流程。

solution workflow.

例如,在视频点播应用程序中,您可以使用此功能通过为趋势发现频率指定 1 小时来显示过去 1 小时内的热门电影。对于每 1 小时的数据,Amazon Personalize 就会识别出自上次评估以来互动增长率最高的商品。可用频率包括 30 分钟、1 小时、3 小时和 1 天。

先决条件

要使用 Trending-Now 配方,你首先需要在 Amazon Personalize 控制台上设置亚马逊个性化资源。创建数据集组、导入数据、训练解决方案版本并部署营销活动。有关完整说明,请参阅 入门

在这篇文章中,我们采用了控制台的方法,使用新的 Trending-Now 配方来部署战役。或者,您可以使用提供的 笔记本 使用 SDK 方法构建整个解决方案 。对于这两种方法,我们都使用 MovieLens 公共数据集

准备数据集

完成以下步骤来准备数据集:

  1. 创建数据集组
  2. 使用以下 架构 创建互动数据集 :
    
    {“类型”:“记录”,“名称”:“互动”,“命名空间”:“com.amazonaws.personalize.schema”,“字段”:[{“名称”:“USER_ID”,“字符串”},{“名称”:“时间戳””,“类型”:“长”}],“版本”:“1.0”
    }
  3. 将互动数据 从亚马逊 Simp le Storage Service ( Amazon S3) 导入到 Amazon Personalize。

对于互动数据,我们使用电影评论数据集MovieLens中的评分历史记录。

请使用以下 python 代码从 MovieLens 公共数据集中整理互动数据集。

import pandas as pd
import time
import datetime

data_dir = "blog_data"
!mkdir $data_dir
!cd $data_dir && wget http://files.grouplens.org/datasets/movielens/ml-25m.zip
!cd $data_dir && unzip ml-25m.zip
dataset_dir = data_dir + "/ml-25m/"

interactions_df = pd.read_csv(dataset_dir + '/ratings.csv')
interactions_df.drop(columns=['rating'], axis=1, inplace=True)
interactions_df = interactions_df.rename(columns = {'userId':'USER_ID', 'movieId':'ITEM_ID', 'timestamp':'TIMESTAMP'})
interactions_file = 'curated_interactions_training_data.csv'
interactions_df.to_csv(interactions_file, index=False)

MovieLens 数据集包含 user_id 评分 item_id 、用户和物品之间的互动以及这种互动发生的时间(时间戳,以 UNIX 纪元时间给出)。该数据集还包含电影标题信息,用于将电影 ID 映射到实际标题和类型。下表是数据集的示例。

USER_ID ITEM_ID TIMESTAMP TITLE GENRES
116927 1101 1105210919 Top Gun (1986) Action|Romance
158267 719 974847063 Multiplicity (1996) Comedy
55098 186871 1526204585 Heal (2017) Documentary
159290 59315 1485663555 Iron Man (2008) Action|Adventure|Sci-Fi
108844 34319 1428229516 Island, The (2005) Action|Sci-Fi|Thriller
85390 2916 953264936 Total Recall (1990) Action|Adventure|Sci-Fi|Thriller
103930 18 839915700 Four Rooms (1995) Comedy
104176 1735 985295513 Great Expectations (1998) Drama|Romance
97523 1304 1158428003 Butch Cassidy and the Sundance Kid (1969) Action|Western
87619 6365 1066077797 Matrix Reloaded, The (2003) Action|Adventure|Sci-Fi|Thriller|IMAX

精选数据集包括用于 训练 Ama zon Personalize 模型的 USER _ID 、ITEM_ ID (电影 ID)和时间戳 。这些是使用 Trending-Now 配方训练模型的必填字段。下表是精选数据集的示例。

USER_ID ITEM_ID TIMESTAMP
48953 529 841223587
23069 1748 1092352526
117521 26285 1231959564
18774 457 848840461
58018 179819 1515032190
9685 79132 1462582799
41304 6650 1516310539
152634 2560 1113843031
57332 3387 986506413
12857 6787 1356651687

训练模型

数据集导入任务完成后,您就可以训练模型了。

  1. 解决方案 选项卡上,选择 创建解决方案
  2. 选择 全新 aws-trending-no w 配方。
  3. 高级配置 部分中,将 趋势发现频率 设置 为 30 分钟。
  4. 选择 “ 创建解决方案 ” 开始训练。
    Create Solution

创建广告活动

在 Amazon Personalize 中,您使用广告系列为用户提供推荐。在此步骤中,您将使用上一步中创建的解决方案创建广告系列,并获得 Trending-Now 推荐:

  1. 广告系列 选项卡上,选择 创建广告系列
  2. 活动名称 中 ,输入一个名称。
  3. 在 “ 解决方案 ” 中,选择 “立即走向 趋势 ” 的解决方案。
  4. 对于 解决方案版本 ID ,请选择使用 aws-trending- now 配方的解决方案版本。
  5. 对于 每秒 最低预配置交易量 ,将其保留为默认值。
  6. 选择 “ 创建广告活动 ” 以开始创建您的广告活动。
    Create new campaign

获取推荐

创建或更新广告系列后,您可以获得按从高到低排序的热门商品的推荐列表。 在广告活动( 即时关注广告 系列 ) 个性化 API 选项卡上,选择获取推荐。

Get recommendations

以下屏幕截图显示了活动详情页面,其中包含来自 GetRecommandation s 调用的结果,其中包括推荐商品和推荐 ID。

campaign detail page with results

getRecommendations 调 用的结果包括推荐项目的 ID。下表是将 ID 映射到实际电影标题以提高可读性后的示例。执行映射的代码在随附的笔记本中提供。

ITEM_ID TITLE
356 Forrest Gump (1994)
318 Shawshank Redemption, The (1994)
58559 Dark Knight, The (2008)
33794 Batman Begins (2005)
44191 V for Vendetta (2006)
48516 Departed, The (2006)
195159 Spider-Man: Into the Spider-Verse (2018)
122914 Avengers: Infinity War – Part II (2019)
91974 Underworld: Awakening (2012)
204698 Joker (2019)

获取热门推荐

在您使用 aws-trending-now 配方创建解决方案版本后, Amazon Personalize 将通过计算每个项目在可配置的时间间隔内互动的增加量来识别最受欢迎的项目。增长率最高的项目被视为热门商品。时间基于互动数据集中的时间戳数据。

现在,让我们向 Amazon Personalize 提供最新的互动信息,以计算热门商品。我们可以通过创建 事件跟踪器 或使用增量模式下的数据集导入任务进行批量数据上传,使用实时提取来提供最新的交互信息。在笔记本中,我们提供了示例代码,可使用事件跟踪器将最新的实时互动数据单独导入 Amazon Personalize。

在这篇文章中,我们将以批量数据上传的形式提供最新的交互以及增量模式下的数据集导入任务。请使用以下 python 代码生成虚拟增量交互并使用数据集导入任务上传增量交互数据。

import pandas as pd
import time
import datetime

#Selecting some random USER_ID’s for generating incremental interactions.
users_list = ['20371','63409','54535','119138','58953','82982','19044','139171','98598','23822','112012','121380','2660','46948','5656','68919','152414','31234','88240','40395','49296','80280','150179','138474','124489','145218','141810','82607']
#Selecting some random ITEM_ID’s for generating incremental interactions.
items_list = [ '153','2459','1792','3948','2363','260','61248','6539','2407','8961']

time_epoch = int(time.time())
time_epoch = time_epoch-3600
inc_df = pd.DataFrame(columns=["USER_ID","ITEM_ID","TIMESTAMP"])

i=0
for j in range(0,10):
    for k in users_list:
        for l in items_list:
            time_epoch = time_epoch+1
            list_row = [str(k),str(l),time_epoch]
            inc_df.loc[i] = list_row
            i=i+1

incremental_file = 'interactions_incremental_data.csv'
inc_df.to_csv(incremental_file, index=False)

我们通过随机选择 USER_ID 和 ITEM _ID 的几个值,并在这些用户 和带有最新时间 戳的物品 之间生成互动来合成这些交互作用。下表包含随机选择的 ITEM_ID 值,用于生成增量交互作用。

ITEM_ID TITLE
153 Batman Forever (1995)
260 Star Wars: Episode IV – A New Hope (1977)
1792 U.S. Marshals (1998)
2363 Godzilla (Gojira) (1954)
2407 Cocoon (1985)
2459 Texas Chainsaw Massacre, The (1974)
3948 Meet the Parents (2000)
6539 Pirates of the Caribbean: The Curse of the Bla…
8961 Incredibles, The (2004)
61248 Death Race (2008)

通过选择 “ 追加到当前数据集 ” (如果使用 API 则使用增量模式)上传增量交互数据 ,如以下快照所示。

Upload the incremental interactions data by selecting Append to current dataset (or use incremental mode if using APIs),

增量交互数据集的导入任务完成后,请等待您为新建议配置的趋势发现频率时间长度得到反映。

在广告活动 API 页面 上选择 获取 推荐,以获取最新的热门商品推荐列表。

现在我们看到了最新的推荐物品清单。为了便于阅读,下表包含将 ID 映射到实际电影标题之后的数据。执行映射的代码在随附的笔记本中提供。

ITEM_ID TITLE
260 Star Wars: Episode IV – A New Hope (1977)
6539 Pirates of the Caribbean: The Curse of the Bla…
153 Batman Forever (1995)
3948 Meet the Parents (2000)
1792 U.S. Marshals (1998)
2459 Texas Chainsaw Massacre, The (1974)
2363 Godzilla (Gojira) (1954)
61248 Death Race (2008)
8961 Incredibles, The (2004)
2407 Cocoon (1985)

前面的 getRecommandations 调用包括推荐 项目的 ID。现在我们看到推荐的 ITEM_ID 值来自我们提供给 Amazon Personalize 模型的增量互动数据集。这并不奇怪,因为这些是最近30分钟内从我们的合成数据集中获得交互的唯一项目。

现在,您已经成功训练了 Trending-Now 模型,以生成越来越受用户欢迎的商品推荐,并根据用户兴趣定制推荐。展望未来,你可以调整这段代码来创建其他推荐器。

您还可以将 过滤器 与 Trending-Now 配方 一起使用来区分不同类型内容(例如长视频和短视频)之间的趋势,或者应用 促销过滤器 ,根据符合业务目标的规则明确推荐特定项目。

清理

在执行本文中概述的步骤时,请务必清理在账户中创建的所有未使用资源。您可以通过 亚马逊云科技 管理控制台 或使用 Python SDK 删除筛选器、推荐器、数据集和数据集组。

摘要

Ama zon Personalize 推 出的全新 aws-trending -now 配方可帮助您识别迅速受到用户欢迎的商品,并针对用户兴趣的快速变化趋势量身定制推荐。

有关 Amazon Personalize 的更多信息,请参阅 亚马逊个性化开发者指南


作者简介

Vamshi Krishna Enabothal a 是 亚马逊云科技 的高级应用人工智能专家架构师。他与来自不同领域的客户合作,以加快高影响力的数据、分析和机器学习计划。他热衷于人工智能和机器学习中的推荐系统、自然语言处理和计算机视觉领域。工作之余,Vamshi 是一名遥控爱好者,负责制造遥控设备(飞机、汽车和无人机),还喜欢园艺。

Anchit Gupta 是 Amazon P ersonalize 的高级产品经理。她专注于提供可以更轻松地构建机器学习解决方案的产品。在业余时间,她喜欢做饭、玩棋盘/纸牌游戏和阅读。

Abhishek Mangal 是Amazon Personalize的软件工程师,致力于设计软件系统以大规模为客户提供服务。在业余时间,他喜欢看动画,并认为《海贼王》是近代历史上最伟大的叙事作品。

丁浩 是 亚马逊云科技 人工智能实验室的应用科学家,正在为 亚马逊云科技 Personalize 开发下一代推荐系统。他的研究兴趣在于推荐系统、贝叶斯深度学习和大型语言模型 (LLM)。

刘天敏 是一名高级软件工程师,在亚马逊个性化部工作。他专注于使用各种机器学习算法大规模开发推荐系统。在业余时间,他喜欢玩电子游戏、看体育赛事和弹钢琴。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。