《PinnerSage Multi-Modal User Embedding Framework forRecommendations at Pinterest》翻译

发布于 2023-10-02  1.18k 次阅读


摘要

潜在用户表示在科技行业广泛用于推动个性化推荐系统。大多数先前的研究推断出一个高维嵌入以表示一个用户,这是一个很好的起点,但在提供对用户兴趣的全面理解方面存在不足。在这项工作中,我们介绍了PinnerSage,这是一个端到端的推荐系统,通过多模态嵌入来表示每个用户,并利用这种丰富的用户表示来提供高质量的个性化推荐。PinnerSage通过使用层次聚类方法(Ward)将用户的操作聚类成概念上连贯的簇,并通过代表性的pins(Medoids)来总结这些簇,以提高效率和可解释性。PinnerSage已经在Pinterest上投入生产,并且我们概述了使其在非常大规模下无缝运行的几个设计决策。我们进行了多项离线和在线A/B实验,以展示我们的方法明显优于单一嵌入方法。

层次聚类分为凝聚和分裂两种决策手段,Ward属于凝聚类。

https://www.wikiwand.com/en/Ward%27s_method

引言

Pinterest是一个内容发现平台,每月拥有超过3.5亿活跃用户,他们可以收集和与超过20亿个名为"Pins"的视觉书签互动。每个Pin都是一个与上下文文本相关联的图像项目,代表着用户可以从世界各地找到并收藏的想法。用户可以将这些Pins保存在画板上,以便更好地组织和查找。由于Pinterest上有数十亿个Pins,因此帮助用户找到那些可能激发灵感的想法变得至关重要。因此,个性化推荐成为Pinterest用户体验的重要组成部分,并在我们的产品中无处不在。Pinterest的推荐系统涵盖了各种算法,共同定义了主页上的用户体验。不同的算法针对不同的目标进行优化,包括(a)主页上的无限推荐流(如图1所示),(b)与第三方电子商务网站链接的购物产品推荐,(c)个性化搜索结果,(d)个性化广告,(e)个性化的Pin板推荐等。因此,在Pinterest中,开发一种通用、可共享和丰富的用户兴趣理解变得非常必要,以支持大规模的跨功能用例。

潜在用户表示方法在推动我们对用户的理解方面变得越来越重要。它们已被证明在推动协同过滤技术[15, 20]方面非常有效,并作为排名模型中的特征[6, 7, 26, 28]。由于它们的有效性,用户嵌入已广泛应用于各种行业环境。它们用于推动YouTube和Google Play的推荐[6, 7],在Airbnb上个性化搜索排名和类似的列表推荐[11],向用户推荐新闻文章[19],在Etsy上连接相似的用户[30]等等。

构建一个有效的用户嵌入系统,为数亿用户提供个性化推荐,从数十亿的候选项中进行选择,具有几个固有挑战。最主要的挑战是如何有效地编码用户的多个方面?用户可以拥有各种各样的兴趣,它们之间没有明显的联系。这些兴趣可以演变,一些兴趣可能长期存在,而其他兴趣可能只涵盖短时间段。大多数以前的工作旨在通过一个单一的高维嵌入向量来捕捉用户行为和兴趣的丰富多样性。通常,要推荐的物品也在同一嵌入空间中表示。这一开始是令人满意的,但正如[3, 10, 16, 25]中描述的研究工作所指出的那样,一个好的嵌入必须编码用户的多种口味、兴趣、风格等,而物品(视频、图像、新闻文章、房屋列表、标签等)通常只有一个单一的焦点。因此,需要使用注意力层[29]或其他上下文适应方法来跟踪用户兴趣的演变。

一种有希望的替代方法是使用多个嵌入来表示一个用户,每个嵌入捕捉用户的特定方面。正如[25]所示,多嵌入用户表示可以使YouTube视频推荐的效果提高25%。[16]也在小规模基准数据集上显示了合理的增益。然而,由于先前的工作没有完全解决以下几个重要问题和关切,多嵌入模型在行业中并没有被广泛采用:

  • 需要考虑多少个嵌入来表示一个用户?
  • 如何在数亿用户的大规模情况下运行推断并更新这些嵌入?
  • 如何选择嵌入以生成个性化推荐?
  • 多嵌入模型在生产环境中是否会提供显著的增益?

大多数先前的多嵌入工作通过只运行小规模实验并未将这些技术部署到生产环境,或者通过限制用户只能有很少的嵌入来规避了这些挑战,从而限制了这些方法的效用。

本文的研究。在本文中,我们介绍了一种名为PinnerSage的端到端系统,该系统已在Pinterest上投入生产。PinnerSage是一个高度可扩展、灵活和可扩展的推荐系统,它在内部使用多个PinSage [27]嵌入来表示每个用户。它通过将用户的操作层次聚类成概念性簇并使用簇的有效表示(通过Medoids)来推断多个嵌入。然后,它使用高效的最近邻系统来为大规模推荐提供候选项生成。最后,我们通过离线和在线实验对PinnerSage进行了广泛评估。我们进行了几个大规模的A/B测试,以展示基于PinnerSage的推荐可以显著提高Pinterest的主页和购物产品推荐的用户参与度。

Medoids数据集或数据集中的的代表性对象,其与簇中所有对象的相异性之和最小。中心点在概念上与均值质心类似,但中心点始终仅限于数据集的成员。

https://www.wikiwand.com/en/Medoid

PINNERSAGE DESIGN CHOICES

image-20230930203657642

我们首先讨论PinnerSage的重要设计选择。

设计选择 1:Pin 嵌入是固定的。大多数先前的工作都同时学习用户和物品嵌入(例如[7, 11])。这会在大规模应用中引发固有问题,使模型变得复杂,减慢推断计算速度,并增加实时更新的难度。除此之外,我们认为这通常会导致不太理想的副作用。考虑图2中的示例,其中用户对绘画、鞋子和科幻感兴趣。同时学习用户和Pin嵌入会将这些不同主题的Pin嵌入靠近,而实际上我们希望避免这种情况。Pin嵌入应该只基于将相似的Pin靠近,同时尽量保持其他Pin尽可能远。因此,我们使用PinSage [27],它在不引入混杂的情况下精确实现了这一目标。PinSage是一个统一的Pin嵌入模型,它集成了视觉信号、文本注释和Pin板图信息,生成高质量的Pin嵌入。这种设计选择的附加优势是,它大大简化了我们的下游系统和推断管道。

设计选择 2:嵌入数量没有限制。以前的工作要么将嵌入数量固定为较小的数量[25],要么对它们设置了上限[16]。这些限制在最好的情况下会妨碍对用户的全面理解,最坏的情况下会合并不同的概念,导致不良的推荐。例如,合并项目嵌入,这被认为是合理的(参见[7, 28]),可能会产生一个位于非常不同区域的嵌入。图2显示了合并三个不同的Pin嵌入会导致一个最好由“能量提升早餐”这个概念表示的嵌入。不用说,基于这种合并的推荐可能存在问题。

我们的工作允许一个用户由其底层数据支持的嵌入数量来表示。这是通过使用层次凝聚聚类算法(Ward)将用户的操作聚类成概念上连贯的簇来实现的。一个轻量级用户可能由3-5个簇来表示,而一个重度用户可能由75-100个簇来表示。

使用聚类代替简单多嵌入均值,防止出现合并差异较大的嵌入后得到的嵌入与不相干的项目嵌入更加接近。先进行聚类,使得不相干的嵌入在这个阶段就分离。

设计选择 3:基于Medoids的簇表示。通常,簇是由质心来表示,这需要存储一个嵌入。此外,质心可能对簇中的异常值敏感。为了紧凑地表示一个簇,我们选择了簇成员Pin,称为Medoid。根据定义,Medoid是用户原始交互的Pin集的成员,因此避免了主题漂移的问题,并且对异常值具有鲁棒性。从系统角度看,Medoid是表示簇的一种简明方式,因为它只需要存储Medoid的Pin ID,并且还导致跨用户甚至跨应用程序的缓存共享。

不使用质心,抵抗了簇内异常值导致的计算出的质心是一个不相干的嵌入,因此具有鲁棒性

设计选择 4:Medoid采样用于候选项检索。PinnerSage通过簇Medoid为用户提供丰富的表示。然而,在实践中,由于成本问题,我们不能同时使用所有Medoid进行候选项检索。此外,用户将收到太多不同的物品。由于成本的考虑,我们按照它们的重要性得分进行3个Medoid的采样(计算在后面的部分描述)。Medoid的重要性分数每天更新,并且可以根据用户口味的变化进行调整。

代表着仅用3个Medoid来代表用户过往行为表示的兴趣

设计选择 5:处理实时更新的双重方法。对于推荐系统来说,适应用户当前需求非常重要。同时,准确地表示用户需要查看他们过去60-90天的活动。数据的庞大和增长速度使得同时考虑这两个方面变得困难。与[11]类似,我们通过结合两种方法来解决这个问题:(a)每日批量推理作业,根据用户的长期互动历史推断多个Medoid,以及(b)相同模型的在线版本,根据用户当天的互动推断Medoid。随着新活动的发生,只有在线版本会被更新。在一天结束时,批量版本会消耗当天的活动,并解决任何不一致之处。这种方法确保我们的系统能够迅速适应用户当前的需求,同时不会牺牲他们的长期兴趣。

设计选择 6:近似最近邻系统。为了生成基于嵌入的推荐,我们采用了近似最近邻(ANN)系统。给定一个查询(Medoid),ANN系统在嵌入空间中获取距离查询最近的个Pin。我们展示了如何对ANN系统进行多项改进,例如过滤低质量的Pin、精心选择不同的索引技术、缓存Medoid,最终生产版本的成本只有原型的1/10。

OUR APPROACH

符号表示:让集合表示Pinterest上的所有Pin。集合的基数数量级为十亿。这里,表示第个Pin的维PinSage嵌入。让表示用户的操作Pin序列,对于中的每个,用户在时间时要么转发,要么点击了Pin 。为了简单起见,我们在为单个用户进行建模时会省略下标,除非另有说明。我们考虑中的操作Pin是根据操作时间排序的,因此是用户的第一个操作的Pin id。

主要假设:Pin嵌入是固定的。正如在我们的设计选择1中提到的(第2节),我们认为Pin嵌入是固定的,并由一个黑匣子模型生成。在Pinterest内部,这个模型是PinSage [27],它经过训练,将相似的Pin放置在附近。

主要目标:我们的主要目标是根据用户的操作和Pin嵌入推断出每个用户的多个嵌入,其中对于所有的。由于Pin嵌入是固定的,因此不是共同推断的,我们试图学习每个,使其与Pin嵌入兼容 - 具体用于检索与相似的Pin。对于不同的用户,嵌入的数量可以不同,即不必等于。但是,为了使我们的方法在实际中可行,我们需要嵌入的数量数量级在十到百个之间

为了展示基于聚类的方法的潜力,我们考虑了一个任务,即预测用户的下一个操作。我们可以访问用户的过去操作,我们的目标是从数十亿个Pin的语料库中预测用户将要与之互动的下一个操作。为了简化这个挑战,我们通过询问用户嵌入和Pin嵌入之间的余弦距离是否高于0.8的阈值来衡量性能。我们比较了四种单一嵌入方法:

(1) 最后一个Pin:用户表示是最后一个操作Pin的嵌入

(2) 衰减平均:用户表示是他们的操作Pin嵌入的时间衰减平均值。具体来说,衰减平均嵌入

(3) 神谕:神谕可以“预测未来”,并选择用户过去操作的Pin中与最接近的作为用户表示。这衡量了一种基于过去互动来预测未来互动的方法的准确性上限。

(4) K均值神谕:用户通过对其过去操作Pin进行k均值聚类来表示。同样,神谕可以看到Pin ,并选择与其最接近的簇质心作为用户表示。

 

image-20230930203923878

表1显示了结果。神谕模型提供了显著的准确性提升,这是应该的,因为它可以看到未来的Pin。然而,它卓越的性能仅仅因为它能够回忆所有Pin的嵌入(从系统的角度来看,显然不切实际)。有趣的是,基于聚类的神谕只需回忆3个簇质心嵌入,就能大幅改善基线模型的性能。这个结果并不完全令人惊讶,因为用户有多个兴趣,并且他们经常在这些兴趣之间切换。图3描绘了这样一个在我们的情境中充斥着的例子。我们注意到,过去的5个Pin都与最新的Pin没有相关性,必须进一步查找才能找到更强的相关性。因此,具有有限内存的单一嵌入模型在这个挑战中失败了。

PinnerSage

image-20230930204442255

我们从前面的任务中得出了两个关键见解:(i) 用单一嵌入来表示用户过于限制,(ii) 基于聚类的方法可以在准确性和存储需求之间提供合理的权衡。这两个观察结果支撑了我们的方法,该方法包括以下三个组件。

(1) 获取用户在过去90天内的操作Pin,并将它们聚类成少量的簇。

(2) 为每个簇计算基于Medoid的表示。

(3) 计算每个簇对用户的重要性分数。

3.1.1 步骤1:聚类用户操作。我们对选择聚类方法设置了两个主要约束条件。

  • 这些簇应该只组合概念上相似的Pin。
  • 它应该自动确定簇的数量,以考虑用户兴趣的数量变化。

上述两个约束条件都可以通过Ward [24]来满足,它是一种基于最小方差标准的层次凝聚聚类方法(满足我们的约束条件1)。此外,簇的数量是基于距离自动确定的(满足我们的约束条件2)。在我们的实验(第5节)中,Ward的性能优于K-means和complete linkage方法[8]。其他几个基准测试也证实了Ward相对于其他聚类方法的卓越性能

我们的Ward实现是从Lance-Williams算法[14]中改编而来的,该算法提供了一种有效的聚类方法。最初,算法1将每个Pin分配到自己的簇中。在随后的每个步骤中,将导致簇内方差最小增加的两个簇合并在一起。假设在一些迭代后,我们有簇,簇之间的距离表示为。那么如果将两个簇合并,距离将如下更新:

其中是簇中的Pin数量。

Ward聚类算法的计算复杂度。Ward聚类的计算复杂度为,其中。要看到这一点,我们注意到在每次外部循环中,都会将一个簇添加到空堆栈中。现在,由于一个簇不能两次添加到堆栈中(参见附录,引理8.2),一旦算法遍历完所有的个簇(最坏情况),它就必须开始合并这些簇。导致一个簇被添加到堆栈或两个簇被合并的步骤具有的计算成本。该算法在开始时有个初始簇,然后在进展过程中有个中间合并的簇,从而导致总计算复杂度为

3.1.2 步骤2:基于Medoid的簇表示。在一组Pin被分配到一个簇之后,我们寻求一个紧凑的表示来表示该簇。一个典型的方法是考虑簇中心、时间衰减平均模型或更复杂的序列模型,如LSTM、GRU等。然而,上述技术的一个问题是它们推断的嵌入可能位于维空间中的非常不同的区域。如果分配给簇的Pin中有异常值,这尤其明显,因为异常值可能导致簇内方差很大。这种嵌入的副作用将是检索非相关的候选项,如图2所示。

我们选择了一种更健壮的技术,选择一个称为Medoid的簇成员Pin来表示该簇。我们选择使其与其他簇成员之间的平方距离之和最小化的Pin。与质心或由其他复杂模型获得的嵌入不同,Medoid从定义上是维空间中的一个点,与簇成员之一重合。形式上,它表示如下:

使用聚类中心成员来表示

Medoid的另一个好处是,我们只需要存储Medoid Pin的索引,因为它的嵌入可以按需从辅助键值存储中获取。

3.1.3 步骤3:簇的重要性。尽管用户的簇数量很小,但仍可能达到数十到数百个数量级。由于基础设施成本,我们无法利用所有这些簇来查询最近邻系统;因此,有必要确定簇对用户的相对重要性,以便我们可以根据它们的重要性分数对簇进行抽样。我们考虑使用时间衰减平均模型来实现这一目的:

其中是用户在Pin 上的操作时间。经常且最近互动的簇将比其他簇具有更高的重要性。将设置更加强调用户的频繁兴趣,而将设置更加强调用户的最近兴趣。我们发现在这两个方面之间取得了良好的平衡。

image-20230930204603745

算法2提供了PinnerSage模型的端到端概述。我们注意到我们的模型独立地为每个用户运行,因此可以在基于MapReduce的框架上并行高效地实现。我们还维护了一个在线版本的PinnerSage,它在用户最近的活动上运行。批处理版本和在线版本的输出合并在一起,用于生成推荐。

PINNERSAGE RECOMMENDATION SYSTEM

image-20230930204647526

PinnerSage可以根据底层数据支持的情况为用户推断出多个medoid。从用户表示的角度来看,这非常棒,但并不是所有的medoid都可以同时用于生成推荐。为此,我们考虑了重要性抽样。在任何给定时间,我们最多对每个用户抽样3个medoid。然后,抽样的medoid用于从我们的最近邻系统中检索候选项。图4提供了PinnerSage推荐系统的概述。

Approximate Nearest Neighbor Retrieval

image-20230930204756378

在Pinterest内部,我们拥有一个近似最近邻检索系统(ANN),它维护了一种有效的索引,用于检索与输入查询嵌入类似的Pin。由于它索引了数十亿个Pin,确保其基础设施成本和延迟在内部规定的限制范围内是一个工程挑战。我们讨论了一些技巧,这些技巧帮助ANN成为与其他候选项检索框架(如Pixie [9])并列的一流公民。

4.1.1 索引方案。我们评估了许多不同的嵌入索引方案(参见[12]),例如LSH Orthoplex [1, 21]、Product Quantization [2]、HNSW [17]等。我们发现HNSW在成本、延迟和召回率方面表现最佳。表2显示,与LSH Orthoplex相比,HNSW可以显著降低成本。HNSW的卓越性能在其他几个基准数据集上也有报道

候选池精炼。在数十亿个Pin上建立完整的索引将导致检索到许多近似重复的Pin。出于推荐目的,这些近似重复的Pin是不可取的,因为向用户展示它们的价值有限。此外,一些Pin可能因其审美特性(低分辨率或图像中包含大量文本)而具有固有的较低质量。我们通过专门的内部模型过滤掉近似重复和质量较低的Pin。

缓存框架。所有对ANN系统的查询都是在Pin嵌入空间中制定的。这些嵌入被表示为一组个浮点值,不太适合进行缓存。另一方面,Medoid的Pin ID易于缓存,并且可以减少对ANN系统的重复调用。对于出现在多个用户的Medoid中的热门Pin来说,这尤其如此。表2显示了使用Medoid而不是质心可以减少成本。

 

Model Serving

PinnerSage的主要目标是根据用户的过去参与历史向用户推荐相关内容。同时,我们希望提供与用户正在实时执行的操作相关的推荐。一种方法是将所有用户数据提供给PinnerSage,并在用户采取行动后立即运行它。然而,由于成本和延迟问题,这在实际中是不可行的:我们考虑了一个两面夹击的方法:

(1) 每日批量推断:PinnerSage每天在MapReduce集群上运行用户过去90天的操作。每日推断作业的输出(Medoid列表及其重要性)在键值存储中在线提供。

(2) 轻量级在线推断:我们收集每个用户在最新一天(在键值存储中的最后更新之后)的最近20个操作,以进行在线推断。PinnerSage使用实时基于事件的流服务来消耗操作事件,并从键值存储中启动的簇更新。

在实践中,系统优化在使PinnerSage实现生产化方面起着关键作用。表2显示了在实施过程中观察到的成本降低的粗略估计。虽然PinnerSage框架中存在一些限制,比如两面夹击的更新策略,但架构允许更容易地独立改进每个组件。

EXPERIMENT

在这里,我们对PinnerSage进行评估并从实证角度验证其性能。我们首先进行PinnerSage的定性评估,然后进行A/B实验,最后进行广泛的离线评估。

PinnerSage Visualization

Snipaste_2023-09-30_20-52-59

图5是给定用户的PinnerSage聚类的可视化。可以看出,PinnerSage通过仅将上下文相似的Pin分组在一起,很好地生成了概念上一致的聚类。图6提供了PinnerSage检索到的候选项的示例。推荐集合是与用户的前三个兴趣相关的Pin的健康混合:鞋子、小工具和食物。由于这位用户过去与这些主题互动过,他们很可能会发现这个多样化的推荐集合有趣且相关。

Large Scale A/B Experiments

我们进行了大规模的A/B实验,其中用户随机分配到控制组或实验组。分配给实验组的用户会体验PinnerSage的推荐,而控制组的用户则会得到来自单一嵌入模型的推荐(操作Pin的衰减平均嵌入)。两组用户都会看到相同数量的推荐。表3显示,PinnerSage在提高总体参与度(Repins和点击)以及提高参与倾向(每个用户的Repins和点击)方面提供了显著的参与度增益。任何增益都可以直接归因于PinnerSage推荐的质量和多样性的提高。

Offline Experiments

image-20230930205630552

我们进行了大规模的离线实验,以评估PinnerSage及其变体相对于基线方法的性能。我们抽样了大量用户(数千万),并收集了他们在过去90天内的活动(操作和印象)。在日期之前的所有活动都用于训练,从日期开始用于测试。

基线。我们将PinnerSage与以下基线进行比较:(a)单一嵌入模型,例如最后的Pin,具有多种选择的衰减平均值,LSTM,GRU和HierTCN[28],(b)具有不同类型的负例的PinnerSage的多重嵌入变体,如印象之外的随机Pin、热门Pin和通过选择与操作Pin相似的难负例。

与[28]类似,基线模型经过训练,目的是使用多种损失函数(12、铰链、对数损失等)在印象之外的印象上对用户操作进行排名。此外,我们还使用了多种负例类型对基线进行了训练,例如随机Pin、热门Pin以及通过选择与操作Pin相似的难负例。

评估方法。对于给定用户的模型推断的嵌入,将在该用户的未来操作中进行评估。测试批次按照时间顺序处理,首先是第d天,然后是第d+1天,依此类推。一旦完成了测试批次的评估,该批次将用于更新模型,模拟每日批量更新策略。

5.3.1 候选检索任务结果。我们使用用户嵌入的主要用途是从非常大的候选池(数十亿个Pin)中检索相关的候选推荐。候选检索集的生成方法如下:假设一个模型为用户输出个嵌入,然后每个嵌入检索个最近邻的Pin,最后检索的Pin组合在一起创建大小的推荐集(由于重叠可能小于400)。使用来自测试批次的观察用户操作,对推荐集进行以下两个指标的评估:

(1)相关性(Rel.)是观察到的操作Pin与任何推荐Pin之间的余弦相似度高()的比例。更高的相关性值将增加用户发现推荐集有用的机会。

(2)召回率是在推荐集中找到的操作Pin的比例。

image-20230930205933485

表4显示,PinnerSage在所有基线上更有效地检索相关的候选。特别是,PinnerSage的单一嵌入版本优于最先进的单一嵌入序列方法。

在PinnerSage的变体中,我们注意到Ward优于K均值和完全链接方法。对于群集嵌入计算,序列模型和中位数选择具有相似的性能,因此我们选择了中位数,因为它更容易存储并具有更好的缓存特性。具有的群集重要性,与计算群集中的钉子数量相同,表现比(我们的选择)差。直观地说,这是有道理的,因为值较高会在频率之外还包括最近的兴趣。但是,如果值太高,那么它会过分强调最近的兴趣,可能会影响长期兴趣,从而降低模型性能(相比)。

5.3.2 候选排名任务结果。用户嵌入通常用作排名模型的特征,特别是用于对候选Pin进行排名。候选集由测试批次中的操作和印象Pin组成。为确保每个测试批次的权重相等,我们随机抽样每个操作20个印象。在给定测试批次中,如果印象少于20个,则添加随机样本以保持操作与印象的1:20比率。最后,根据与任何用户嵌入的最大余弦相似度的降序对候选Pin进行排序。更好的嵌入模型应该能够将操作排在印象之上。通过以下两个指标捕获了这一直观:

(1)R-Precision(R-Prec.)是前名操作Pin的比例,其中是用于针对印象进行排名的操作数。是前个排名项目中的信噪比度量。

(2)Reciprocal Rank(Rec. Rank)是操作Pin的平均倒数秩。它衡量了操作Pin在排名中的高低。

表5显示,PinnerSage在基线上表现出色,表明其生成的用户嵌入作为一个独立的特征的有效性。关于单一嵌入模型,我们对检索任务的观察与排名任务类似:单一嵌入PinnerSage生成了更好的嵌入。在PinnerSage的变体中,我们注意到排名任务对嵌入计算不太敏感,因此质心、中位数和序列模型具有类似的性能,因为嵌入仅用于对Pin进行排序。然而,对于群集重要性得分来说,这是敏感的,因为它决定了用于排名的3个用户嵌入。

5.3.3 多样性与相关性权衡。推荐系统通常需要在相关性和多样性之间权衡[5]。对于具有有限关注点的单一嵌入模型,这一点尤为重要。另一方面,多重嵌入模型具有同时覆盖不同用户兴趣的灵活性。我们将多样性定义为推荐集中的平均两两余弦距离。

图7显示了与最后的Pin模型相比,多样性/相关性提升。我们注意到,通过增加,可以增加相关性和多样性。从直观上看,这是有道理的,因为对于较大的,推荐集由涵盖用户多个兴趣的相关Pin组成。对于,相关性提升逐渐减小,因为用户的活动在一天内不会很大地变化(平均而言)。实际上,对于,PinnerSage实现的多样性与操作Pin多样性非常接近,我们认为这是一个甜点。

有大量的研究工作专注于为用户和物品学习嵌入向量,例如,[6, 7, 23, 26, 28]等。这些工作的许多都受到了用于学习词向量表示的模型的启发,例如高度可扩展的连续词袋(CBOW)和跳字(SG)语言模型Word2Vec [18]。来自多个领域的研究人员已经采用了词表示学习模型来解决多个问题,例如在电影、音乐、职位和图钉推荐等各种场景中进行候选物品排名问题[4,13,22,28]。最近还有一些研究着重于候选物品检索。[6]提到可以通过机器学习模型和人工定义的规则的组合来处理候选物品检索问题;[23]考虑了来自数十亿用户和物品的大规模候选物品生成,并提出了一种离线预计算每个嵌入向量的数百个相似物品的解决方案。[7]讨论了基于单一用户嵌入的候选物品生成和检索系统。

一些先前的工作[3,16,25]考虑了使用多个嵌入向量来对用户建模。[3]使用多个时间敏感的上下文配置文件来捕捉用户不断变化的兴趣。[25]考虑了基于最大函数的非线性因子模型,等效地使用多个向量来表示单个用户,并在YouTube推荐中展示了25%的改进。[16]使用多义嵌入(具有多个含义的嵌入向量)来改善节点表示,但它依赖于对每个嵌入向量的出现概率的估计来进行推断。[16, 25]都在离线评估数据集上报告了结果。我们的工作是对先前工作的补充,并在其基础上构建,以展示如何在实际生产环境中运用丰富的多重嵌入模型。

CONCLUSION

在这项工作中,我们提出了一个名为PinnerSage的端到端系统,它为Pinterest的个性化推荐提供支持。与以前的基于单一嵌入的用户表示的生产系统不同,PinnerSage提出了一种基于多重嵌入的用户表示方案。我们提出的聚类方案确保我们完全了解用户的需求并更好地理解它们。为了实现这一点,我们采用了几种设计选择,使我们的系统能够高效有效地运行,例如基于中位数的集群表示和中位数的重要性采样。我们的离线实验表明,我们的方法在检索任务的相关性方面取得了显著的改进,同时在排名任务的倒数排名方面也有所改善。我们的大规模A / B测试显示,PinnerSage在实际在线环境中提供了显著的收益。我们模型提供的改进主要归因于它更好地理解用户兴趣并快速响应他们的需求。我们考虑了一些有前途的未来工作领域,例如选择每个集群的多个中位数和更系统的基于奖励的框架,以在估算集群重要性时融入隐式反馈。


面向ACG编程