背景

Amazon Personalize 是一种机器学习服务,Amazon Personalize 使开发人员可以通过 Amazon.com 使用的机器学习 (ML) 技术来构建应用程序,从而提供实时个性化推荐,而无需 ML 专业知识。Amazon Pesonalize 在完成数据的检查、特征工程、超参数的选择、训练模型、模型优化、模型部署,同时提供模型评估指标,与个性化模型给终端用户使用。然而针对推荐系统中我们关注多样性缺乏有效的评估指标,尤其是,关于多样性、新颖性和偶然性。我们提供了一种评估 Amazon Personalize 的方法。特别是关于多样性、新颖性和偶然性。并以 MovieLens (by grouplens) 数据为例,逐步演示和演练。并提供完整的范例 amazon-personalize-model 于官方 Github aws-sample上。

Amazon Personalize

image.png

Amazon Personalize 是一种机器学习服务,可让开发人员轻松地为使用自家应用程序的客户提供个性化推荐。Amazon Personalize 是以在 Amazon.com 使用的相同技术为基础,允许开发人员在应用程序中轻松构建复杂的个性化功能。为您的用户,产生个性化的产品和内容推荐、定制的搜索结果,或是利用推荐的结,来决定的促销项目。

使用 Amazon Personalize,您就可以为根据用户的购物历史记录使用产品推荐来个性化他们的主页。在产品详细信息页面上推荐类似的物品,以帮助用户轻松找到他们需要的物品。帮助用户快速找到相关的新产品、交易和促销活动。轻松地对相关产品推荐重新排名,以推动切实的商业成果。 使用个性化产品推荐来个性化推送通知和营销电子邮件,提高营销传播。或是更进一步的将 Amazon Personalize 与业务逻辑相结合,以创建高质量的购物车提升销售和交叉销售推荐。

模型训练与评估

1、测试数据集

GroupLens Research 从 MovieLens 网站 https://movielens.org/ 收集并提供了评级数据集。数据集是在不同的时间段内收集的,具体取决于数据集的大小。此篇博客使用 MovieLens 100K 电影收视率资料,用来评估 Amazon Personalize 模型的表现。资料内容包含:1000 名用户对 1700 部电影的 100,000 次评分,于 1998 年 4 月发布。

2、创建个性化解决方案和活动

等我们准备好测试数据集,即可参考范例 amazon-personalize-model https://github.com/aws-sample... 透过 Amazon Personalize SDK 与 API 做交互。我们将创建数据集组,并将用户数据、项目数据和交互数据上传到 Amazon S3。在这些数据集准备好后,Amazon Personalize 可以开始创建解决方案和活动以进行交互。您可以参考 02-personalize_ranking_movielens.ipynb https://github.com/aws-sample... 了解详细信息。

同时,我们会进行实验,比如03-personalize_ranking_movielens-userpca-exp.ipynb https://github.com/aws-sample... 和04-personalize_ranking_movielens-no-user-baseline.ipynb https://github.com/aws-sample... 作为 baseline来比较性能。

3、模型评估

Amazon Pesonalize 在完成数据的检查、特征工程、超参数的选择、训练模型、模型最佳化、模型部署,同时提供四个模型评估指标,除此之外我们会基于用户数据与商品的数据,评估额外的三个指标:多样性、新颖性和偶然性。例如:我们总共有 A-Z 26 部电影,我们会依据模型推荐的结果,说明与计算各项评估指标:

覆盖率(coverage)

覆盖率告诉您 Amazon Personalize 推荐的结果,与数据集中的商品的总数的比例。如果我们希望 Amazon Personalize 推荐更多样的商品,可以参考覆盖率较高的模型。例如:26个电影中,A,B,C,D,E 出现在推荐结果中,覆盖率为:5/26。

精准度(precision at K)

精准度告诉您模型的的前K的推荐结果中(5、10 或 25)中相关的结果所占比例。Amazon Personalize 将根据前 K 项推荐中的相关建议数量(除以 K)来计算此指标,其中 K 为 5、 10或25。例如:A,B,C,D,E 出现在推荐结果中,其中B,D 为相关的推荐结果则精准度为2/5。

平均倒数排名(mean reciprocal rank)

平均倒数排名帮助我们评估模型排名最高的推荐结果出相关结果的评估度量。如果您对单个排名最高的推荐感兴趣,那么此指标很有用。例如:A,B,C,D,E 出现在推荐结果中,其中B,D 为相关的推荐结果,第二个推荐即是相关的推荐结果,倒数排名为1/2。取平均数则是上述倒数排名加总取平均。

归一化贴现累积收益 (normalized discounted cumulative gain (NCDG) at K (5/10/25))

归一化贴现累积收益,表示模型排名高的推荐结果的相关性,其中 K 是 5、10 或 25 个建议的样本数量。此指标奖励出现在列表顶部附近的相关项目,因为列表顶部通常会引起更多关注。Amazon Personalize 使用加权系数1/log(1+position),其中列表的顶部是位置1。例如:A,B,C,D,E 出现在推荐结果中,其中B,D 为相关的推荐结果,B加权系数计算结果为1/log(1+2),D 加权系数计算结果为1/log(1+4)。最理想的结果即是推荐的前两位A,B皆为相关结果为1/log(1+1)+1/log(1+2)。把实际的推荐结果的加权系数计算加总后除以理想的推荐结果,即为归一化贴现累积收益

多样性(diversity)

多样性表示模型产生的推荐内容在多样性上的评估指标,当列表内的多样性更高时,用户往往对推荐更满意。例如:A,B,C,D,E 出现在推荐结果中,如五部电影来自不同的导演,则在多样性上会有较好的表现。

多样性的计算公式主要反映推荐结果中,对象的相异程度,参考 semantic scholar 中 Diversity, Serendipity, Novelty, and Coverage中定义的公式如下 :

image.png

算式中,R 为推荐结果列表,|R| 为推荐结果列表的长度,dist(I, j) 为推荐系统开发者自定义的距离函式,描述两个对象的相异性。多样性的计算则是将推荐结果中的对象两两配对的距离加总,并且对推荐结果的长度进行正规化。

以电影推荐而言,自定义的距离函式可以是两部电影的风格差异、演员差异、导演差异等等因素的总和分数,不同领域的距离函数定义需视该领域中的逻辑与用户认知而定。在 MovieLens 的推荐系统中,我们将 dist(I, j) 的实作定义为电影类别的上的差距,在movielens 的电影类别有19类, 一部电影可属于多个类别,将每部电影的类别onehot encoding后,再以manhattandistance计算两两电影之间的距离。

新颖性(novelty)

新颖性用来评估该推荐内容,在多大程度上对用户来说是新鲜且未知的。例如,A,B,C,D,E出现在推荐结果之中,且都是热门的电影,也许推荐本身是准确的,但因为是客户明显会观看的电影。用户可能觉得单调乏味,所以我们会希望推荐的结果能够包含一些冷门的电影,给客户新鲜感,也探索更多的可能性。

新颖性的公式主要反映推荐结果中,对象的冷门程度。参考 semantic scholar 中 Diversity, Serendipity, Novelty, and Coverage 的论文中定义的公式如下:

image.png

公式中 R 代表推荐的结果,p(.) 为开发者定义的热门度函数,在热门度分布中,在长尾部位的物品在新颖性分数的贡献度较高。在 MovieLens 数据集内,我们将 p(i) 定义为电影 i 的大于 3 的评等事件加总。

偶然性(serendipity)

偶然性用来评估该推荐结果有多让被推荐的用户感到惊喜,我们通常会希望推荐结果是相关的,但是同时具有偶然性。 例如,用户过去都是看科幻电影,而A,B,C,D,E出现在推荐结果之中,A-D是科幻电影,而E是一位知名科幻电影的导演,去拍的剧情片,这也许给习惯看科幻电影的用户一些新的发现,而这样的推荐结果也给用户一个惊喜。

偶然性的定义是希望能反映出在系统推荐结果中,如果对象不属于用户熟悉的对象种类,却能获得点击、播放等等正向反馈的比例,参考semantic scholar中Diversity,Serendipity,Novelty,and Coverage的论文,偶然性的定义如下 :

image.png

R 为推荐结果,Runexp 定义的是用户不熟悉的品项,比方以上例而言,用户过去都看科幻片,在结果中出现的爱情片就为用户不熟悉的结果。Ruseful 在推荐结果中,用户有正向反馈,如点击、观影的对象。在式中的分母是取两个集合的交集,亦即在不熟悉的结果中,又获得用户喜爱的推荐结果数量,除以推荐结果列表的长度即为偶然性。推荐系统开发者在定义 Runexp 及 Ruseful 时必需依照场景和领域知识调整。

在此示例中,我们定义了用户对一个物品熟悉的定义 – 针对某个用户 a, 将其评点过的电影 Ma 所属的类别矢量加总,将在每个类别维度上的总量高于全维度平均的类别,定义为用户 a 喜爱的类别Ca,任一电影的类别Cm和Ca有交集,即定义为熟悉的电影。而有正向回馈的推荐结果则为,用户最后有给三分以上评级的电影。

实验结果

首先,使用 MovieLens 提供的 Schema 来建立 Amazon Personalize 的 Datasets group. 所得之结果为表 X 的 Baseline 栏位。

在 Diversity,Serendipity,Novelty,and Coverage https://www.semanticscholar.o... 中,提到调控 Diversity,Novelty 与 Serendipity 的方式,一部份是控制 content based recommendation 与 collaborative recommendation 的影响力。另一部分则是控制 popular 对象的影响程度

我们的实验中,以上面两个策略来设计实验。

1、用户数据增强

将用户评点过的电影类别信息,加入用户信息。针对某个用户 a, 将其评点三分以上的电影 Ma 所属的类别向量加总。在MovieLens的范例中,每个用户至多会有 19 维度的矢量来描述对电影类别的喜爱 (范例),由类别资讯加强电影内容的影响力。

附带一提,由于Amazon Personalize 具有五个字段的限制,如果将用户Demographic的信息一并加入,所需字段会远超过Amazon Personalize能容许的范围,此时可以利用降维技术,如 PCA 等等,将用户的信息压缩至Amazon Personalize 可以容许的范围。

用户数据增强后的实验结果如表一中的 “Enhanced User Profile”, 我们可以观察到,和Accuracy 相关的metrics 有下降的情况,但是Diversity 与Novelty增加了,另外,Serendipity有下降的趋势,可以说明是因为推荐的结果更趋近用户的喜好类别。

2、降低Popular对象的影响力

基于用户行为开发出的推荐系统会倾向于推荐欢迎的物品,间接会影响多样性、新颖性与偶然性。在这个实验中我们定义一个电影 i 受欢迎的程度, pop(i) , 为对该电影评分大于 3 的用户总数,将用户 u 对电影 i 点评的评分 Su,i 对 pop(i) 进行正规化为 S’u,i。

在 Amazon Personalize 中,我们将用户互动数据中的 event_value 设置成 S’u,i

在 Amazon Personalize 中,我们将用户互动数据中的 event_value 设置成 S’u,i. 在Amazon Personalize 中是将使用者事件的有无作为优化目前,而不会将 event_value 作为优化目标;但 event_value 仍为模型的输入值,藉此可影响推荐的结果。其结果在表一中的 Normalized by Popularity 字段中显示。其中可以看到多样性、新颖性及偶然性比较起 baseline 版本有提升的效果,但是在准确度上的评量亦是下降的。

脱机评量时,想增加多样性、新颖性及偶然性有可能会伴随准确度的下降,可能的原因之一是由于旧有数据的用户行为会集中在受欢迎的对象上,此时准确度下降未必是对推荐系统不佳的事,要考虑应用场景再进行算法的选取。

image.png

表一 实验结果比较

总结

在实际使用 Amazon Personalize 的场景中,我们除了常见的覆盖率、精准度、平均倒数排名、归一化贴现累积收益等指标,我们也需要去评估模型是否能够从多样性、新颖性、偶然性等这些超越精准度的指标,来评估模型的推荐结果是否能让用户感到惊喜或满意。此篇博客,我们用 MovieLens 实验数据资料,先根据论文的定义提供的公式,让我们能够量化上述指标,进而能够评估与回答用户在这些超越精准度的指标上 Amazon Personalize 模型的表现。如希望了解,评估模型与回测方法,与透过 Amazon SageMaker Notebook 实作公式的完整的范例,可以参考 amazon-personalize-model https://github.com/aws-sample... 于官方 Github aws-sample上的范例。

本篇作者

image.png

王祥瑞

亚马逊云科技解决方案架构师

主要基于亚马逊云科技的云计算方案架构的咨询和设计,研究在云上构建现代解决方案与微服务架构设计,尤其是在大数据和机器学习方面。通过全部12张的亚马逊云科技认证,扩展技术的深度与广度。

image.png

Yi-An Chen

机器学习专家解决方案架构师

专注在机器学习和数据方面领域。2011 年毕业于台湾大学信息管理系博士,主修为信息探勘。其后任职于台湾雅虎及科科科技。在开发机器学习品及 AI应用上有十年以上的经验,对于电商、多媒体及音乐推荐系统、多媒体容分析及自然语言处理都有品化的成功案例,并与学界合发多篇论文。致力于协同客解决导入机器学习技术时所遭遇的挑战,打造成功的机器学习应用。


亚马逊云开发者
2.9k 声望9.6k 粉丝

亚马逊云开发者社区是面向开发者交流与互动的平台。在这里,你可以分享和获取有关云计算、人工智能、IoT、区块链等相关技术和前沿知识,也可以与同行或爱好者们交流探讨,共同成长。