近年来,由于互联网服务的快速增长,用户一直在与信息过载作斗争。搜索引擎、推荐系统和在线广告已经成为每天为数十亿用户提供服务的基础信息检索application
。这些系统大多数遵循多阶段级联架构multi-stage cascade architecture
,即通过 matching
、pre-ranking
、ranking
和 reranking
等顺序模块sequential modules
来提取候选item
。下图给出了一个简短的说明。
已经有很多论文讨论如何建立一个有效effective
的、高效efficient
的 ranking
系统。然而,很少有工作关注 pre-ranking
系统。为简单起见,在本文的剩余部分只讨论展示广告系统display advertising system
中 pre-ranking
系统的设计。这里讨论的技术可以很容易应用于推荐系统、搜索引擎等。
长期以来,人们认为 pre-ranking
只是 ranking
系统的简化版本。
serving
的算力成本computing power cost
挑战,需要对更大规模的候选item
集合进行排序。以阿里巴巴的展示广告系统为例。传统上,pre-ranking
系统要评分的候选集合的规模可以扩展到数万个 item
,而在后续 ranking
系统中要评分的候选集合规模则变成数百个item
。ranking
和 pre-ranking
系统都有严格的延迟限制,例如 10 ~ 20 ms
。在这种情况下,pre-ranking
系统通常被设计为轻量级排序系统,通过简化ranking
模型来处理在线推断的算力爆炸。pre-ranking
系统的发展历史简介:回顾 pre-ranking
系统在工业中的发展历史,我们可以简单地从模型的角度将其分为四代,如下图所示。 分别是 user
、ad
、cross
的原始特征。 分别是user
、ad
、cross
特征的 embedding
。
第一代是非个性化的 ad-wise
统计得分。它通过平均每个广告的最近CTR
来计算 pre-rank score
。score
可以高频high frequency
更新。
缺点:非个性化、无法处理新广告、曝光稀疏广告的
CTR
统计不置信。
第二代是Logistic Regression: LR
模型。它是浅层机器学习时代大规模ranking
模型的轻量级版本,可以以online learning
和 serving
的方式进行部署。
缺点:需要大量的手工特征工程、无法捕获特征之间的非线性交互作用。
第三代是基于向量内积的深度学习模型,也是目前state-of-the-art
的pre-ranking
模型。在该方法中,user-wise embedding
向量和 ad-wise embedding
向量分别以离线方式预计算,没有 user-ad
交叉特征,然后在线计算两个向量的内积从而获得 pre-rank score
。
缺点:向量内积的方式过于简单,使得模型效果较差。
尽管和前两代相比,基于向量内积的 DNN
显著提升了模型性能,但是它仍然面临量大挑战,还留有进一步改进的空间:
《Learning Tree-based Deep Model for Recommender Systems》
所述,模型的表达能力受限于向量内积形式的深度模型。DNN
的 embedding
向量需要离线预先计算。这意味着基于向量内积的 DNN
模型只能以低频方式更新,难以适应最新的数据分布的变化,尤其是在数据发生剧烈变化时(如双十一当天)。综上所述,上述三代 pre-ranking
系统都遵循相同的范式:将算力视为恒定约束,在此基础上开发了与训练系统、serving
系统相对应的 pre-ranking
模型。也就是说,模型的设计和算力的优化是解耦的,这通常会导致模型的简化以适应算力的需求。这会导致次优suboptimal
的性能。
下一代 pre-ranking
系统 COLD
:在论文 《COLD: Towards the Next Generation of Pre-Ranking System》
中,作者从算法--系统协同设计co-design
的角度重新思考了 pre-ranking
系统的挑战。论文设计了一个新的 pre-ranking
系统,通过联合优化 pre-ranking
模型和它所消耗的算力来节省算力,而不是通过限制模型体系结构(这会限制模型性能)。作者将其命名为 Computing power cost-aware Online and Lightweight Deep pre-ranking system: COLD
,如上图所示。
论文将 COLD
视为第四代 pre-ranking
系统。COLD
兼顾了模型设计和系统设计。COLD
中的算力成本也是一个可以与模型性能联合优化的变量。换句话讲,COLD
是一种灵活的 pre-ranking
系统,模型性能和算力成本之间的 trade-off
是可控的controllable
。
COLD
的主要特点总结如下:
COLD
。在论文的真实系统中,COLD
模型是一个七层全连接深度神经网络,具有 Squeeze-and-Excitation: SE
block
。SE block
有利于我们进行特征组的选择,以便于从复杂的ranking
模型中获得轻量级版本。该选择是通过考虑模型性能和算力成本来执行的。也就是说,COLD
模型的算力成本是可控的。inference
的并行计算和半精度计算),显著降低了算力成本。这进一步为 COLD
应用更复杂的深度模型以达到更好性能带来了空间。COLD
模型以 online learning
和 serving
的方式工作,为系统带来了出色的能力来应对数据分布变化的挑战。COLD
的全在线 pre-ranking
系统为我们提供了灵活的基础设施,支持新模型开发和快速的在线 A/B test
,这也是目前 ranking
系统拥有的最佳系统实践。下图给出了所有四代ranking
系统在模型表达能力和更新频率方面的比较,其中COLD
实现了最佳的 trade-off
。
2019
年以来,COLD
已经部署在阿里巴巴展示广告系统display advertising system
中几乎所有涉及pre-ranking
模块的产品中,每天为数亿用户提供高并发请求。和最新的在线的、基于向量内积的 DNN
版本相比,COLD
带来了 6%
以上的 RPM
提升,这对于业务而言是一个显著的提升。
pre-ranking
模块可以被视为 matching
模块和 ranking
模块之间的连接纽带:它接收 matching
结果并进行粗选,从而减少用于后续 ranking
模块的候选集的大小。
以阿里巴巴的展示广告系统为例,输入 pre-ranking
系统的候选集大小往往达到万级。然后 pre-ranking
模型通过某些指标(例如 eCPM
)选择 top N
候选 item
。 的量级通常为数百。这些获胜的 个候选 item
通过复杂的 ranking
模型进一步排序,从而得到最终结果展示给用户。
一般而言,pre-ranking
和 ranking
具有相似的功能,二者之间最大的区别在于问题的规模。显然,pre-ranking
系统要排序的候选集合规模是ranking
系统的 10
倍或者更大。在 pre-ranking
系统中直接应用 ranking
模型似乎是不可能的,这将面临算力成本的巨大挑战。如何平衡模型性能和它所消耗的算力是 pre-ranking
系统的关键考虑因素。
基于向量内积的 DNN
模型:在深度学习成功的推动下,基于向量内积的 DNN
模型已经广泛应用于 pre-ranking
系统并实现了 state-of-the-art
性能。
基于向量内积的 DNN
模型的架构由两个并行的子神经网络组成:用户特征被馈入到左侧子网络,广告特征被馈入到右侧子网络。对于每个子网络,特征首先输入 embedding
层,然后拼接在一起,然后是全连接FC
层。这样我们得到两个固定长度的向量 ,它们分别代表用户信息和广告信息。 最后,pre-ranking score
计算如下:
基于向量内积的 DNN
模型的训练遵循与传统ranking
模型相同的方式。为了关注pre-ranking
模型的关键部分,我们省略了训练的细节。
基于向量内积的 DNN
模型的pre-ranking
系统的缺点:基于向量内积的 DNN
模型在延迟latency
和计算资源方面是高效的。 的向量可以离线预先计算,score
可以在线计算。这使得它足以应对算力成本的挑战。下图说明了基础设施的经典实现。和前几代 pre-ranking
模型相比,基于向量内积的 DNN
模型取得了显著的性能提升。
然而,基于向量内积的 DNN
模型通过将模型限制为向量内积的形式,过于关注降低算力成本,这导致模型性能欠佳。我们总结了以下缺点:
模型表达能力受限于向量内积的形式,无法利用 user-ad
交叉特征。《Learning Tree-based Deep Model for Recommender Systems》
已经表明:采用复杂的深度模型比向量内积形式网络具有显著的预测效果优势。
用户向量 和广告向量 需要枚举所有用户和所有广告进行离线预计算,从而减少计算资源并优化延迟。对于拥有数亿用户和数千万广告的业务,预计算通常需要几个小时,难以适应数据分布的变化。当数据发生剧烈变化时(如双十一当天),这会给模型性能带来很大的伤害。
模型更新频率也受到系统实现的影响。对于基于向量内积的 DNN
模型,用户向量索引/广告向量索引版本之间的天级切换需要同时执行,这很难满足两个索引存储在不同在线系统中的情况。根据我们的经验,延迟切换也会损害模型性能。
如果用户向量索引切换为新版本,而广告向量索引保留为旧版本,则出现索引不一致,会严重降低在线
serving
的效果。因此用户向量索引/广告向量索引需要同时切换。
基于向量内积的 DNN
模型的 pre-ranking
系统的这些缺点源于对算力的过度追求,并且难以完全解决。在接下来的部分中,我们将介绍我们的新的解决方案,它打破了 pre-ranking
系统的经典设计方法。
在这一部分,我们将详细介绍我们新设计的 pre-ranking
系统 COLD
。COLD
背后的核心思想是:同时考虑模型设计和系统设计。COLD
中的算力成本也是一个可以和模型性能联合优化的变量。换句话说,COLD
是一个灵活的 pre-ranking
系统,模型性能和算力成本之间的 trade-off
是可控的。
COLD
中的深度 pre-ranking
模型:基于向量内积的 DNN
模型通过限制模型架构来降低算力成本,从而导致模型性能损失。与此不同,COLD
允许应用深度模型的任意复杂架构来确保最佳模型性能。换句话说,SOTA
深度ranking
模型可以用于 COLD
。
例如,在我们的真实系统中,我们将 groupwise embedding network: GwEN
作为我们的初始模型架构,它是我们ranking
系统中在线模型的早期版本。GwEN
将feature group-wise embedding
的拼接作为输入。注意,交叉特征也包含在 GwEN
网络的输入中。
当然,pre-ranking
直接应用具有复杂架构的深度 ranking
模型进行在线 inference
的算力成本是不可接受的,因为要在 pre-ranking
系统中进行排序的候选集合规模更大。为了应对这一关键挑战,我们采用了两种优化策略:
trade-off
。inference
加速来显著降低算力成本。一般而言,我们需要引入合适的网络架构设计,从而从初始 GwEN
模型的完整版本中得到深度模型的轻量级版本。网络剪枝、特征选择、以及神经架构搜索等技术都可以应用于此。在我们的实践中,我们选择了便于在模型性能和算力成本之间进行可控trade-off
的特征选择方法。其它技术也适用,我们留给读者进一步地尝试。
具体而言,我们应用 Squeeze-and-Excitation: SE
block
进行特征选择。SE block
首先在 CV
中用于显式建模通道之间的内部依赖性。这里,我们使用 SE block
来获得 group-wise
特征的重要性权重,并通过度量模型性能和算力成本来选择 COLD
中最合适的特征。
重要性权重计算:令 为第 个 feature group
的 embedding
,总的 feature group
数量为 。SE block
将 压缩为一个标量值 :
其中:
feature group
的重要性。然后通过 embedding
和重要性权重 之间的 field-wise
相乘从而得到新的加权 embedding
。
SE block
相当于让模型自动学习每个feature group embedding
的特征重要性。
feature group
选择:权重向量 代表每个feature group
的重要性。我们使用权重对所有 feature group
进行排序,并选择 top K
权重最高的feature group
。然后进行离线测试,从而评估选定 K
个 feature group
的模型的候选轻量级版本的模型性能和系统性能。评估指标包括 GAUC
、query per seconds: QPS
(衡量模型的吞吐量)、return time: RT
(衡量模型的延迟)。
通过多次启发式尝试 K
次,我们最终选择在给定的系统性能约束下具有最佳 GAUC
的版本作为我们最终的模型。这样,可以灵活地进行模型性能和算力成本之间的 trade-off
。
除了通过灵活的网络架构设计降低算力成本,我们还从工程角度应用了各种优化技巧,进一步为 COLD
应用更复杂的深度模型带来了空间,以达到更好的性能。下面以我们在阿里巴巴的展示广告系统为例,介绍一下实践经验。情况可能因系统而异。读者可以根据实际情况做出选择。
在我们的展示广告系统中,pre-ranking
模块的在线 inference
引擎主要包含两个部分:特征计算和稠密网络计算。
emedding
向量并将它们拼接起来作为网络的输入。all level
的并行性:为了以低算力成本实现低延迟和高吞吐量的 inference
,利用并行计算非常重要。因此,我们的系统会尽可能地利用并行性。幸运的是,不同广告的 pre-rank
分数是相互独立的。这意味着它们可以在一些成本上并行计算,这些成本涉及到一些与用户特征相关的重复计算。
在 high level
上,一个前端user query
将拆分为多个 inference query
。每个 query
处理部分广告,并在所有 query
返回后合并结果。因此,在决定拆分多少个 query
时需要 trade-off
。更多的 query
意味着每个 query
的广告很少,因此单个 query
的延迟更低。但是太多的 query
也会导致巨大的重复计算和系统开销。
即划分广告空间,从而在广告空间上并行计算。
此外,由于 query
是在我们的系统中使用 RPC
实现的,更多的 query
意味着更多的网络流量,并且可能有更高的延迟或失败可能性。
在处理每个 query
时,多线程处理用于特征计算。同样,每个线程处理部分广告以减少延迟。
最后,执行稠密网络 inference
时,我们使用 GPU
来加速计算。
基于列的计算:传统上,特征计算是基于行的方式完成的:广告被一个接一个地处理。然而,这种基于行的方法对cache
不友好。相反,我们使用基于列的方法将一个 feature
列的计算放在一起。
下图说明了两种计算模式。在计算交叉特征的时候(例如红色方块这一列),相同的 user
特征会被频繁使用。图 (a)
为基于行的方式,每次处理交叉特征的时候都需要重新加载 user
特征;图 (b)
为基于列的方式,在处理为交叉特征的时候可以重复使用缓存的 user
特征。
通过这种方式,我们可以使用 Single Instruction Multiple Data: SIMD
这样的技术来加速特征计算。
在计算交叉特征(如
ad_fg & u_fg
,右图最右侧一列)时,基于列的计算可以缓存u_fg
。
低精度GPU
计算:对于 COLD
模型,大部分计算是稠密矩阵的乘法,这就留下了优化空间。在英伟达的 Turning
架构中,T4 GPU
为 Float16
和 Int8
矩阵乘法提供了极致性能,非常符合我们的case
。Float16
的理论峰值 FLOPS
可以比 Float32
高 8
倍。
然而,Float16
丢失了一些精度。在实践中,我们发现对于某些场景,当我们对某些 feature group
使用 sum-pooling
时,稠密网络的输入可能是一个非常大的数字,超过了 Float16
的表示范围。
一种解决方案是使用 normalization layer
,如 BN
层。然而,BN
层本身包含的 moving-variance
参数,其幅度可能甚至更大。这意味着计算图需要混合精度,即全连接层使用 Float16
、BN
层使用 Float32
。
另一种解决方案是使用无参数parameter-free
归一化层。例如,对数函数可以轻松地将大数值转换为合理的范围。但是,log()
函数无法处理负值,并且当输入接近零时可能会导致一个巨大的数值。因此,我们设计了一个称为线性对数算子linear-log operator
的分段平滑函数来处理这种不必要的行为,即:
linear_log()
函数的图形如下图所示。它将 Float32
数值转换为一个合理的范围。因此如果我们在第一层放置一个 linear_log
算子,就可以保证网络的输入很小。此外,linear_log()
函数是 连续的,因此不会使网络训练更加困难。在实践中,我们发现添加这一层之后,网络仍然可以达到与原始 COLD
模型相同的精度。
使用 Float16
进行 inference
之后,我们发现 CUDA kernel
的 running time
急剧下降,kernel
启动时间成为瓶颈。为了提高实际的 QPS
,我们进一步使用 Multi-Process Service: MPS
来减少启动 kernel
的开销。结合 Float16
和 MP
,引擎的吞吐量是以前的两倍。
受益于不受限制的模型架构,COLD
可以在全在线基础设施fully online infrastructure
下实现:训练和 serving
都以 online
的方式执行,如下图所示。从行业角度来看,这是目前最好的系统实践。这种基础设施有两个方面的好处:
COLD
模型的 online learning
带来了其应对数据分布漂移 shift
的挑战的出色能力。
根据我们的经验,当数据发生剧烈变化时(如双十一当天),COLD
模型相对于基于向量内积的 DNN
模型的性能提升更为显著,正如我们在实验部分所示。此外,COLD
模型的 online learning
对于新广告更加友好。
这是
online learning
的优势:能实时学习最新的数据分布。
COLD
全在线的 pre-ranking
系统为我们提供了灵活的基础设置,从而支持高效的新模型开发和在线 A/B test
。
注意,对于基于向量内积的 DNN
模型,用户侧向量和广告侧向量需要离线预计算并通过索引加载到 inference
引擎。因此,它涉及多个系统的开发,以进行基于向量内积的 DNN
模型的两个版本的 A/B test
。根据我们的经验,获得可靠的 A/B test
结果的典型时间成本是几天,而 COLD
则是几个小时。此外,全在线 serving
也有助于 COLD
避免基于向量内积的 DNN
模型所遭受的延迟切换。
从下图结构可以看到,
COLD
使用了大量的、人工构造的交叉特征cross features
。因此COLD
中,user
信息和ad
信息在两个level
进行了融合:
- 在输入特征
level
,COLD
显式地、人工地构造了交叉特征,从而融合了user-ad
信息。- 在模型架构
level
,COLD
通过全连接层,从而融合了user-ad
信息。
我们进行仔细的比较,从而评估所提出的 pre-ranking
系统 COLD
的性能。作为一个工业系统,COLD
在模型性能和系统性能上都进行了比较。据我们所知,这项任务只有公共数据集或 pre-ranking
系统(而没有二者的结合)。以下实验在阿里巴巴在线展示广告系统中进行。
baseline
方法:COLD
模型最强的 baseline
是基于 SOTA
向量内积的 DNN
模型,它是我们展示广告系统中在线 pre-ranking
模型的最新版本。
配置:
COLD
模型和基于向量内积的 DNN
模型都使用超过 900
多亿个样本进行训练,这些样本都是从真实系统的日志中收集的。注意:基于向量内积的 DNN
模型和 COLD
模型共享相同的用户特征和广告特征。基于向量内积的 DNN
模型不能引入任何 user-ad
交叉特征,而 COLD
模型使用 user-ad
交叉特征。
为了公平比较,我们还评估了具有不同交叉特征group
的 COLD
模型的性能。
对于 COLD
模型,特征 embedding
向量被拼接在一起,然后被馈送到全连接网络。这个全连接网络的结构是 ,其中 为所有被选中特征的 embedding
的拼接。
对于基于向量内积的模型,全连接层的结构为 。
对于基于向量内积的模型,全连接层表示单侧网络的全连接层。
两种模型的输入特征 embedding
维度均设置为 16
。
我们使用 Adam
优化器来更新模型参数。
评估指标:
模型性能评估指标:GAUC
作为评估模型离线性能的指标。
此外,我们引入了一个新的 top-k
召回率指标,从而度量 pre-ranking
模型和后续 ranking
模型之间的对齐程度alignment degree
。top-k
召回率定义为:
其中:
top k ad 候选
和 top m ad 候选
是从同一个候选集合(即 pre-ranking
模块的输入)生成的。top k ad 候选
是根据 pre-ranking
模型排序的,top m ad 候选
是根据 ranking
模型排序的,并且 。eCPM = pCTR x 点击出价
。在我们的实验中,ranking
模型使用 DIEN
,这是在线 ranking
系统的以前的版本。
系统性能评估指标:为了评估系统性能,我们使用的指标包括 Queries Per Seconds: QPS
(用于衡量模型的吞吐量)、return time: RT
(用于衡量模型的延迟)。这些指标反映了模型在相同大小的pre-ranking
候选集合下的算力成本。粗略地说,较低 RT
下较大的 QPS
意味着给定模型的算力成本较低。
离线模型效果评估:下表给出了不同模型的离线性能评估结果。可以看到:COLD
保持了与我们之前版本的 ranking
模型 DIEN
相当的 GAUC
,并且与基于向量内积的模型相比,在 GAUC
和 Recall
上都取得了显著的提升。
在线 A/B test
效果评估:下表显示了 COLD
模型相对于基于向量内积的 DNN
模型的在线 A/B test
提升。 可以看到:
COLD
模型实现了 6.1%
的 CTR
提升和 6.5%
的 Revenue Per Mille: RPM
提升,这对我们的业务意义重大。COLD
模型实现了 9.1%
的 CTR
提升和 10.8%
的 RPM
提升。这证明了全在线基础设施的价值,在数据急剧变化时,它可以使得模型适应最新的数据分布。系统性能的评估:我们评估了使用不同模型的 pre-ranking
系统的 QPS
和 RT
,如下表所示。基于向量内积的模型在具有 2
个Intel(R) Xeon(R) Platinum 8163 CPU@2.50GHz (96 cores)
和 512GB RAM
的 CPU
机器上运行。COLD
模型和 DIEN
在配备 NVIDIA T4
的一个 GPU
机器上运行。
可以看到:
DNN
模型实现了最佳系统性能,这符合预期。DIEN
算力成本最高,COLD
达到算力和效果的平衡。消融研究:为了进一步了解 COLD
的性能,我们在模型设计视角和工程优化技术视角进行了实验。对于后一种方法,由于很难将所有的优化技术从集成系统中解耦出来并进行比较,因此这里我们仅对 GPU
低精度计算这个最重要因素进行评估。
pre-ranking
系统的不同版本 COLD
模型的 trade-off
性能:在模型设计阶段,我们使用 SE block
来获取特征重要性权重,并选择不同的 feature group
作为模型的候选版本。然后我们进行离线实验以评估模型的 QPS,RT,GAUC
等性能,如下表所示。*
是我们用于产品中的 COLD
模型的平衡版本,它使用部分交叉特征。
可以看到:
COLD
模型的算力成本因为特征不同而不同,这符合我们灵活的网络架构设计。COLD
模型性能越好,这也相应增加了 online serving
的负担。通过这种方式,我们可以在模型性能和算力成本之间进行 trade-off
。在我们的真实系统中,我们根据经验手动选择平衡的版本。
COLD
需要大量的、人工构造的交叉特征,这会增加人工特征工程的负担。
不同 GPU
精度的计算比较:实验是在配备 NVIDIA T4
的 GPU
机器上运行。在运行实验时,我们从客户端逐渐提高 QPS
,直到超过 1%
的服务器响应时间开始超过延迟限制。然后我们将当前 QPS
记录为可用 QPS
。实验结果如下表所示。可以看到:
Float32
版本的可用 QPS
最低。单独使用 Float16
可以提高大约 21%
的可用 QPS
。
Float16
和 CUDA MPS
,我们可以将可用 QPS
比 Float32
提高一倍,并且可以在不超过延迟限制的情况下充分利用 GPU
。近年来,电商的发展彻底改变了我们的购物方式。推荐系统在电商公司中扮演着重要的角色。传统的推荐方法主要使用协同过滤来预测用户和 item
之间的得分。近年来,由于深度学习的快速发展,神经网络在电商推荐系统中得到了广泛的应用。神经推荐系统为用户和 item
生成 representation
,并且优于传统的推荐方法。然而,由于电商用户和item
的规模较大,很难使用深度模型直接给出每对 user-item
之间的点击率CTR
预估。当前的业界实践是使用 fast KNN
(如 Faiss
)来生成候选 item
,然后使用深度模型结合用户属性和 item
属性来优化业务指标(如点击率)。
最近的一些工作使用 graph embedding
方法来获取user representation
和 item representation
,然后用于下游 application
。例如,PinSage
建立在 Graph-SAGE
基础之上,并将基于图卷积的方法应用于具有数十亿节点和边的生产级数据。GATNE
考虑了不同的用户行为类型,并利用异质图 embedding
方法来学习 user representation
和item representation
。然而,这些方法忽略了用户行为中的序列信息,无法捕获到用户的相邻行为之间的相关性。
最近的研究将推荐系统形式化为一个序列推荐sequential recommendation
问题。序列推荐任务是根据用户的行为历史,预测用户可能感兴趣的 next item
。该任务反映了现实世界的推荐情况。许多近期提出的模型可以从每个用户的行为序列中给出该用户的整体 embedding
。然而,统一的用户 embedding
很难代表多种兴趣multiple interests
。例如在下图中,点击序列显示了 Emma
的三种不同兴趣。作为一个现代女性,Emma
对珠宝jewelry
、手提包handbags
、化妆品make-ups
很感兴趣。因此,她可能会在这段时间内点击这三个类目的item
。
在论文 《Controllable Multi-Interest Framework for Recommendation》
中,作者提出了一种新的、可控的多兴趣框架 multi-interest framework
,称作 ComiRec
。上图展示了 ComiRec
多兴趣框架的一个示例。
ComiRec
的多兴趣模块multi-interest module
可以从用户行为序列中捕获用户的多种兴趣,这些兴趣可独立地从大规模item
池中检索候选 item
。ComiRec
的聚合模块aggregation module
将这些来自不同兴趣的 item
组合在一起,并输出整体 top-N
推荐。聚合模块利用可控的因子来平衡推荐的准确性accuracy
和多样性diversity
论文对序列推荐进行了实验。另外,ComiRec
框架也成功地部署在阿里巴巴分布式云平台上。十亿级工业数据集的结果进一步证明 了ComiRec
在实践中的效果effectiveness
和效率efficiency
。
总而言之,本文的主要贡献是:
ComiRec
,将可控性controllability
和多兴趣组件集成在一个统一的推荐系统中。implementing
和 studying
来调研可控性在个性化系统中的作用。ComiRec
框架在两个具有挑战性的真实数据集上为序列推荐实现了 state-of-the-art
的性能。相关工作:这里我们将介绍有关推荐系统和推荐多样性的相关文献,以及我们在论文中使用的胶囊网络和注意力机制。
协同过滤方法已经在现实世界的推荐系统中被证明是成功的,它可以找到相似的用户和相似的 item
,并在此基础上做出推荐。
Matrix Factorizaion: MF
是经典推荐研究中最流行的技术,它将用户和 item
映射到联合潜在因子空间joint latent factor space
中,这样 user-item
交互被建模为该空间中的内积。Factorization Machine: FM
使用分解的参数factorized parameters
对变量之间的所有交互进行建模,因此即使在推荐系统等具有巨大稀疏性的问题中也可以估计交互estimate interaction
。神经推荐系统Neural Recommender System
:
Neural Collaborative Filtering: NCF
使用神经网络架构对用户和 item
的潜在特征进行建模。NFM
无缝地结合了 FM
在建模二阶特征交互时的线性、以及神经网络在建模高阶特征交互时的非线性。DeepFM
设计了一个端到端的学习模型,同时强调了低阶特征交互和高阶特征交互以进行 CTR
预测。xDeepFM
扩展了 DeepFM
,可以显式地学习特定的、阶次有界bounded-degree
的特征交互。Deep Matrix Factorization: DMF
使用深度结构学习的架构deep structure learning architecture
,基于显式评分和非偏好non-preference
的隐式反馈,学习user representation
和 item representation
的通用低维空间。DCN
保留了深度模型的优点,并引入了一种新颖的交叉网络,该网络在学习特定的、阶次有界的特征交互方面更有效。CMN
利用潜在因子模型的全局结构和基于局部邻域的结构的优势,以非线性方式使用深度架构来统一两类 CF
模型。序列推荐Sequential Recommendation
:序列推荐是推荐系统的关键问题。最近很多关于推荐系统的工作都集中在这个问题上。
FPMC
对于序列 basket
数据同时包含了一个常见的马尔科夫链和一个普通的矩阵分解模型。HRM
扩展了 FPMC
模型,并采用两层结构来构建最近一次交互的 user
和 item
的混合 representation
。GRU4Rec
首次引入了一种RNN-based
方法来建模整个session
,以获得更准确的推荐。DREAM
基于RNN
,学习用户的动态 representation
以揭示用户的动态兴趣。Fossil
将 similarity-based
方法和马尔科夫链平滑地结合在一起,从而对稀疏和长尾数据集进行个性化的序列预测。TransRec
将 item
嵌入到向量空间中,其中用户被建模为在item
序列上进行的向量操作vectors operating
,从而用于大规模序列的预测。RUM
使用了一个 memory-augmented
神经网络,融合了协同过滤的洞察 insights
来进行推荐。SASRec
使用基于 self-attention
的序列模型来捕获长周期long-term
语义,并使用注意力机制来基于相对较少的动作进行预测。DIN
设计了一个局部激活单元local activation unit
来自适应地从历史行为中学习关于目标广告的用户兴趣的 representation
。SDM
使用 multi-head self-attention
模块对行为序列进行编码以捕获多种类型的兴趣,并使用长短期门控融合模块long-short term gated fusion module
来融入长期偏好。推荐多样性Recommendation Diversity
:研究人员已经意识到,只遵循最准确most accurate
的推荐可能不会产生最好best
的推荐结果,因为最准确的结果往往会向用户推荐相似的 item
,从而产生无聊的推荐结果。为解决这些问题,推荐item
的多样性 diversity
也起着重要作用。
在多样性方面,有聚合多样性aggregated diversity
,指的是向用户推荐长尾 item
的能力。很多研究聚焦于提高推荐系统的聚合多样性。
另外有一些工作聚焦于推荐给单个用户的 item
多样性,这指的是推荐给单个用户的 item dissimilarity
。
注意力Attention
:注意力机制的起源可以追溯到几十年前的计算机视觉领域。然而,它在机器学习的各领域中的普及只是近年来才出现的。它最早是由 《Neural machine translation by jointly learning to align and translate》
引入机器翻译的,后来作为 tensor2tensor
成为一种突破性的方法。 BERT
利用 tensor2tensor
并在NLP
方面取得了巨大成功。注意力机制也适用于推荐系统,并在现实世界的推荐任务中相当有用。
胶囊网络Capsule Network
: 胶囊的概念最早由 《Transforming auto-encoders》
提出,并且自从动态路由方法被提出以来就广为人知。
MIND
将胶囊引入推荐领域,并利用胶囊网络基于动态路由机制来捕获电商用户的多个兴趣,可以用于聚类clustering
历史行为并提取多样化的兴趣。CARP
首先从用户和 item
评论文档中抽取观点和aspect
,并根据每个逻辑单元的组成观点和 aspect
推导出每个逻辑单元的 representation
,从而用于评分预测。序列推荐问题:假设有用户集合 、item
集合 。对于每个用户 ,我们有一个用户历史行为序列historical behaviors sequence
(根据行为发生时间来排序) ,其中 记录用户 交互的第 个 item
。给定历史交互数据,序列推荐的问题是预测用户可能交互的下一个 item
。
在实践中,由于对延迟和性能的严格要求,工业推荐系统通常会包含两个阶段,即 matching
阶段和 ranking
阶段。matching
阶段对应于检索 top-N
个候选 item
,而 ranking
阶段用于通过更精确的score
对候选 item
进行排序。我们的论文主要聚焦于提高 matching
阶段的有效性。在本节的剩余部分,我们将介绍我们的可控多兴趣框架ComiRec
,并说明ComiRec
框架对于序列推荐问题的重要性。
由于工业推荐系统的 item
池通常由数百万甚至数十亿的 item
组成,matching
阶段在推荐系统中起着至关重要的作用。具体而言,matching
模型首先根据用户的历史行为计算 user embedding
,然后根据 user embedding
为每个用户检索候选 item
集合,最后借助于fast KNN
算法从大规模item
池中选择最近邻的 item
为每个用户生成候选集合。换句话讲,matching
阶段的决定性因素是根据用户历史行为计算的 user embedding
的质量。
现有的 matching
模型通常使用 RNN
来计算用户的 embedding
,大多数只为每个用户生成一个 embedding
向量。但是单个 embedding
缺乏表达能力,因为单个 embedding
无法代表用户的多种兴趣。为此我们为序列推荐提出了一个多兴趣框架ComiRec
,整体如下图所示:
模型的输入是一个用户行为序列,其中包含一个 item ID
列表,代表用户和 item
根据发生时间排序的交互。
模型的输入都是
item ID
,没有任何用户侧辅助信息,也没有任何item
侧辅助信息,甚至也没有user ID
。
item ID
被馈入 embedding layer
并被转换为 item embedding
。
多兴趣抽取模块multi-interest extraction module
接收 item embedding
并为每个用户生成多个兴趣,然后这些兴趣可用于模型训练和 serving
。
item embedding
最近的兴趣 embedding
来计算sampled softmax
损失。serving
,每个兴趣 embedding
将独立检索 top-N
个最近邻的 item
,然后将其馈入聚合模块aggregation module
。聚合模块通过平衡推荐准确性accuracy
和多样性 diversity
的可控过程来生成整体的 top-N
个 item
。有多种可选的方法用于构建多兴趣抽取模块,在本文中我们探索了两种方法:动态路由dynamic routing
方法和self-attention
方法,对应的框架分别命名为 ComiRec-DR
和 ComiRec-SA
。
ComiRec
是基于interest-level
来检索item
,trigger
为用户的各个兴趣。传统的Item CF
是基于interest-level
来检索item
,trigger
为用户的历史互动item
。如果获取
interest
则有各种不同的方法,因此本论文并没有多少创新点。
动态路由方法Dynamic Routing
:我们利用动态路由方法作为多兴趣抽取模块。用户序列的 item embedding
可以视为主胶囊 primary capsules
,多个用户兴趣可以视为兴趣胶囊interest capsules
。我们使用 CapsNet
中的动态路由方法。
这里我们简要介绍计算胶囊向量输入vector inputs
和向量输出vector outputs
的动态路由。胶囊是一组神经元,其激活向量activity vectors
代表特定类型实体(例如对象或者对象的一部分)的实例化参数instantiation parameters
。胶囊向量的长度表示胶囊所代表的实体在当前输入条件下的概率。令 为primary layer
中的胶囊 (它就是用户行为序列中第 个 item
的 embedding
),然后我们根据 primary capsules
来计算兴趣胶囊 。
我们首先计算预测向量prediction vector
为: ,其中 为转换矩阵。
然后兴趣胶囊 的总输入是所有预测向量 的加权和: ,其中 是由迭代式iterative
的动态路由过程所确定的耦合系数 coupling coefficients
。
注意:primary
胶囊 和所有兴趣胶囊之间的耦合系数之和应该为 1
,即 。
我们使用 routing softmax
来计算耦合系数,并使用初始 logits
:
其中 表示primary
胶囊 应该耦合到兴趣胶囊 的对数先验概率 log prior probability
。
《Dynamic routing between capsules》
提出了一种非线性 squashing
函数来确保短向量收缩到几乎为零的长度、长向量收缩到略低于 1
的长度。然后兴趣胶囊 的向量计算为:
的计算是自依赖的,因此人们提出动态路由方法来解决这个问题。整个动态路由过程如下述算法所示。然后用户 的输出兴趣胶囊构成矩阵 从而用于下游任务。
动态路由算法:
输入:
primary capsules
输出:兴趣胶囊
算法步骤:
对于每个 primary
胶囊 和每个兴趣胶囊 ,初始化 。
迭代:,执行:
对每个 primary
胶囊 ,计算 。
对每个兴趣胶囊 ,计算 。
对每个兴趣胶囊 ,计算 。
对每个 primary
胶囊 和每个兴趣胶囊 ,更新 :
返回 。
self-attention
方法:self-attention
方法也可以应用于多兴趣抽取模块。
给定用户行为的 embedding
,其中 为用户 行为序列的长度,我们使用 self-attention
机制获得权重向量 ,该权重向量代表用户行为的注意力权重:
其中 和 为可训练的参数。
我们根据注意力权重 sum
用户行为 embedding
,从而得到用户的向量 representation
: 。
我们将可训练的positional embeddings
添加到输入 embedding
中,从而利用用户行为序列的顺序order
。positional embedding
和 item embedding
具有相同的维度 ,二者可以直接相加。
为了表示用户的整体兴趣,我们需要从用户行为序列中得到聚焦于不同兴趣的多个 。因此,我们需要执行多次attention
。为此我们将 扩展为矩阵 ,因此 attention
权重向量变成一个 attention
矩阵 :
最终的用户兴趣矩阵 为:
其中 为 的第 列,表示用户的第 个兴趣。
模型训练:在通过多兴趣抽取模块计算用户行为的兴趣 embedding
之后,我们使用 argmax
算子为 target item
选择相应的用户兴趣 embedding
向量:
其中 表示 target item
的 embedding
。
给定一个训练样本 ,我们可以计算用户 和 item
交互的可能性为:
模型的目标函数是最小化以下负对数似然:
其中 为用户 交互的 item
集合。
由于计算 的代价昂贵,因此我们使用sampled softmax technique
来训练我们的模型。
online serving
:对于在线 serving
,我们使用我们的多兴趣抽取模块来计算每个用户的多个兴趣。用户的每个兴趣向量都可以通过最近邻 library
(如 Faiss
)从大规模item
池中独立检索 top-N
个 item
。由多个兴趣检索的 item
被馈送到聚合模块中,以确定整体的 item
候选。最后,在 ranking
模块中ranking score
较高的 item
被推荐给用户。
聚合模块Aggregation Module
:在多兴趣抽取模块之后,我们根据用户的历史行为从而为每个用户获取多个兴趣 embedding
。每个兴趣 embedding
可以根据内积邻近性独立检索 top-N
个 item
。但是,如何将这些来自不同兴趣的 item
聚合起来,从而得到整体的 top-N
个 item
?
一种basic
且直接的方法是根据 item
和用户兴趣的内积邻近性来合并 merge
和过滤 item
,这可以形式化为:
其中 为用户 的第 个兴趣 embedding
。
这是聚合过程最大化推荐准确性accuracy
的有效方法。但是,当前推荐系统不仅仅关注准确性,还关注多样性。这个问题可以形式化为:给定用户 的 个兴趣中检索到的 个 item
的一个集合 ,目标是找到一个包含 个 item
的集合 使得预定义的价值函数最大化。
我们的框架使用一个可控的过程controllable procedure
来解决这个问题。我们使用以下价值函数 通过可控因子controllable factor
来平衡推荐的准确性和多样性:
其中 为多样性函数(或者不相似性函数),定义为:
其中 cat(i)
为 item
的类目, 为示性函数。
accuracy
,即 ,则我们使用上面简单的方法获取整体的 item
。controllable module
为用户找到最多样化的 item
。我们提出了一种贪心推断算法来近似最大化值函数 ,如下述算法所示。
最后,我们在实验中研究了可控因子。
贪心推断Greedy Inference
算法:
输入:
item
集合 item
数量 输出:item
集合
算法步骤:
初始化 。
迭代 ,迭代步骤为:
返回 。
和已有模型的关联:我们将我们的模型和现有模型进行比较。
MIMN
:MIMN
是ranking
阶段的近期代表性工作,它使用 memory
网络从长的序列行为数据中捕获用户兴趣。MIMN
和我们的模型都是针对用户的多种兴趣。对于非常长的序列行为,memory-based
架构也可能不足以捕获用户的长期兴趣。和 MIMN
相比,我们的模型利用多兴趣抽取模块来利用用户的多种兴趣,而不是一个具有 memory utilization
正则化和memory induction unit
的复杂 memory
网络。MIND
:MIND
是 matching
阶段的近期代表性工作,它提出了一种行为到兴趣Behavior-to-Interest: B2I
的动态路由,用于自适应地将用户的行为聚合到兴趣 representation
向量中。和 MIND
相比,ComiRec-DR
沿用了 CapsNet
使用的原始动态路由方法,可以捕获用户行为的序列信息。我们的框架还探索了一种用于多兴趣抽取的self-attention
方法。此外,我们的框架还利用可控聚合模块来平衡基于用户多种兴趣的推荐准确性和多样性。这里我们对序列推荐进行实验,以验证我们框架和其它 SOA
方法相比的性能。此外,我们还报告了我们框架在十亿级工业数据集上的实验结果。
我们在强泛化strong generalization
下评估所有方法的性能。我们将所有用户按照 8:1:1
的比例分为训练集、验证集、测试集。我们使用训练用户的完整点击序列来训练模型。为了评估,我们从验证用户和测试用户中获取每个用户前 80%
的行为,以从训练好的模型中推断用户 embedding
,并通过预测剩余的 20%
的行为来计算指标。这种设置比弱泛化weak generalization
更困难,弱泛化指的是用户行为序列同时用于训练和评估。
具体而言,我们采用了训练序列推荐模型的通用设置。设用户 的行为序列为 。每个训练样本使用 的前 个行为来预估第 个行为,其中 。
数据集:我们在两个具有挑战性的公共数据集上进行了实验,这些数据集的统计数据如下表所示。
Amazon
数据集:包含来自 Amazon
的商品评论和元数据。在我们的实验中,我们使用 Amazon Book
子集。每个训练样本的用户行为序列被截断为长度 20
。Taobao
数据集:包含来自淘宝推荐系统中收集的用户行为。在我们的实验中,我们仅使用点击行为并按时间对单个用户的所有行为进行排序。每个训练样本的用户行为序列被截断为长度 50
。baseline
方法:我们将我们提出的模型 ComiRec-SA/ComiRec-DR
和 SOA
的模型进行比较。在我们的实验设置中,模型应该为验证集和测试集中的、训练期间未见过的用户提供预测,因此基于分解的方法不适合这种设置。
MostPopular
:是一种传统的推荐方法,向用户推荐最后热门的 item
。YouTube DNN
:是工业推荐系统最成功的深度学习模型之一。GRU4Rec
:是第一个为推荐引入循环神经网络的工作。MIND
:是与我们模型相关的、最新的、SOA
的模型。它基于胶囊路由机制设计了一个多兴趣抽取器层multi-interest extractor layer
,适用于对历史行为进行聚类clustering
并抽取不同的兴趣。实现:我们的实验是基于 TensorFlow 1.14
以及 Python 3.6
。一些关键的超参数为:embedding
维度 ,sampled softmax loss
的样本数为 10
,最大训练迭代次数设置为 100
万次,多兴趣模块的兴趣 embedding
数量设置为 K = 4
。我们使用学习率 0.001
的 Adam
优化器进行优化。
评估指标:我们使用以下三个常用指标来评估我们提出的模型的性能。
召回率Recall
:为了更好的可解释性,我们使用 user
粒度的均值而不是全局均值:
其中 为用户 的 top-N
推荐item
集合, 为用户 的测试 item
集合。
命中率Hit Rate: HR
:HR
衡量推荐 item
中包含至少一个用户交互的、正确的item
的比例,这在以前的工作中被广泛使用:
其中 为示性函数。
Normalized Discounted Cumulative Gain: NDCG
:NDCG
考虑到了正确推荐item
的位置:
其中 为用户 推荐列表中的第 个 item
。 为归一化常数,表示 Ideal Discounted Cumulative Gain: IDCG@N
,它是 DCG@N
的最大可能值。
为了和其它模型进行公平地比较,我们在聚合模块中设置 (从而追求准确性)。所有模型在公共数据集上的序列推荐性能如下表所示,粗体是每列的最佳性能,表中所有数字均为百分比数字(省略了 %
)。可以看到:
SOA
的模型。GRU4Rec
的性能优于其它仅为每个用户输出单个 embedding
的模型。MIND
相比,由于动态路由方式的不同,ComiRec-DR
获得了更好的性能。ComiRec-SA
展示了通过self-attention
机制捕获用户兴趣的强大能力,并获得了与 ComiRec-RD
相当的结果。注意:MIND
检索top-N titem
的方式和 ComiRec
相同。
参数敏感性:我们研究了兴趣数量 的敏感性。下表说明了当 改变时,我们框架的性能,粗体是每列的最佳性能,表中所有数字均为百分比数字(省略了 %
)。可以看到:这两个模型显示出了对超参数 的不同属性。
Amazon
数据集:ComiRec-SA
在 K=2 or 6
时性能最好,而 ComiRec-DR
在 K=4
时性能最好。Taobao
数据集:当 K
从 2
增加到 8
时ComiRec-DR
性能越来越好,但是 ComiRec-SA
在 K=2
时性能最好。可控性研究:推荐多样性在当前的推荐系统中扮演着更重要的角色,许多研究目标是提高推荐多样性diversity
。我们提出的聚合模块可以控制推荐准确性和多样性的平衡。
我们使用以下基于 item
类目的个体多样性individual diversity
定义:
其中 cat(i)
为 item
的类目, 为对用户 推荐的第 个 item
, 为示性函数。
下表展示了当我们控制因子 以平衡推荐质量和多样性时,Amazon
数据集的模型性能。粗体是每列的最佳性能,表中所有数字均为百分比数字(省略了 %
)。可以看到:当可控因子 增加时,推荐多样性显著增加,召回率略有下降。这充分证明了:我们的聚合模块可以通过为超参数 选择合适的值从而实现准确性和多样性之间的最佳 trade-off
。
工业数据集:我们在 2020
年 2
月 8
号手机淘宝 App
采集的工业数据集上进行了进一步实验,数据集的统计数据如下表所示。工业数据集包含 2200
万个优质item
、1.45
亿用户、40
亿条 user-item
交互。
我们的框架已经部署在阿里巴巴分布式云平台上,其中每两个 worker
共享一个具有 16GB
内存的 NVIDIA Tesla P100 GPU
。我们拆分用户为训练集、验证集、测试集,并使用训练集用户的点击序列来训练我们的模型。为了进行评估,我们使用我们的模型来计算测试集中每个用户的多个兴趣。用户的每个兴趣向量通过 fast KNN
方法独立地从大规模 item
池中检索 top-N
个 item
。由不同用户兴趣检索的 item
被馈入到我们的聚合模块。在聚合模块之后, 个 item
中的 top-N
个 item
是最终候选 item
,用于计算评估指标 recall@50
。
我们在我们的框架和 SOA
的序列推荐方法 MIND
之间进行了离线实验,结果表明我们方法的显著提升:和 MIND
相比,我们的 ComiRec-SA
和 ComiRec-DR
分别将 Recall@50
提高了 1.39%
和 8.65%
。
ComiRec
并未进行在线A/B test
实验。
案例研究:下图给出了一个电商用户的案例研究。通过我们的模型,我们从用户的点击序列中生成四个兴趣 embedding
,代表四种不同的兴趣。我们发现用户的四个兴趣是关于糖果、礼品盒、手机壳、配件。
item
。embedding
从工业 item
池中检索到的 item
。值得注意的是,我们的模型仅使用 item ID
进行训练,并没有使用人工定义的 item
类目信息。尽管如此,我们的模型仍然可以从用户行为序列中学习 item
类目。 我们的模型学习到的每个兴趣大约对应于一个特定类目,并且可以从大规模工业item
池中检索同一类目的相似 item
。
互联网上可用的信息(如电影、商品、新闻等等)的爆炸性增长和多样性经常让用户不知所措。推荐系统是处理信息过载问题的一种有价值的手段,它从海量候选中选择一个 item
列表,以满足用户的多样化需求。
在商业推荐系统的大部分场景中,尤其是在手机上,推荐的 item
都是以瀑布流的形式waterfall form
展示。如下图所示,大部分瀑布流式的推荐系统都是基于 cloud-to-edge
框架来部署的。当用户在瀑布流式推荐场景中滚动时,移动客户端 mobile client
首先向云服务器发起分页请求 paging request
。然后在云服务器上serving
的 matching
模型和 ranking
模型响应分页请求并生成显示给用户的 ranking item
列表。在这种情况下,当前的基于 cloud-to-edge
的瀑布式推荐系统存在以下局限性:
系统反馈延迟Delay for System Feedback
:由于 cloud-to-edge
框架中的分页机制,云端推荐系统无法在相邻的两个分页请求之间及时调整推荐结果,无法进一步满足用户不断变化的需求。
以下图为例,用户点击了当前页面第 5
个位置的一件衣服,这反映了用户对衣服类目的突然偏好sudden preference
。然而,云端推荐系统无法响应,除非用户滚动到下一页,因此无法及时满足用户的需求、降低了用户体验。
用户感知延迟Delay for User Perception
:对于服务于云端的推荐模型,由于网络延迟,捕获用户行为存在长达1
分钟的延迟,因此它们在响应 edge
时无法对用户的实时偏好进行建模。
以下图为例,用户对页面第49
个位置上item
的行为表明该用户目前对收音机的偏好,但是云端的推荐系统无法在下一页推荐类似的收音机,因为云端推荐系统没有及时接收到这些行为。此外,网络带宽进一步限制了当前推荐系统在 edge
捕获多样的diverse
、详细detailed
的用户行为。
综上所述,云端推荐系统的局限性在于推荐结果的延迟调整导致无法匹配 edge
端用户偏好的实时变化,从而严重损害了商业推荐系统的用户体验。
缺陷:实时性不足。除非用户滚动到下一页,否则客户端不会请求新的推荐
list
;即使客户端请求新的推荐list
,但是云端推荐系统无法及时处理实时用户行为。
边缘计算edge computing
非常适合需要高实时性能的 application
,并且有可能解决当前基于 cloud-to-edge
框架的推荐系统的上述问题。在论文《EdgeRec: Recommender System on Edge in Mobile Taobao》
中,论文率先设计并实现了一个新颖的边缘推荐系统 recommender system on edge: EdgeRec
,该系统实现了实时用户感知Realtime User Perception
和实时系统反馈Real-time System Feedback
,而无需向云服务器发出额外请求。
论文的主要贡献如下:
系统架构System Architecture
:论文设计了 EdgeRec
架构来在移动设备上进行 reranking
,与提供候选 item
的云端推荐系统协作。
系统实现System Implementation
:EdgeRec
支持大规模神经网络模型,通过跨 edge
和 cloud
之间分配模型,考虑了移动设备上的高效计算和存储。
用户行为建模User Behavior Modeling
:论文提出异质用户行为序列建模Heterogeneous User Behavior Sequence Modeling
来捕获用户不断变化的行为和动作。
论文首先设计新颖的特征系统,然后同时考虑交互的 item
及其相应的动作,从而同时对 user
和 item
之间的正反馈和负反馈进行建模。基于 EdgeRec
,特征系统中多样化diverse
的、详细detailed
的用户行为在edge
端被收集、存储、和消费,这些行为可以实时馈入模型中。
特征体系创新:使用了更多的用户行为特征,不仅仅是点击/转化行为。
1> 行为建模创新:将 `item` 序列和行为序列分别独立建模,从而获取 `item representation` 和行为 `representation` 。理论上讲,分别独立建模降低了模型复杂度。因为将 `item` 序列和行为序列作为 `(item, action)` 一起来建模,相当于引入了交叉特征,而交叉特征会扩大模型容量。
上下文感知重排Context-aware Reranking
:论文提出使用带行为注意力网络的上下文感知重排Context-aware Reranking with Behavior Attention Network
,从而在edge
端重排 reranking
。
具体而言,论文通过提出的行为注意力机制对候选 item
和实时用户行为上下文之间的交互进行建模。依靠基于 EdgeRec
的 edge reranking
能力,EdgeRec
实现了实时响应以满足用户的需求。
作者对淘宝首页 feeds
的真实流量进行了广泛的离线和在线评估。定量和定性分析都证明了论文提出的 EdgeRec
系统的合理性和有效性。此外,EdgeRec
在在线 A/B test
中贡献了高达 1.57%
的 PV
提升、7.18%
的 CTR
提升、8.87%
的 CLICK
提升、10.92%
的 GMV
提升,这对当前的淘宝推荐系统带来了重大改进。现在 EdgeRec
已经上线部署,并服务于主要流量。
这里我们介绍 EdgeRec
系统,该系统旨在及时捕获丰富的用户行为(即实时感知Real-time Perception
)并及时响应用户的需求(即实时反馈Real-time Feedback
),而无需向云服务器发出任何额外请求。我们首先概述 EdgeRec
系统,然后详细说明每个设计良好的模块的实现。
系统概述:在下图中我们展示了 EdgeRec
系统的概况,其中左侧模块部署在手机淘宝客户端,右侧模块部署在云端。。注意,EdgeRec
旨在和云端的推荐系统协作,而不是取代后者。主要的模块和工作流程如下:
本地客户端 Client Native: CN
:
本地客户端首先发起分页请求paging request
,并缓存推荐系统服务器返回的、具有相应特征的候选 item
。
服务器不仅返回推荐的
item list
,还返回这些item
对应的特征。
EdgeRec
中分页大小设置为 50
,为了稳定性,这和淘宝中原始推荐系统的取值一样。同时,从推荐系统服务器返回的 item
数量设置为 100
,以便为移动设备上的 reranking
提供更多空间。
然后,本地客户端收集用户对曝光item
的行为并触发model serving
模块。
从 model serving
模块接收到候选item
(尚未曝光的)的排名之后,本地客户端调整 item
的 UI
显示。
model serving: MS
:是 EdgeRec
系统的核心模块。当 model serving
被本地客户端触发时:
model serving
对从本地客户端接收到的用户行为和候选 item
进行特征工程。reranking
,从而及时响应用户。model serving
将日志发送到云端(为了后续离线模型训练),并将候选item
的排名结果返回给本地客户端。Recommender System on server
:可以视为 EdgeRec
中的召回模块,其目的是响应来自本地客户端的分页请求,为候选 item
提供初始排名。
此外,它可以在响应本地客户端之前,从云上的 key-value
存储中为候选 item
查找model serving
模块中模型需要的 item
特征和 embedding
(例如category embedding
)。
离线训练Offline Training: OT
模块:
model serving
收集日志并在模型训练之前构建样本。User Behavior Modeling
的子模型、上下文感知重排Context-aware Reranking
的子模型、embedding
矩阵(如类目和品牌)。model serving
模块上,而 embedding
矩阵作为 key-value
形式存储在云端。接下来我们介绍 EdgeRec
系统中两个关键模块的实现细节:本地客户端和 model serving
模块。
本地客户端 Client Native: CN
:本地客户端一个关键部分是在手机淘宝推荐系统中收集客户端上用户丰富的行为,例如浏览记录、点击记录(更详细的行为在后面会讲到)。这些用户行为随后被存储在设备的数据库中。
由于 EdgeRec
模型(即 Model Serving
)的运行是由本地客户端触发的,因此另一个关键的部分是触发 model serving
的策略。这里我们根据用户的在线实时行为设置了几个触发点trigger points
:用户点击了一个 item
、用户删除了一个 item
(即长按)、K
个 item
已经曝光但是没有点击。我们认为这三种类型的用户行为揭示了用户在当前推荐系统上的偏好,推荐系统应该及时响应用户(即触发 Model Serving
)。
根据业务规则来设定
trigger
。
Model Serving
:在移动设备上的深度神经网络 model serving
相比较于传统的云服务面临着许多挑战,例如计算开销和存储开销。EdgeRec
模型有两个关键实现,分别针对计算效率和存储效率。其思想是跨 edge
和 cloud
来分布模型,这使得 EdgeRec
支持在移动设备上为推荐系统提供大规模神经网络的 serving
。
计算效率Computing Efficiency
:用户行为建模User Behavior Modeling
和上下文感知重排Context-aware Reranking
一起训练,但是单独部署并在设备上异步运行。
用户行为建模使用 RNN-based
序列建模方法,如果它总是从一开始就进行推断(即具有 时间复杂度),那么效率低得多。因此,它通过 RNN
的循环特性recurrent characteristic
(即时间复杂度为 )与用户的 online incoming behaviors
一起被实时独立推断independently inferred
,并产生行为编码behavior encoding
。该编码被存储在设备上的数据库中。上下文感知重排将首先从数据库中检索行为编码,然后基于这些行为编码进行模型推断。
存储效率Storage Efficiency
:ID
类型的特征在推荐模型中很常见而且很重要,我们总是利用 embedding
技术来转换它们。然而,当在移动设备上 serving
时,ID embedding
面临存储效率的挑战。例如,我们模型中的 item
品牌是一个 ID
特征,字典大小大约为 150
万。当 ID
通过 embedding
层转换为维度 40
的 embedding
向量时,embedding
矩阵的大小为 150万 x 40
(即大约 230MB
)。当部署在移动设备上时,具有如此大 embedding
矩阵的模型将面临存储开销的问题。
在 EdgeRec
系统中,我们从训练好的模型中提取 embedding
矩阵以部署在云端的 key-value
数据库中。当服务器上的推荐系统响应来自本地客户端的分页请求时,这些 embedding
矩阵将被相应的 item
检索,并作为 item
特征发送到客户端。移动设备上的、没有 embedding
层的剩余模型部分(大约 3MB
)将把 embedding
特征作为输入,然后进行模型推断。
此外,我们设计了一个模型版本策略 model version strategy
来确保模型更新时的同步,因为在移动设备上成功部署模型可能比在云端部署模型(即 embedding
矩阵)有更大的延迟,这取决于用户移动设备的当前状态(如,是否连接到 wifi
、是否连接到 3G/4G/5G
)。在 EdgeRec
系统中,我们将为每个训练好的模型生成一个唯一的版本 ID
。该版本 ID
与部署在移动设备上的模型、以及存储在云端的 embedding
矩阵一起保存。本地客户端首先在设备端用模型版本号发起分页请求,然后云端推荐系统获取模型版本号,检索对应版本的 embedding
矩阵,再响应客户端。
版本
ID
用于确保模型各组件的一致性。这也意味着需要在云端部署多套embedding
(因为可能有的手机客户端未能更新到最新的模型)。
这里我们介绍了用于用户行为建模和上下文感知重排的特征系统和方法。
我们提出的 EdgeRec
系统旨在将 reranking
方法应用于 edge targeting waterfall flow
推荐场景。给定云端现有推荐系统生成的、缓存在 edge
端的初始排序 item
列表 ,对于本地客户端模块触发的 model serving
模块中的 reranking
请求 ,我们的目标是找到一个评分函数 ,其中: 为目标 item
的特征, 为来自初始模型的本地排序上下文local ranking context
(从 抽取而来), 为当前推荐环境中的实时用户行为上下文real-time user behavior context
(从本地客户端上用户行为序列抽取而来)。
这里本地排序上下文指的是推荐系统服务器返回的候选
item
列表。
考虑本地排序上下文的 reranking
模型在以前的工作中已经得到了很好的研究。并且本地排序上下文表示为初始排序候选 item
之间的 list-wise
交互,其可以由 RNN
或者 Transformer
建模。但是,我们认为实时用户行为上下文对于 reranking
问题也很重要,尤其是在瀑布推荐场景中,而之前很少有工作考虑过它。
接下来我们将介绍如何使用异质用户行为序列建模实时用户行为上下文,以及如何使用行为注意力网络Behavior Attention Network
的上下文感知重排Context-aware Reranking
来建模候选 item
和实时用户行为上下文之间的交互。通过结合边缘计算 edge computing
系统和上下文感知重排模型,我们可以在推荐系统中实现实时感知Real-time Perception
和实时反馈Real-time Feedback
,更好地满足用户的在线多样化需求。
EdgeRec
系统的整体架构如下图所示。
这里我们首先讨论我们的特征系统 feature system
,然后介绍 item
曝光上、以及 item
详情页上的详细用户操作特征以及相应的 item
特征。
洞察 insight
: 在个性化搜索和推荐系统的文献中,用户的行为通常被建模从而表征用户的个性化偏好。因此,这些模型仅考虑用户和 item
之间的直接 “正反馈”positive feedback
(例如点击或交易),很少关注间接“负反馈”negative feedback
(如跳过或删除)。虽然正反馈相对更清晰、噪音更小,但是实时的负反馈也很重要,尤其是在瀑布流推荐系统中。以在线淘宝推荐系统为例,一个item
类目实时多次曝光之后,如果继续曝光该类目的 item
那么点击率 CTR
会显著下降。
另一方面,以前的工作仅考虑与用户交互的 item
的特征(如,类目、品牌)。然而,用户对 item
的“动作”action
也应该受到关注。例如,用户点击一个 item
之后,其详情页(称作 item page-view
)中的操作(例如,添加到收藏夹、添加到购物车)反映了用户对该 item
的真实偏好。此外,尽管用户没有点击某个 item
,但是对该 item
曝光的操作(例如滚动速度和曝光)可以代表该 item
被视为“负反馈” 的程度。有时,如果用户长时间聚焦于某个 item
曝光而没有点击它,这并不能绝对表明用户不喜欢该 item
。在目前瀑布流推荐系统中,item
展示的信息量越来越大,例如图片更大、关键词更多、甚至自动播放视频,因此点击已经成为一些用户非常“奢侈”的正反馈。
最后,基于我们提出的 EdgeRec
系统,所有的用户行为特征都在edge
(即用户的移动设备)上收集、抽取、和消费。与当前的基于 cloud-to-edge
的推荐系统相比,这有可能突破网络延迟和带宽的限制。因此,可以结合丰富的、详细的用户行为以更实时的方式推断用户偏好。此外,在用户自己的移动设备上处理和利用用户的原始行为,可以在一定程度上缓解用户数据隐私问题。
总而言之,我们工作中的特征系统是新颖的,并且从 “仅依赖正反馈交互” 到 “同时关注正负反馈交互”,从“仅关注交互 item
” 到 “同时考虑交互的 item
及其相应的动作”, 从“准实时方式” 到 “超实时方式”。
item
曝光用户行为特征 Item Exposure User Action Feature
:item
曝光 Item Exposure: IE
用户行为揭示了用户在推荐系统当前展示页面中的 item
曝光上的行为。下图(a)
说明了手机淘宝瀑布流推荐系统中的 item
曝光。
相应用户行为特征可以分类为(下表给出了更详细的细节):item
曝光统计信息(e1~e2
)、用户滚动统计信息(e3~e5
)、用户删除反馈信息(e6
)、时间衰减(e7
)。这里我们将 item
对应的 e1 ~ e7
拼接起来,作为item
的曝光行为特征向量exposure action feature vector
。
下表中,e1 ~ e7
为 item
曝光用户行为特征,d1 ~ d12
为 item
详情页用户行为特征,p1~p7
为 item
特征。
item
详情页用户行为特征 Item Page-View User Action Feature
:Item Page-View: IPV
用户行为揭示了用户在点击 item
后在 item
详情页中的行为。上图 (b)
说明了手机淘宝中的 item
详情页,并且相应用户行为特征可以分类为(下表给出了更详细的细节):item
详情页统计信息 (d1
)、每个区域是否点击(d2 ~ d11
)、时间衰减(d12
)。这里我们将 item
对应的 d1 ~ d12
拼接起来,作为item
的详情页行为特征向量 page-view action feature vector
。
item
特征 Item Feature
:除了用户行为特征,我们还需要相应 item
的特征。item
特征可以分类为:离散特征(p1~p6
,它们将学习 embedding
)、从base ranking
模型提供的原始特征 (p7
)。这里我们将 item
对应的 p1 ~ p7
拼接起来,作为 item
的 item feature vector
。
这里我们将介绍如何对定义为 的实时用户行为上下文real-time user behavior context
进行建模。根据以前的工作,我们也应用序列建模方法。然而,之前的工作仅考虑用户的positive
交互 item
,正如我们前面所讨论的,因此他们不能很好地处理基于我们提出的特征系统的用户行为序列建模。挑战来源于用户行为数据存在两个方面的异质性heterogeneity
。因此在我们的工作中,我们提出了异质用户行为序列建模 Heterogeneous User Behavior Sequence Modeling: HUBSM
,具体而言是针对以下两个异质性:
第一个异质性是 item
曝光行为和 item
详情页行为的异质性。由于和 item
曝光行为相比,item
点击行为要稀疏得多(item
详情页就是点击之后带来的),如果曝光行为和点击行为以一个序列编码在一起,那么我们相信item
曝光行为将占据主导地位。所以我们选择分别对 item
曝光行为和 item
详情页行为进行建模,即 Item Exposure Behavior Sequence Modeling
和 Item Page-View Behavior Sequence Modeling
。
Item
曝光行为刻画的是用户的负向意图,而Item
详情页行为刻画的是用户的正向意图。所以在构建特征体系的时候,Item
曝光用户行为特征描述了哪些行为能够体现用户的 “不喜欢”,Item
详情页用户行为特征描述了哪些行为能够体现用户的 “喜欢”。
第二个异质性是用 user behavior action
和对应的 user interacted item
的异质性,这代表了两种特征空间。用户行为动作特征揭示了用户在 item
上行为的分布,而 item
特征代表了 item
属性的分布。
我们选择首先对用户行为动作和用户交互item
进行独立编码,然后在接下来的上下文感知重排模型中进行关于行为注意力机制Behavior Attention mechanism
的融合。
曝光行为和点击行为分开独立建模可以理解,但是将动作序列和
item
序列分开独立建模好像讲不通?只有动作、而没有被作用的item
无法刻画用户的偏好,只有动作和item
结合在一起才能完整地刻画用户偏好。因此第二个异质性是否不成立?
item
曝光行为序列建模:我们将 Item Exposure
动作特征向量输入序列定义为 ,对应的 item
特征向量输入序列为 。其中 为 Item Exposure
行为序列的预定义最大长度,对于较短的序列我们用零来填充。
通过以下方程我们得到了动作编码输出序列 、item
编码输出序列 、融合的行为编码输出序列 :
其中 为编码后的动作特征向量、item
特征向量、融合行为向量。
item
详情页行为序列建模:我们将 Item Page-View
动作特征向量输入序列定义为 ,对应的 item
特征向量输入序列为 。其中 为 Item Page-View
行为序列的预定义最大长度,对于较短的序列我们用零来填充。
通过以下方程我们得到了动作编码输出序列 、item
编码输出序列 、融合的行为编码输出序列 :
其中 为编码后的动作特征向量、item
特征向量、融合行为向量。
如前所述,在item
曝光行为序列建模和item
详情页行为序列建模中,对于户行为动作、用户交互item
,我们都采用常用的 gate recurrent unit: GRU
作为我们的编码器函数。我们用多层 GRU
网络定义序列编码器函数为:
其中 为输入序列, 为编码的输出序列, 为 RNN
的最终状态。
我们采用向量拼接来作为融合函数fusion function
,即:
其中 为编码后的动作特征向量, 为编码后的item
特征向量, 为融合后的特征向量。
当然,这里可以采用更复杂的编码模型(例如 Transformer
),也可以采用更复杂的融合函数(例如 DNN
)。考虑到移动设备上模型的大小,我们在实现中分别使用了 GRU
和拼接。最终用户行为上下文 由两个元组构成: 。
我们在 EdgeRec
的设备上部署 HUBSM
。基于 RNN
的循环计算特性,我们对 online incoming
用户行为进行同步地、实时地建模,如前面内容所述。
这里我们研究了我们的 reranking
方法的细节,该方法称作行为注意力网络的上下文感知重排Context-aware Reranking with Behavior Attention Networks
,以共同捕获 local ranking
上下文以及候选 item
,与实时用户行为上下文之间的交互。
我们使用 GRU
网络对由初始 ranking
模型排序的候选 item
序列进行编码,并将最终状态作为 local ranking
上下文 。借助于注意力技术,我们的 reranking
模型可以自动搜索与target item
排序相关的用户行为上下文部分。
以前的 CTR
预估模型(如 DIN
和 DUPN
)仅学习与 target item
相关的attend
用户历史交互 item
,因此它们无法基于上述注意力机制对用户行为动作进行建模。作为比较,我们的方法首先从用户行为上下文中 attend
相关的交互 item
(也就是找到相似的交互 item
),然后attentively
结合相应的用户行为动作(这些用户行为动作表明用户对这些item
的潜在意图),一起作为上下文表示从而指导target item
预测。我们在这里称之为 Behavior Attention
,它特别地同时使用了 item
曝光行为上下文和 item
详情页行为上下文。
简而言之,首先找到目标
item
相似的用户交互item
,然后找到对于该item
的动作。
Candidate Item Sequence Encoder
:我们将候选 item
序列定义为 ,它是由推荐系统服务器中的prior
模型生成和排序的。这里的 是候选 item
序列的预定义最大长度,对于较短的item
序列我们使用零来填充。
候选
item
序列如何生成?猜测可能就是常规的ranking
模型得到的。因此EdgeRec
需要两套模型:一套是服务器端的常规ranking
模型,另一个是EdgeRec
模型。
我们应用 GRU
网络对其进行编码,并将 RNN
的最终状态表示为 local ranking
上下文,即:
其中: 为候选 item
编号后的 embedding
向量, 为 local ranking
上下文。
因为服务器返回的是有序的
item list
,所以这里用GRU
网络来捕获序列关系。
Behavior Attention
:具体到编码为 的 target
候选 item
:
我们首先分别关注 item
曝光行为item
编码序列 和 item
详情页 item
动作编码序列 。
然后我们根据 Bahdanau
注意力机制将将注意力分布表示为 以及 。
即,计算曝光行为
item
/ 详情页行为item
和目标item
的相似度。
最后,我们通过结合注意力分布,以及用户行为序列的融合行为编码fused behavior encoding
和 ,从而生成用户行为上下文 和 。
具体而言,遵循 Transformer
中的三元组 (Query,Key,Value)
的符号,我们在模型中定义 为 Query
、 为 Key
、 为 Value
。我们认为,这里的注意力计算是为了搜索相似或相关的 item
,因此比较的两个特征空间的 representation
应该是同质的。这就是为什么我们选择对 user behavior actions
和相应的 user interacted items
分别进行编码,并以用户行为item
序列作为 Key
、 target item
作为 Query
。
比较的两个特征空间也可以是异质的,可以通过一个参数矩阵映射到相同的空间中来。但是论文中的方法是否更好,可以通过实验来比较。
详细信息可以参考以下公式:
其中 为训练的参数。
模型学习:为了建模 ,我们首先简单地将 IPV
、IE
上的上下文(即 )、target
候选的 representation
(即 )、local ranking
上下文(即 )拼接起来,并将它们馈入多层感知机MLP
中进行非线性变换,随后使用交叉熵损失进行模型训练。
数据集:我们从手机淘宝的 EdgeRec
系统收集在线日志以及相应的 item
特征。具体而言,我们从两个不同日期(2019-11-14
和 2019-11-15
)的日志中随机抽样,并将它们分为训练集(22072671
个样本)和测试集(200000
个样本)。此外,我们收集的数据集的 Item
曝光行为序列平均长度为 56
、 Item
详情页行为序列的平均长度为 26
。
baseline
方法:我们将我们的模型和两种在工业application
中广泛应用的代表性方法进行比较,即 DNN-rank
和 DLCM
。
为了检查我们提出的异质用户行为序列建模 HUBSM
和使用行为注意力网络的上下文感知重排 CRBAN
的有效性,除了我们的完整方法CRBAN+HUBSM(IE&PV)
之外,我们还准备了 CRBAN
的以下变体:
CRBAN+HUBSM(IE)
:仅仅考虑 Item
曝光行为序列建模 IE-BSM
。
CRBAN+HUBSM(IPV)
:仅仅考虑 Item
详情页行为序列建模 IPV-BSM
。
CRBAN+HUISM(IE&IPV)
:尽管 IE
曝光行为序列和 Item
详情页行为序列都被考虑,但是使用 DIN
而不是 HUBSM
对用户行为上下文建模。
DIN
仅考虑历史行为序列和目标item
相关性,没有利用到序列的顺序特性。
配置:我们使用 PAI
支持的分布式 Tensorflow
训练模型,训练配置如下:batch size = 512
、学习率为 0.005
、GRU
隐单元数量为 32
、attention
隐单元数量为 32
、MLP
隐单元数量为 32
、优化器为 Adam
。
注意:DNN-rank
和 DLCM
仅利用云端的特征,因为它们无法捕获 edge
特征。
评估指标:GAUC
是一种广泛使用的推荐指标,通过对用户的 AUC
取平均。在我们的论文中,我们通过对 EdgeRec
系统中的本地客户端请求 取平均 AUC
来扩展 GAUC
,这可以视为一个 reranking session
,计算如下:
其中: 为请求 的item
曝光量, 为请求 的 AUC
。
不同方法的 GAUC
性能如下表所示。这里 *
表示和 baseline
(DLCM
) 相比,通过 t-test
在p-value=0.05
的统计显著性提升。
可以看到:
DLCM
优于 DNN-rank
,这验证了将 local ranking context
纳入 reranking
模型的有效性。
所有基于 CRBAN
的方法都显著优于 DLCM
。特别地,我们的完整方法 CRBAN+HUBSM(IE&IPV)
实现了 GAUC
的 2%
的显著相对提升。这证明了在 reranking
模型中考虑实时用户行为上下文的优势。因此,如何对用户行为上下文进行建模是我们将在以下讨论中重点讨论的内容。
为了验证我们提出的异质用户行为序列建模方法,我们将 HUBSM(IE&IPV)
与 HUBSM(IE)
、 HUBSM(IPV)
进行了比较。结果表明:正反馈(即 IPV
)和负反馈(即 IE
)的用户行为都有助于对用户行为上下文进行建模。
我们还发现 HUBSM(IPV)
优于 HUBSM(IE)
,这表明 Item
详情页用户行为可能比 Item
曝光用户行为更重要。
最后,通过比较 HUBSM(IE&IPV)
和 HUISM(IE&IPV)
的结果表明:通过同时考虑交互 item
及其相应action
的行为注意力机制可以带来效果提升。
在线 A/B test
:我们在手机淘宝上部署的 EdgeRec
系统上进行了在线实验(A/B test
)。在淘宝瀑布流推荐系统中,在线指标包括 PV、CTR、CLICK、GMV
,这些指标评估用户在推荐系统中查看(PV
)、点击(CTR,CLICK
)、购买(GMV
)的意愿有多大。
EdgeRec
已经全面部署在手机淘宝 application
中,服务于数十亿用户。baseline
(即 A test
)是没有 EdgeRec
的常规淘宝推荐系统。在这里,数百万不同的随机用户同时分别进行在线A/B test
。在 2019-10-26
到 2019-11-08
近两周的测试中,拥有完整模型 CRBAN+HUBSM(IE&IPV)
的EdgeRec
平均贡献高达 1.57% PV
、7.18% CTR
、8.87% CLICK
、10.92% GMV
的提升。这绝对是一项重大的改进,并证明了我们提出的系统的有效性。
此外,我们还回顾了淘宝推荐系统中不同展示位置display position
的在线平均 item
点击率。从下图可以看到:部署 EdgeRec
后,当前页面末尾的 CTR
会有很大的提升。这说明在推荐系统中加入实时感知和实时反馈可以大大提高用户的点击意愿,因为推荐系统能够及时满足用户的在线需求。
在线系统性能:除了在线 A/B test
以展示生产中的业务效果之外,我们还在手机淘宝中进行了 EdgeRec
的效率测试,从三个关键方面揭示了部署 EdgeRec
后系统效率的显著提升。
用户行为的延迟时间会影响系统捕获用户对 item
个性化偏好的及时性,从而影响用户在推荐系统中的体验。
由于网络带宽和延迟的限制,仅仅基于 cloud-to-edge
框架的推荐系统可能会导致捕获用户行为的延迟时间长达 1
分钟。然而,部署 Edge
之后,用户行为可以在设备上被收集和消费,无需任何网络通信开销,这可以使延迟时间在 300
毫秒以内(例如,从设备上的数据库读取用户行为的时间)。
系统的响应时间是影响推荐系统用户体验的另一个因素。当本地客户端随着用户在推荐系统场景中滚动并向系统发送请求时,系统应该及时响应并将已排序的 item
提供给用户,否则用户将等待并可能导致用户离开。
由于为淘宝上亿用户提供如此复杂的推荐系统模型的计算开销,仅基于云端计算的推荐系统可能会导致包括网络传输在内的 1
秒的响应时间。而在 EdgeRec
中,model serving
在每个用户的移动设备上,解决了集中计算开销的问题,使得响应时间在 100
毫秒以内,无需任何网络通信。
系统对用户的平均反馈次数是影响推荐系统用户体验的另一个关键因素。它反映了当用户在推荐系统中浏览时,系统可以调整向用户展示的 item
排名的频率。系统调整结果的频率越高,就越能够满足用户在推荐系统中的各种需求。
然而,没有 EdgeRec
的推荐系统不能使系统反馈的次数变得更大,因为这会加重云端服务器上的计算开销。所以在目前 cloud-to-edge
的框架下,没有 EdgeRec
的淘宝推荐系统中用户的平均系统反馈次数为 3
次,平均分页大小为 50
(即用户平均发出 3
次分页请求)。相比之下,EdgeRec
中没有显式的分页点,而是根据用户行为由本地客户端来触发。在不增加云端额外计算开销的情况下,EdgeRec
中系统反馈的平均次数可以达到 15
次(即本地客户端平均在一个页面中触发了 5
次 reranking
请求,因此总数为 15
次)。
带 EdgeRec
和不带 EdgeRec
的推荐系统在这三个方面的性能如下表所示。结果数据是在流量高峰时观察到的,并且通过对用户取平均来计算。
我们在下图中对手机淘宝进行了案例研究,以展示异质用户行为序列建模和行为注意力网络的上下文感知重排的有效性。总之,我们有以下观察:
用户在item
详情页中的行为表明用户具有 positive intention degree
的 item
偏好,例如添加到购物车或者和客服咨询;而item
曝光中的用户行为通常推断出对 item
的negative intention
,如快速划过或删除。
这意味着异质用户行为序列建模能够捕获用户对历史交互 item
的潜在正向和负向意图。
借助于item
详情页中两件相似的衬衫,候选衬衫被预测为postive
;借助于item
曝光中具有lower negative intention degree
的两个相似的交互 item
,候选帽子被预测为 negative
。
这表明行为注意力网络的上下文感知重排能够利用用户行为上下文对候选item
之间的交互进行建模,从而更好地指导target item
的预测。
近年来,在线购物平台(如 Ebay
、沃尔玛、亚马逊、天猫、淘宝、京东)在人们的日常生活中越来越受欢迎。电商搜索帮助用户从数十亿商品中找到用户需要的东西,因此电商搜索是这些平台的重要组成部分,并且在所有渠道中贡献了最大比例的交易。例如,服务于数亿活跃用户的天猫、淘宝、京东等中国顶级电商平台,Gross Merchandise Volume: GMV
高达数千亿美元。在论文 《Towards Personalized and Semantic Retrieval: An End-to-End Solution for E-commerce Search via Embedding Learning》
中,作者将重点关注深度学习最近对电商搜索系统产生的巨大影响。下图给出了京东手机 App
上搜索的用户界面。
搜索系统的三个组件Three Components of Search System
:下图展示了一个典型的电商搜索系统,它具有三个组件:query
处理query processing
、候选检索candidate retrieval
、排序ranking
。
query
处理将 query
(例如 “爷爷的手机”)重写为可以由下游组件处理的 term-based representation
(例如 [term 手机] AND [term 爷爷]
)。这个阶段通常包括词干化 tokenization
、拼写纠正spelling correction
、query
扩展 query expansion
、以及重写 rewriting
。inverted indexes
,根据 term matching
高效地检索候选 item
。这一步将 item
数量从数十亿减少到数十万,使得 fine ranking
变得可行。ranking
根据相关性、预估转化率等因子对检索到的候选进行排序。生产系统可能具有级联的 ranking steps
,其中从上游到下游依次应用从简单到复杂的 ranking
函数。在论文中,我们仅关注候选检索阶段,以实现更加个性化personalized
和语义化 semantic
的搜索结果,因为这个阶段在我们的搜索产品中贡献了最多的 bad cases
。根据我们的分析,JD.com
作为全球最大的电商搜索引擎之一,搜索流量的不满意案例 dissatisfaction cases
大约 20%
可以归结于这一阶段的失败。如何在 ranking
阶段处理这一点不在本文讨论范围内,但是将是我们未来的工作。
候选检索中的两个挑战Two Challenges in Candidate Retrieval
:如何有效地检索更加个性化和语义相关的item
仍然是现代电商搜索引擎面临的主要挑战。
语义检索问题Semantic Retrieval Problem
:指的是传统的倒排索引无法检索语义相关、但是不包含query
的 exact terms
的 item
。正如《Semantic Matching in Search》
所述,搜索系统最关键的挑战是 query
和 item
之间的 term mismatch
,尤其是对于电商搜索,item
标题通常很短。
传统的互联网搜索通常使用 query rewriting
来解决这个问题,它将原始 query
转换为另一个可能更好地代表搜索需求的 similar query
。但是,很难保证通过 middle man
“中间人” (即重写的 query
)来保持相同的搜索意图search intention
,并且也不能保证包含不同 terms
的相关 item
可以通过有限的rewritten query
集合来检索到。
个性化检索问题Personalized Retrieval Problem
:指的是传统的倒排索引无法根据当前用户的性别、购买力等特征检索出不同的 item
。例如,如果用户是女性,那么我们希望检索更多的女性 T-shirt
,反之亦然。
一些基于规则的解决方案已经在我们的系统中使用了很多年,包括:为 item
建立 tag
索引,如购买力、性别等等,就像 token
进入倒排索引一样;为不同的用户组建立独立的索引。然而,以前的这些方法太过于人工设计hand-crafted
,因此很难满足更精巧subtle
的个性化需求。
论文的贡献:在论文中,作者提出了深度个性化和语义化的检索 Deep Personalized and Semantic Retrieval: DPSR
来解决前述的工业级电商搜索引擎中的两个挑战。论文的贡献可以总结如下:
serving
组成的完整 DPSR
的 embedding
检索系统。作者分享了将基于神经网络的候选检索产品化为工业级电商搜索引擎的关键设计决策。query
塔为 multi-head
设计、attention-based
损失函数、负采样方法、高效的训练算法和人工监督数据。所有这些对于训练表现最好的模型都是必不可少的。TensorFlow API
以实现在线/离线一致性、输入数据存储、以及可扩展的分布式训练。论文还展示了作者在构建用于 embedding
检索的工业级在线 serving
系统方面所做的努力。embedding
可视化、离线评估、在线 A/B test
,结果表明论文的检索系统可以帮助找到语义相关的 item
,并显著改善用户的在线搜索体验,尤其是对于传统搜索系统难以处理的长尾 query
(转化率提升 10%
)。自 2019
年以来,论文的 DPSR
系统已经成功部署在京东的搜索产品中。
相关工作:
传统的候选检索Traditional Candidate Retrieval
:对于候选检索,大多数研究都集中在学习 query rewrites
作为一种间接方法来弥合 query
和 doc
之间的vocabulary gap
。仅有少数的几种新的模型方法,包括矩阵分解的潜在语义索引 latent semantic indexing: LSI
、概率模型的概率潜在语义索引 probabilistic latent semantic indexing: PLSI
、自编码模型的语义哈希semantic hashing
。所有这些模型都是从 doc
中的单词共现中无监督学习的,没有任何监督的 label
。
我们的方法和之前的方法不同,因为我们训练了一个监督模型来基于具有相关信号(即 click
)的大规模数据集直接优化相关性度量relevance metrics
(而不是优化单词共现)。
基于深度学习的相关性模型Deep Learning Based Relevance Model
:随着深度学习的成功,大量基于神经网络的模型被提出,以学习 query
和 doc
之间语义相关性的方式来改进传统的信息检索information retrieval: IR
方法和 learning to rank: LTR
方法。
有关语义匹配和基于深度神经网络的信息检索的全面综述,可以参考《Semantic Matching in Search》
和 《An Introduction to Neural Information Retrieval》
。特别是 DSSM
及其后续工作 CDSSM
开创了使用深度神经网络进行相关性评分的工作。最近,包括 DRMM
、Duet
在内的新模型得到了进一步发展,以将传统的信息检索lexical matching
信号(如 query term
重要性、exact matching
)包含在神经网络中。然而,这个方向所提出的大部分工作都集中在 ranking
阶段,其优化目标和要求与我们在本文工作所关注的候选检索有很大不同。
深度神经网络的双塔架构已经在现有的推荐工作中广泛采用,以进一步结合 item
特征。这种模型架构在自然语言处理中也被称作双编码器dual encoder
。这里我们提出了一个更高级的双塔模型,它由用于query
塔的 multi-head
和基于 soft
内积(而不是简单内积)的 attention
损失函数组成。
搜索引擎中的 embedding
检索 Embedding Retrieval in Search Engine
:近年来,embedding
检索技术已广泛应用于现代推荐系统和广告系统,但是尚未广泛应用于搜索引擎。我们发现了关于在搜索引擎中检索问题的一些工作,但是它们尚未被应用到工业生产系统中。据我们所知,我们是在工业搜索引擎系统中应用 embedding
检索的首批实践探索之一。
在我们介绍细节之前,先展示以下我们的 embedding
检索系统的全貌。下图说明了我们的生产系统具有以下三个主要模块:
离线模型训练Offline Model Training
模块:训练由 query embedding
模型(即 query
塔)和 item embedding
模型(即 item
塔)组成的双塔模型,分别用于在线 serving
和离线索引。
这种双塔模型架构是一种谨慎且必要的设计,能够实现快速的在线 embedding
检索,具体细节在后面讨论。此外,我们在后面还讨论了我们优化离线训练系统的努力。
离线索引Offline Indexing
模块:加载 item embedding
模型(即 item
塔),从 item
语料库中计算所有 item embedding
,然后离线构建 embedding
索引以支持高效的在线 embedding
检索。
由于不可能在数十亿个item
的 item
语料库中进行全量搜索,因此我们采用了一种 state-of-the-art
的算法来来对稠密向量进行有效的最近邻搜索,从而为 query embedding
找到相似的 item embedding
。
Online Serving
模块:加载 query embedding
模型(即 query
塔)从而将任何用户输入的 query
文本转换为 query embedding
,然后将其馈送到 item embedding
索引以检索 K
个相似 item
。
注意,这个在线 serving
系统必须以几十毫秒的低延迟来构建。此外,它必须能够 scale
到每秒数十万次查询query per second: QPS
,并且能够灵活地对实验进行敏捷迭代。我们将在后面详细讨论我们为了构建这样一个在线 serving
系统所作的努力。
这里将
User Profile
的embedding
进行Concat
,而User History Events, Query Tokens, Item Title Tokens
的embedding
都是进行Average
,有两个原因:
- 首先,
User Profile
的字段数量是固定的,因此embedding
拼接之后的长度是确定的。而User History Events
、Query Tokens
、Item Title Tokens
的embedding
数量是可变的,拼接之后的长度是可变的。- 其次,
User Profile
的各字段是异质的,例如 “年龄” 和 “性别” 是不同的,它们的embedding
难以直接相加;而User History Event
的embedding
是同质的,它们可以直接相加。
接下来我们逐步介绍 embedding learning
模型,按照双塔架构two tower architecture
、query
塔的多头设计multi-head design
、注意力损失函数attentive loss function
、混合负采样hybrid negative sampling
、人工监督数据human supervision data
的顺序。所有这些对于训练我们的最佳表现的模型都是不可或缺的。
如上图的离线模型训练模块所示,模型由 query
塔 和 item
塔 组成。对于给定的 query
和item
,模型的输出得分为:
其中:
query
在 query
塔的 个输出embedding
。item
在 item
塔的 个输出 embedding
。query
和 item
之间的最终得分。研究者和从业人员通常让 query
塔 和 item
塔 都输出一个单一的 embedding
,即 和 ,并选择内积作为评分函数,即:
这种最简单的设置在很多应用中已经被证明是成功的。
这种双塔架构的关键设计原则是:在模型训练之后,使得 query embedding
和 item embedding
相互独立。所以我们可以分别独立地计算它们。所有的 item embedding
都可以离线计算,以便为在线快速最近邻搜索构建 item embedding index
,并且可以在线计算 query embedding
以处理所有可能的用户 query
。
即使 embedding
是独立计算的,由于 query
塔和 item
塔之间简单的内积交互,理论上 query embedding
和 item embedding
仍然在相同的几何空间中。因此,为给定的 query embedding
找到 K
个最近邻的 item
,等效于最小化给定 query
的 K
个 query-item pair
对的损失。
在下面的部分中,我们将介绍一个新颖设计的 query
塔 和一个交互函数 ,从而达到出色的、且可解释的检索结果。
由于 item representation
通常很直接明了,我们仍然简单地保持 item
塔 不变。item
塔 将所有 item
特征拼接起来作为输入层,然后通过多层感知机 MLP
(采用 ReLU
)来输出单个 item
的 embedding
,最后归一化为与 query embedding
相同的长度,如上图离线模型训练模块右侧所示。类似的 MLP
结构可以在以前的工作中找到。
如上图中离线训练模块的左侧所示,query
塔和 item
塔有两个不同之处:
一个投影层projection layer
,将一个输入的稠密 representation
投影为 个稠密的representation
。这里的另一个选择是使用 个独立的 embedding
集合,但是它需要更大的模型规模。在实践中,我们选择投影层来实现类似的效果,但是模型规模要小得多。
个独立的encoding MLP
,每个 MLP
独立输出一个 query embedding
,它们可能会捕获 query
的不同意图。我们将这 个输出 embedding
称作multi-head representation
。
这些 multiple query embeddings
为 query
的意图提供了丰富的 representation
。通常,我们在实践中发现:这可以为多义词 query
(如 apple
)捕获不同的语义含义,为商品 query
(如 cellphone
)捕获不同的流行品牌,为品牌query
(如 Samsung
)捕获不同的商品。
值得一提的是,encoding
层可以使用任何更强大的神经网络,如 RNN
和其它 state-of-the-art
的 transformer-based
模型。在一项独立的离线研究中,我们使用这些高级模型取得了相似或者稍好一些的结果。但是我们要强调的是,简单的 MLP
更适合于我们的工业级生产建模系统,因为它对离线训练和在线 serving
都更加高效,这意味着我们能够向模型训练馈送更多的数据(因为MLP
的计算效率高),并部署更少的机器来serving
模型。
除了单个 embedding
和内积 setup
之外,这里我们为multiple query embeddings
开发了一种更通用的形式。我们将query
塔 的 个输出简写为 ,其中 ,item
塔 只有一个输出为 。那么query
和 item
之间的 soft
内积可以定义为:
这个评分函数基本上是 query embedding
和 item embedding
之间所有内积的加权和。权重 是从同一组内积的 softmax
计算而来:
其中 为 softmax
的温度超参数。
注意, 越高,则注意力权重就越均匀。
embedding
内积的均值。当 时,上述评分函数退化为传统的embedding
内积形式。
这种
multi-head
和multi-head attention
有几点不同:
- 首先,这里
item
只有一个head
,而multi-head attention
中的item
有的 个head
。- 其次,这里内积采用不同
head
的加权和来计算,而multi-head attention
中的内积就是直接sum
而计算。因此这里
multi-head
的物理意义为:计算query
的不同意图和item
的相似度,然后对于相似度进行加权和。相似度越大的意图,其权重越大。
典型的工业点击日志数据集通常只包含 query
和 item
的点击 pair
对。这些 pair
对通常都是相关的,因此可以被视为正样本。除此之外,我们还需要通过各种采样技术收集负样本,这将在后面详细讨论。我们将所有训练样本的集合 定义为:
其中每个训练样本是一个三元组,由 query
、 query
相关的 postive item
、以及一个negative item
集合 组成。其中 且 中的每个 item
都和 query
无关(即 ) , label
信息。
然后我们在训练集 上使用带 margin
的 hinge
损失函数:
这要求 postive item
评分比 negative item
评分至少高出 。
注意,该注意力损失函数仅适用于离线训练。在在线检索期间,每个 query head
检索相同数量的 item
,然后将所有 item
根据它们与被检索 head
的内积得分进行排序和截断。
训练深度模型需要大量的数据。我们探索点击日志,它代表用户的隐式相关反馈 implicit relevance feedback
并由 query
及其点击 item
组成,从而训练我们的 embedding
检索模型。直观地,我们可以假设:如果item
在给定的 query
条件下被点击,那么该 item
和 query
相关,至少是部分相关。
形式地,我们可以将点击日志视为只有正样本的数据集的特例。那么如何有效地收集负样本是这里的一个关键问题。在我们的实践中,我们采用了一种混合方法,该方法混合了两种负样本来源,包括随机负样本和 batch
负样本。
随机负样本Random Negatives
:随机负样本集合 在所有候选 item
中均匀采样。
形式上,给定所有 个可用 item
的集合,我们从均匀分布 中随机抽取一个整数,并将item
集合中第 个元素放入到随机负样本集合 中。然而,如果我们直接应用这种均匀采样,则计算成本将非常高,因为每个负样本都必须经过 item
塔,更不用说对这些负样本进行采样并获取其特征的成本了。为了在保持效果的同时最小化计算成本,我们对一个 batch
中的所有训练样本使用相同的随机负样本集合。在实践中,我们发现结果与使用纯随机负样本的结果相似,但是前者训练速度要快得多。
batch
负样本Batch Negatives
:将 batch
中query
的正样本视为其它 query
的负样本,从而得到 batch
负样本集合 。具体而言,对于一个训练 batch
:
我们可以为第 个样本收集负样本为:
我们可以看到 batch
负样本基本上是根据数据集中 item
频率来采样的。这些随机生成的 query-item pair
对不太可能偶然相关。具体而言,偶然相关的可能性等于两个随机抽取的点击日志具有彼此相关的 item
。给定一个包含数亿个点击日志的数据集,这个可能性在训练准确性accuracy
方面基本上可以忽略不计。
此外,上述batch
负样本的主要优点是 item embedding
计算的复用。在 batch
中每个 item embedding
有一次作为正样本、有 次作为负样本,但是只需要一次特征提取及只需要一次 item
塔的前向计算。
混合比例Mixing Ratio
:最终的完整负样本集合 是上述两个负样本集合的并集:
在我们的电商搜索检索实践中,我们发现混合比例参数 对于负样本集合的组成通常很有用。形式上,我们采用 比例的随机负样本、 比例的batch
负样本。
我们发现 的值与从模型中检索到的 item
的流行度popularity
高度相关(参考实验部分),因此对在线指标影响很大。直观地,我们可以看到混合比例 决定了负样本中的 item
分布,从均匀分布( )到实际 item
频率的分布( )。通过这种方式,该模型倾向于为较大的 检索到更多流行的 item
,因为流行的 item
在随机负样本中出现的频率,相对于在 batch
负样本中出现的频率更低。
如果均匀采样,则所有
item
成为负样本的概率都是相同的。如果batch
内负采样,则热门item
成为负样本的概率更高,这使得模型检索到热门item
的概率更低。
我们在DPSR
训练算法中总结了带有 batch
负采样和随机负采样的完整训练算法。
每个训练 step
的计算复杂度为 ,即 batch size
的二次方。 因为batch
负样本需要在 batch
中需要为每个 query
和每个 item embedding
的 pair
对之间计算内积。在实践中,由于 batch size
通常很小(如 64
或者 128
),因此二次效应实际上比其它计算成本(如特征提取、梯度计算等)小得多。事实上,由于 batch
负样本对每个 item
塔输出的有效利用,总的收敛速度实际上更快。
DPSR
训练算法:
输入:
postive
数据集 batch size
step
输出:训练好的 query
塔 、item
塔
算法步骤:
迭代 ,迭代步骤为:
batch
的 个样本 。batch
随机采样一组负样本 。注意, 中的每个正样本都共享这组相同的负样本。query
塔计算 query head embeddings
。batch
以及随机负样本集合 内每个 item
计算 item embeddings
。batch
负样本集合 。query
塔 和 item
塔 。返回训练好的 query
塔 、item
塔 。
除了使用点击日志数据之外,我们的模型还能够利用额外的人工监督来进一步纠正极端 case
,结合先验知识并提高其性能。人工监督来自三个来源:
大多数跳过的 item
可以从在线日志中自动收集,这些 item
和相关的 query
可以用作负样本。
即曝光但是未点击的
item
可以视为负样本。
可以基于领域知识收集人工生成的数据作为人工负样本和人工正样本。例如:
“手机保护套” 被生成为query
“手机”的负样本,因为它们虽然字面上共享相似的产品词”手机“,但是语义上有着显著差异。
iPhone 11
被生成为 query
“最新大屏 iphone
” 的正样本。基于人工规则来自动生成正样本和负样本。
人工label
和上报的 bad case
通常用于训练相关性模型。我们将它们作为样本包含在训练数据集中。
这些人工监督数据可以作为正样本和负样本输入到模型中。
这些人工监督数据可以配置更高的样本权重,从而使得模型更关注这些 “特殊” 的样本。
我们采用 TensorFlow
作为我们训练和在线 serving
的框架,因为它已经被广泛应用于学术界和工业界。尤其是TensorFlow
具有以下优点:训练之前预先建立静态图、训练速度快、训练与在线 serving
无缝集成。
我们基于 TensorFlow
的高级 API Estimator
构建了我们的系统。为了确保最佳性能和系统的一致性,我们还做出了巨大努力来简化现有的 Tensorflow package
和工业级深度学习系统。
在线和离线的一致性Consistency Between Online and Offline
:构建机器学习系统的常见挑战之一是保证离线和在线的一致性。典型的不一致通常发生在特征计算阶段,尤其是在离线特征预处理和在线 serving
系统中使用两个独立的编程脚本时。
在我们的系统中,最脆弱的部分是文本 tokenization
,它在数据预处理、模型训练、在线 serving
中进行了三次。意识到这一点,我们用 C++
实现了一个unique tokenizer
,并用一个非常轻量的 Python SWIG
接口包装它以进行离线数据 vocabulary
计算,并使用 TensorFlow C++
自定义运算符进行离线训练和在线 serving
。因此,可以保证相同的 tokenizer
代码贯穿原始数据预处理、模型训练、在线预测。
压缩的输入数据格式Compressed Input Data Format
:工业搜索和推荐训练系统的典型数据格式通常由三种类型的特征组成:用户特征(例如 query
、性别、地域)、item
特征(例如流行度popularity
)、user-item
交互特征(例如,item
是否被用户看到)。由于训练数据存储所有 user-item
交互 pair
对,因此原始输入数据会多次重复用户特征和 item
特征,这会导致数百 TB
的磁盘空间占用、更多的数据传输时间、更慢的训练速度。
为了解决这个问题,我们自定义了 TensorFlow Dataset
来从三个独立的文件中组装训练样本:一个用户特征文件、一个 item
特征文件、一个包含 query, user id , item id
的交互文件。用户特征文件、item
特征文件首先作为特征 lookup
字典被加载到内存中,然后交互文件在训练step
中迭代,迭代时从内存读取并添加了用户特征和 item
特征。通过这种优化,我们成功地将训练数据的规模减少为原始大小的 10%
。
在典型的工业级系统中,用户规模在亿级、
item
规模在千万级,因此将用户特征文件、item
特征文件加载到内存中是个瓶颈。一个解决方案是采用内存数据库,如redis
,但是这会增加系统的复杂度(需要维护一套redis
集群,以及处理redis
请求失败的case
)。
可扩展的分布式训练 Scalable Distributed Training
:在具有参数服务器 parameter servers
的分布式训练场景中,常见的瓶颈之一是网络带宽。工业界大部分大型机网络带宽是 10G bits
,对于大型深度学习模型而言远远不够。我们观察到,现有的 TensorFlow Estimator
实现在处理 embedding
聚合(例如 embedding
的 sum
)时没有得到足够的优化,因此在增加一些 worker
时网络带宽很快成为瓶颈。
为了进一步提高训练速度,我们改进了 TensorFlow
官方实现中的 embedding
聚合操作,将 embedding
聚合操作移到参数服务器中,而不是在 worker
中。因此对于每个 embedding
聚合,在参数服务器和 worker
之间只需要传输一个 embedding
,而不是数十个embedding
。因此,网络带宽显著降低,分布式训练系统可以扩展到五倍以上的机器。
DPSR
在线 serving
系统的概述如下图所示。该系统由两个新颖的部分组成:一个是 TensorFlow Servable
模型、另一个是模型sharding
代理。
One Servable Model
:DPSR
的简单实现可以由两个独立的部分组成:query embedding
计算和最近邻查找。如果没有精心的设计,可以简单地为它们构建两个独立的在线服务。然而,从以下两个方面来看,这不是最优的系统设计:
query embedding
模型和 item embedding
索引之间映射的复杂性,如果发生映射错误,那么将完全导致系统故障。query embedding
、一次搜索最近邻)来计算给定 query
文本的最近邻。为了克服这些问题,我们通过 TensorFlow Servable
框架采取了一种更优化的方法。在该框架中,我们可以将两个部分统一到一个模型中。如上图所示,这两个部分可以封装到一个 Servable
中。query embedding
直接从 query embedding model
发送到 item embedding
索引,通过计算机内存而不是计算机网络。
这里将
Query Embedding Module
和Embedding Indexes
部署在一起。对于规模在千万级的item
,其Embedding Indexes
可能单机内存无法处理。例如,假设embedding size = 128
,embedding
为双精度浮点,那么1
千万item
需要消耗9.5 GB
内存。
模型分片 Model Sharding
:系统的进一步扩展需要同时支持数百个 DPSR
模型在线,用于不同的检索任务、以及各种模型的 A/B test
。然而,一个由 query embedding
模型和一个 item embedding
索引组成的 servable
模型通常需要数十 GB
的内存。因此,将所有模型存储在单台机器的内存中变得不可行,我们必须构建一个系统来支持为数百个 DPSR
模型的 serving
。
我们通过一个代理模块来解决这个问题,这个代理模块的作用是将模型预估请求定向到一个保持相应模型的model server
,如上图所示。这个基础设施不仅是为 DPSR
设计的,而且是作为一个通用系统来支持我们搜索产品的所有深度学习模型。
在本节中,我们首先利用 t-SNE
可视化 embedding
结果,以便我们可以直观地了解模型的工作原理。然后我们和不同方法进行比较来评估离线效果。接下来我们报告了我们的搜索产品中的在线 A/B test
结果。最后我们报告了 DPSR
系统的离线索引和在线 serving
耗时,以证明其效率,这在工业环境中至关重要。
我们的生产 DPSR
模型是在 60
天用户点击日志的数据集上训练的,其中包含 56
亿次 session
。我们在 5
台 48-cores
机器的集群中进行分布式训练,共启动了 40
个 worker
和 5
个参数服务器。
我们使用了 margin
参数 、Adam
优化器、学习率 0.01
、batch size
、embedding
维度 。训练大约 4
亿step
收敛,耗时约 55
个小时。
Embedding Topology
:为了直观了解我们的 embedding
检索模型是如何工作的,我们展示了从我们平台中最热门的 33
个类目中选择的高频item
的二维 t-SNE
坐标。如下图所示,我们可以看到 item embedding
的结构非常明确和直观。
基本上,我们可以看到:
总体而言,这种合理且直观的 embedding
拓扑反映了所提出的模型能够很好地学习 item
语义,从而使得 query embedding
能够检索相关 item
。
Multi-Head
消歧:在下图中,我们还计算了从 10
个商品类目中选择的高频 item
的二维 t-SNE
坐标,以此说明在 query
塔中使用multi-head
的效果。我们在这里使用两个多义词query
作为示例,即 'apple'
和 'cellphone'
,这两个词也在我们平台的 top-10 query
中。
(b)
中,我们可以看到 query 'apple'
的两个 head
分别检索了 iPhone/Macbook
和 apple fruit
。c
中,我们可以看到 query 'cellphone'
的两个 head
分别检索了两个最受欢迎的品牌:华为和小米。这些都显示了不同的 head
能够聚焦于不同的潜在用户意图。相比之下,图 (a)
中的 single-head
模型不适用于手机类别,其中 iPhone
构成了远离其它手机的另一个cluster
。这可能是由于最上面的 query
'apple'
的歧义性ambiguity
。
语义匹配 Semantic Matching
:为了更好地理解我们提出的模型是如何执行的,我们在下表展示了我们的检索产品中的几个 good cases
。可以看到:通过学习一些单词的语义,DPSR
令人惊讶地能够连接bridging
query
和相关的 item
。例如:大童和 3-6
岁、自由泳器材和划臂等等。
此外,DPSR
能够纠正 query
中的拼写错误,如 v
女包 和 LV
女包、ovivo
手机和 vivo
手机。部分原因是我们利用了 token vocabulary
的英文字母三元组。我们还观察到类似的汉字错字纠正,主要是从用户点击和 n-gram embedding
中学到的。
评估指标:我们使用以下离线指标来评估检索方法。
Top-k
定义为在给定 query
的 N
个(我们使用 N = 1024
)随机 item
中,相关的 item
在 top-k
检索结果中的概率。这个 top-k
值是通过平均 20
万个随机 query
来计算的。更高的 top-k
表示更好的检索质量,即命中率 hit rate
。AUC
是在一个独立的数据集中计算的,其中人工标记了 query-item
相关性。label
为相关的、不相关的,然后 embedding
内积或者任何相关性得分(BM2.5
)可以被视为预估分。更高的 AUC
代表更好的检索相关性。time
是在 48-cores CPU
机器上从 query
文本到 1500
万个 item
中最相关的 1000
个 item
的总检索时间。该指标决定了一种方法能否应用于工业级检索系统。通常,cutoff
时间是 50ms
,但是最好是 20ms
。baseline
方法:我们将 DPSR
和 BM2.5
、DSSM
等 baseline
进行了比较。
BM2.5
:是一种基于倒排索引关键词匹配的经典信息检索方法,它使用启发式方法根据 term
频率和逆文档频率对文档进行评分。我们比较了 BM2.5
的两个版本:仅 unigram
、同时包含 unigram
和 bigram
(记作 BM2.5-u&b
)。DSSM
:是一个经典的深度学习模型,为 ranking
而不是检索而设计。我们仍然将它作为 baseline
进行比较。另外我们还对比了 DPSR
的几个变体:
DPSR
是指我们模型的普通版本,没有任何用户特征。DPSR-p
指的是我们模型的basic
个性化的版本,包含额外的用户画像特征,如购买力、性别等。DPSR-h
指的是我们模型的完整个性化版本,包含用户画像和用户历史 event
。DPSR
和上述 baseline
方法的比较结果如下表所示,可以看到:
BM2.5
作为一种经典方法表现出了良好的检索质量,但是从 1500
万个 item
中检索需要 1
分多钟,这意味着将其用于在线检索不太现实。item
作为负样本进行采样的 DSSM
在 top-k
、MRR
、AUC
等指标上表现最差。这主要是因为 DSSM
针对 ranking
任务进行优化,而 ranking
任务是与检索任务截然不同的任务。因此,我们可以得出结论:仅使用曝光未点击的 item
作为负样本并不能训练检索模型。DPSR
在 baseline
方法和其它个性化的 DPSR
版本中具有最高的 AUC
得分,这表明纯语义 DPSR
可以获得最高的检索相关性。basic
个性化版本的 DPSR-p
方法的结果表明:用户画像特征有助于改善普通版本的检索质量指标(top-k
),但是在相关性方面有所折衷。DPSR-h
在所有模型中具有最佳检索质量指标(top-k
),这表明可以从用户历史事件中提取大量信号。 注意:个性化的模型通过权衡相关性指标(AUC
)来提高检索质量指标(top-k
),这是合理的。因为检索质量除了相关性之外还包含更多因素,如item
流行度、个性化等。
下图说明了随机负样本和 batch
负样本的混合比率 影响检索到的 item
流行度。可以看到:
item
就越多(Popularity
指标)。item
的相关性(AUC
指标)。因此,我们可以将 参数视为检索流行度popularity
和相关性relevancy
之间的 tradeoff
。在实践中我们发现适当的 或 将有助于显著提升在线指标。
DPSR
被设计为我们搜索系统中的一个关键组件,以改善整体用户体验。因此,我们将重点放在 DPSR
作为附加检索方法,从而对搜索系统的整体改进上。
baseline
)中,包含我们当前生产系统中可用的所有候选item
,这些item
通过启用了 query rewritten
的基于倒排索引的方法进行检索。DPSR
)中,除了 baseline
中的候选item
之外,还从我们的 DPSR
系统中检索了最多 1000
个候选 item
。对照组和实验组都通过相同的 ranking
组件和业务逻辑。在这里,我们强调我们的生产系统是一个强大的 baseline
来进行比较,因为这个系统已经经过数百名工程师和科学家多年的优化,并应用了最先进的 query rewriting
和文档处理方法来优化候选 item
的生成。
我们首先对检索到的 item
的相关性进行了人工评估。具体而言,给定相同的 500
个长尾 query
,我们要求人工评估员分别为来自于 baseline
系统、DPSR
系统的结果来标记相关性。标记结果分为三个类别:差bad
、一般 fair
、完美 perfect
。
评估结果如下表所示,可以看到:DPSR
减少了大约 6%
的 bad case
从而提高了搜索相关性。这证明了深度检索系统在处理 difficult
或者 unsatisfied
的 query
时特别有效,这些 query
通常需要语义匹配。
然后我们使用标准的 A/B test
,在两周内对整个站点流量的 10%
进行了在线实验。为了保护商业机密,我们只报告了相对的提升,实验结果如下表所示:
DPSR
检索改进了电商搜索中所有核心业务指标,包括用户转化率user conversation rate: UCVR
、gross merchandise value: GMV
、query rewrite rate: QRR
(query
重写率,这被认为是搜索满意度的一个很好的指标)。query
塔的 2-head
版本和个性化版本(记作 1-head-p13n
)都改进了没有任何用户特征的 1-head query
塔的普通版本。query
,这对于传统搜索引擎而言通常很难。我们在下表中展示了我们的离线索引构建和在线最近邻搜索的效率,不包括 query embedding
计算。我们报告了使用 NVIDIA Tesla P40 GPU
和 Intel 64-core CPU
配置下索引和搜索 1500
万个 item
所消耗的时间。
结果表明 DPSR
可以在 CPU
上在 10ms
内检索候选 item
,并且可以从 GPU
中受益:索引时间消耗减少 85%
、搜索延迟减少 92%
、query per second: QPS
吞吐量提高 14
倍。
我们在下表中报告了使用上述相同 CPU
和 GPU
机器的整体模型 serving
性能。从 query
文本到 1000
个最近邻的总延迟可以在 15ms ~ 20ms
内完成,这甚至可以与标准倒排索引的检索相媲美。
推荐系统在面向用户的电商平台(如淘宝、亚马逊)中很重要,目的是将用户连接到他们喜欢的 item
并产生更多利润。由于电商平台中可用的 item
数量巨大,许多工业系统被设计为具有 matching
阶段和 ranking
阶段。具体而言:mathcing
阶段期望以低延迟和低计算成本检索一小部分相关的 item
,而 ranking
阶段旨在使用更复杂的模型根据用户的兴趣细化这些相关 item
的排名。在论文 《Path-based Deep Network for Candidate Item Matching in Recommenders》
中,论文聚焦于 matching
阶段,因为它是系统的基础部分,也是系统的瓶颈。
item-to-item CF
(即 item-based CF
)是一种用于 item matching
的信息检索解决方案。item-based CF
根据两个 item
的共现co-occurrence
来估计item
之间的相关性。一些突出的优点使得 item-based CF
成为业界matching
阶段的自然选择:
item
进行检索,因此 item-based CF
可以很好地匹配许多在线服务的效率要求。item
,可以最大限度地覆盖用户的兴趣。item
之间的相关性主要是基于海量的用户行为推导出来的。这些信号能够有效识别与交互item
相关的item
。但是,这些方法也有一定的局限性:
subtle
的个性化需求。通过仅考虑item
共现模式,item-based CF
无法适应用户的独有特点,如性别、消费能力等。item
数量不断增长,在不考虑辅助信息的情况下,item-based CF
可能会受到数据稀疏性问题的影响。为了克服上述限制,embedding-based retrieval: EBR
,尤其是双塔架构的深度学习网络,最近引起了越来越多的兴趣。简而言之,EBR
旨在通过分别嵌入用户画像和 item
画像来表示每个用户和每个 item
。从这个意义上来说,matching
过程被转移到在 embedding
空间中执行最近邻nearest neighbor: NN
搜索。
虽然 representation learning
可以在一定程度上缓解数据稀疏性问题,但是这些方法也存在一定的局限性:
item
之间的共现信息。embedding
向量,这不足以编码用户兴趣的多样性diversity
。即:
item-based CF
难以满足个性化personalization
,而EBR
难以满足多样性diversity
。
一个普通用户每个月都会与数百个属于不同类目的 item
进行交互,这表明用户兴趣的多样性。实际上,在实际的工业系统中,为了同时捕获用户兴趣的多样性diversity
并确保个性化personalization
,通常有多种策略,例如基于协同过滤模型和不同网络结构的 EBR
策略的各种倒排索引。这些模型应用于 matching
任务并且并行部署。注意:候选 item
通常是使用不同 scale
的相关性得分生成的。这些得分通常不可比incomparable
,因此很难融合起来从而得到更好的结果。作者认为,由于这些策略的高维护成本以及缺乏联合优化,因此这种多策略解决方案可能是次优的。
Deep Interest Network: DIN
通过 target attention
引入交互item
和 target item
之间的相似性,以获得更好的推荐。然而,这种注意力机制只是用来融合用户交互序列,而忽略了用户对每个交互item
的兴趣。此外,DIN
很难应用于 matching
阶段,因为它需要为每个 target item
重新计算 user representation
。
受到 DIN
的启发,在论文 《Path-based Deep Network for Candidate Item Matching in Recommenders》
中,作者提出了一种新的matching
架构,叫做 Path-based Deep Network: PDN
。该架构通过在 item-based CF
和 EBR
之间建立联系,将 item-based attention
和 user representation learning
分离。
在 PDN
中,作者使用 EBR
(即用户画像、交互item
序列、item
画像)和 item-based CF
(即 item
共现)的representation learning
思想来适应用户个性化和多样化的兴趣建模,从而获得更好的性能。具体而言,PDN
由两个主要的子网组成:Trigger Net: TrigNet
、Similarity Net: SimNet
。
TrigNet
通过以下方式被引入:将每个交互item
视为一个trigger
来编码用户兴趣。也就是说,生成的 user representation
具有可变维度,使得每个维度都描述了用户对交互 item
的兴趣。
维度 代表用户对交互
item
的兴趣强度。
类似于 item-based CF
,SimNet
生成 item representation
,每个维度描述交互item
和 target item
之间的相似性。
维度 代表交互
item
和target item
的相似性。
注意,由 EBR
提取的 user representation
和 item representation
的维度是恒定的,而 PDN
提取的 user representation
和 item representation
的维度是可变的,等于用户 trigger
的数量。如下图所示,通过用户交互item
将用户和 target item
连接起来,我们可以形成一系列 2-hop
路径。基于这些 2-hop
路径,PDN
通过显式考虑用户的不同兴趣来聚合用户和 target item
之间的相关性,从而获得更好的性能。具体而言,用户和 target item
之间的最终相关性是通过显式考虑用户的不同兴趣来计算的,即聚合 related two-hop
路径的相关性权重relevance weight
(路径的 one-hop
对应于 user-item
交互,路径的 two-hop
对应于 item-item
相关性)。
另一个优点是整个模型都是端到端的方式训练的,因此,相关性得分可以以统一的方式相互比较。
值得强调的是,所提出的 PDN
具有 item-based CF
和 EBR
的优点,可以实现高效的在线处理。
feature embedding
,我们可以利用 TrigNet
提取与用户兴趣相关的 top m
最重要的 trigger
,以满足实时性要求。SimNet
独立于 TrigNet
工作。我们可以应用并行计算支持离线索引构建,其中使用 SimNet
计算的 item-to-item
相关性。总之,论文的主要贡献:
matching
模型。论文通过结合 item-based CF
和 EBR
的优势提出了 Path-Based Deep
Network: PDN
。PDN
以 2-hop
路径聚合的形式集成了user attention
的所有画像信息、以及 target attention
的 item
共现模式。PDN
考虑了用户个性化和兴趣多样性,从而实现更好的 item matching
。PDN
构建了一个工业级的在线 matching
系统。特别地,论文描述了如何利用 PDN
以低延迟和低计算成本进行 item
检索。PDN
比现有替代方案实现了更好的性能。此外,论文在淘宝推荐系统上对 PDN
进行了为期两周的 A/B test
。结果表明:几乎所有指标都获得了很大的性能提升。目前 PDN
系统已经成功部署在手机淘宝 App
上,处理了主要的在线流量。
相关工作:
CF-based
方法在构建推荐系统的 mathcing
阶段相当成功。item-based CF
由于其可解释性和高效,已经被广泛应用于工业环境中。其中, item-based CF
预先计算 item
的相似度矩阵,并推荐与用户历史点击item
相似的 item
。
早期的工作利用余弦相似度和皮尔逊系数等统计量来估计 item
相似性。近年来,有几种方法试图通过优化 recommendation-aware
目标函数来学习 item
相似性。
SLIM
通过最小化原始 user-item
交互矩阵和重构矩阵之间的损失来学习 item
相关性。NAIS
使用注意力机制来区分用户画像中历史互动 item
的不同重要性,这和 DIN
的想法相似。然而由于计算的复杂性,attention-based
方法仅适用于 ranking
阶段。随着 EBR
的成功,基于深度神经网络的双塔架构已经被广泛应用于工业推荐系统,从而通过利用丰富的内容特征来捕获用户的个性化信息。需要注意的是,在 matching
阶段,要以低延迟和低计算成本处理数十亿甚至数万亿个 item
,因此两个塔不能相互交互以确保特征提取的并行性。
DSSM
的模型利用用户特征和 item
特征之间的内积学习相关性。Youtube DNN
通过平均池化用户行为来扩展用户特征。BST
利用强大的 transformer
模型来捕获用户行为序列背后的序列信号。与上述方法不同的是, 我们提出的 PDN
结合了 item-based CF
和 EBR-based
深度神经网络的优点,构建了 user-item
子网络以确保类似于 EBR
的个性化,并构建了 item-item
子网络类似于 item-based CF
从而捕获用户的多个兴趣。
下图以用户和 target item
之间的 2-hop
路径的形式总结了推荐问题。其中 到 代表交互item
。边的粗细表示了相关性程度。这里:
id
、年龄、性别、点击次数、每个类目的购买次数。target item
的信息,如 item id
、品牌 id
、类目 id
、月销售额。item
的信息。item
上的行为信息,如停留市场、购买次数。item
和 target item
的相关性信息,这是从 item-based CF
算法或者 item co-occurrence-based pattern
统计而来。如下图所示,用户和 target item
之间存在直接联系(虚线所示),这表明用户对 target item
的直觉的兴趣 intuitive interest
。此外,我们可以通过连接交互 item
来进一步形成 条 2-hop
路径:第一跳表示用户对交互 item
的兴趣,第二跳表示交互 item
对 target item
之间的相关性。因此,采用上述的可用信息,item matching
可以形式化为:
其中: 定义为推荐算法, 定义为用户 和 target item
之间的相关性得分, 为用户 历史交互的 item
集合。
推荐系统的大部分现有工作,包括 item-based CF
和 EBR
,可以看作是上式的特例。
item-based CF
的回归形式regression form
可以表述为:
其中:
trigger
的兴趣。 为行为特征向量的维度。item co-occurrence
信息的、交互 item
和 target item
的相关性。因此,该方法可以视为基于 和 的所有 2-hop
路径的权重之和,并且每个路径权重可以计算为 。
EBR-based
方法中的矩阵分解 matrix factorization: MF
可以表述:
其中:
target item
信息 的 embedding
向量。item
信息 的 embedding
向量。embedding
向量。MF
可以视为 条路径的权重之和。具体而言:一条1-hop
路径的权重为 ,n
条 2-hop
路径的权重为 。
YoutubeDNN
利用深度神经网络作为矩阵分解的推广,可以表述为:
这里 MLP
是一个多层感知机,||
表示向量拼接。
DIN
也可以表述为:
其中 为逐元素乘法。
注意,根据 target item
和每个 trigger
之间的相关性,DIN
可以被视为 2-hop
路径( )的 representation
。但是,它需要重新计算每个 target item
的 path representation
,使得DIN
仅适用于 ranking
阶段。
为了保证检索效率,item-based CF
构建倒排索引inverted index
,而 EBR
应用 KNN
搜索进行在线 serving
。然而,由于两种模型体系结构都受到效率的限制,它们无法利用上图中的所有可用信息,从而导致性能欠佳。例如,item-based CF
缺少用户画像和 item
画像,而 EBR
缺少 item
之间的显式共现信息。因此,在本文中我们提出了一种叫做 PDN
的新型架构,从而支持低延迟的个性化和多样性检索。
在这一部分,我们介绍了用于推荐系统 matching
阶段的 Path-based Deep Network: PDN
的设计。我们首先介绍 PDN
的整体架构,然后详细阐述 PDN
的各个模块,包括 Embedding Layer
、Trigger Net: TrigNet
、Similarity Net: SimNet
、Direct Net
、Bias Net
。
根据公式 ,PDN
的基本工作流程可以表述为:
其中:
TrigNet
、SimNet
是前面提到的两个独立的子网络。trigger item
的 2-hop
路径的相关性权重。Merge(.)
是合并每条 2-hop
路径中相关性权重的函数。direct path
相关性权重relevance weight
的函数。Agg(.)
为一个评分函数,用于对 条路径(一条1-hop
路径、 条 2-hop
路径)的相关性权重求和得到用户和 target item
的最终相关性得分。为了使 PDN
能够执行快速的在线 item
检索,我们首先将 Agg
定义为1-hop
相关性权重和2-hop
相关性权重的 summation
,然后 也被定义为 user representation
和 target item representation
之间的内积。因此,PDN
的最终形式为:
PDN
的整体架构如下图所示(该图最好用彩色观看):
Direct Net
用于获取 1-hop
路径的权重从而捕获用户对 target item
的直观兴趣。TrigNet
和 SimNet
分别获取每条 2-hop
路径的第一跳权重和第二跳权重,从而捕获细粒度的、针对用户的个性化和多样性的兴趣。Bias Net
用于捕获各种类型的选择偏差selection bias
从而进一步提供无偏 serving
。注意:在每条 2-hop
路径中,当 TrigNet
和 SimNet
的输出为向量时,它们可以被视为对应边的 representation
,称之为 vector-based PDN
。这种 setting
可能具有更高的模型容量,并且使得在线检索更加复杂。另一方面,当 TrigNet
和 SimNet
的输出为标量时,它们可以被视为对应边的权重,称之为 scalar-based PDN
。和 vector-based PDN
相比, scalar-based PDN
具有较低的自由度,可以减轻基于路径检索的贪心策略在线检索的复杂性。因此,接下来我们介绍了 PDN
的每个组件,以及 scalar-based PDN
的设置。
整个
PDN
模型分为三部分:
Direct Net
:直接建模用户和target item
之间的相关。这相当于没有用户历史行为、没有上下文的双塔模型。
Bias Net
:根据上下文建模不同上下文情况下的bias
。它独立建模上下文,而没有联合user representation
和item representation
。这降低了模型复杂度。
Trigger Net & Similarity Net
:直接建模用户历史行为和target item
之间的相关性。这里没有用户画像特征、没有上下文特征。
Trigger Net
建模trigger
重要性,得到user representation
为 ,其中 为用户 在trigger
(即item
)上的重要。该representation
大多数情况下都是零,只有在历史行为item
上才可能非零。Similarity Net
建模item
之间相似度,得到target item representation
为 ,其中 为item
和target item
之间的相似度。Merge
给出如何融合 和 从而得到用户 和target item
之间的相关性。这里存在一个问题:如何迫使模型的子结构预期工作,例如
Direct Net
学到user-item
直接相关性、Trigger Net
学到trigger
重要性。这里是否应该增加某些正则化,使得模型朝着预期方向进行优化。
特征组合Feature Composition
和 Embedding Layer
:如上图所示,我们的推荐系统中有四个特征字段feature field
:用户字段 、用户行为字段 、item
共现字段 、item
字段 (以及交互 item
集合 也是用的 item
字段)。 这些字段包括 one-hot
特征(如用户id
、item id
、年龄 id
、品牌 id
),也包括连续特征(如月销售额、停留时长、item
之间的统计相关性)。
one-hot
特征。one-hot
特征投影到固定长度的 dense representation
中。embedding
之后,我们拼接属于同一个字段的 embedding
向量作为该字段的 representation
。形式上,用户字段、用户行为字段、item
共现字段、item
字段的 field representation
可以写作: ,其中 为相应字段的 embedding
维度。
Trigger Net
和 Similarity Net
:经过 embedding layer
之后,我们计算用户和 target item
之间每条 2-hop
路径的相关性权重。
对于第一跳,我们利用 TrigNet
通过计算每个 trigger
的偏好来捕获用户的多种兴趣。具体而言,给定用户 及其 trigger item
,偏好得分计算为:
其中 为用户embedding
、用户行为 embedding
、交互 item embedding
的拼接。 代表用户 对交互 item
的偏好。
当存在 个不同的交互 item
时, 可以视为用户 的可变维度的 representation
。EBR-based
方法采用一个固定维度的 representation
向量来表示用户兴趣,这可能是捕获用户不同兴趣的瓶颈,因为所有关于一个用户不同兴趣的信息混合在一起,导致 matching
阶段的 item
检索不准确。与使用固定维度向量对用户 representation
进行编码的 EBR-based
方案相比, 显式描述了用户对每个交互 item
的偏好,可以更好地表达用户的多样化diverse
兴趣并且更具有可解释性。
值得一提的是,TrigNet
可以使用其它更强大的神经网络,例如Recurrent Neural Network: RNN
和 transformer-based
的模型来建模用户行为。不过我们想强调,一个简单的MLP
对我们的工业系统而言更具有性价比cost-effective
。
一种直觉是:转化
trigger
要比点击trigger
更重要、转化多次的trigger
要比转化一次的trigger
更重要、转化长尾trigger
要比转化热门trigger
更重要。注意,这里的trigger
既可以是正向的(点击/购买)、也可以是负向的(不感兴趣/快滑),包含用户所有的历史行为。因此,这里通过
TrigNet
自动从用户embedding
、用户行为embedding
、交互item embedding
中抽取trigger
重要性。
对于第二跳,我们利用 SimNet
根据 item
画像和共现信息来计算每个交互 item
和 target item
之间的相关性:
其中 为交互item embedding
、共现 embedding
、target item embedding
的拼接。 为 item
和 item
之间的相关性。
这里的共现很重要:基于什么共现准则?点击共现、还是购买共现、还是不感兴趣共现?个人理解这和任务目标有关。如果任务是点击率预估,那么这里就是点击共现,从而捕获在点击意义下的
item pair
相关性。
当存在 个不同的交互 item
时, 可以视为 target item
的可变维度的 representation
。
我们强调 SimNet
基于item
共现信息co-occurrence information
和辅助信息 side information
来显式地学习相关性。从这个意义上讲,它可以独立地部署从而进行 item-to-item
检索。
一种直觉是:共现次数越高的
item pair
相似度越高、同类目的item pair
相似度更高、同店铺的item pair
相似度更高。
这相当于将
DIN
中的行为embedding
attention
聚合拆分为TrigNet + SimNet
。
在得到 和 之后,PDN
将它们合并从而得到每个 2-hop
路径的相关性权重 ,即:
这个
Merge
函数有两个特点:确保非负;将相关性乘积转换为加法操作,从而方便在线serving
。
Direct Net
:我们进一步使用另一组 user embedding
和 item embedding
在更广的范围内建模用户的一般兴趣general interest
。例如,女性对连衣裙更感兴趣,而男性对腰带更感兴趣。这可以被认为是将用户直接连接到 target item
的 1-hop
路径。因此,我们利用由用户塔和 item
塔组成的直接网络direct network
。
具体而言,这两个塔分别通过基于用户字段 和 target item
字段 的MLP
(采用 LeakyReLU
激活),从而得到用户 representation
和 item representation
。然后 direct path
的相关性权重可以表述为:
其中 为用户 和 target item
之间的直接相关性direct relevance
。
Bias Net
:位置偏差 position bias
和许多其他类型的选择偏差 selection bias
被广泛研究,并验证为推荐系统中的一个重要因素。例如,用户通常倾向于点击靠近列表顶部显示的 item
,即使它不是整个语料库中最相关的 item
。
为了在模型训练期间消除选择偏差,我们训练了一个浅层塔,其输入特征有助于selection bias
,例如位置偏差的位置特征position feature
、时间偏差temporal bias
的小时特征 hour feature
。得到的偏差 logit
被添加到主模型的最终 logit
中,如上图所示。
注意,在 serving
期间,bias net
被移除从而得到无偏的相关性得分。
损失函数Loss Function
:用户 是否会点击 target item
可以视为一个二分类任务。因此,我们将 个路径的相关性权重和 bias logit
合并,得到 和 之间的最终相关性分数,并将其转换为用户点击概率 :
注意,softplus
函数使得相关性分数 的取值范围在 之间,因此我们将其转换为 0.0 ~ 1.0
之间的概率值。
为了训练模型,我们应用交叉熵目标函数:
其中: 是 ground-truth
,表示用户 是否点击 item
。
讨论:为了确保 PDN
的训练能够收敛到一个更好的最优值,我们仔细设计了每条路径的相关性权重。如前所述,我们利用 而不是其它激活函数来将输出约束为正值(即 和 ),从而实现每条 2-hop
路径权重的合并。这种将输出限制为正值的处理是直观的,并且符合现实世界的合理性。
即: 。
注意,相关性权重本质上可以为负值(即负相关),但是这可能允许 PDN
在更广泛的参数空间中搜索局部最优值,这很容易导致过拟合。在下图中,我们通过允许相关性权重为负来说明两个bad cases
。
在图 (a)
中,当一个 negative target
(label = unclick
)被两个完全不相关的 trigger
连接时,SimNet
可能会为一条路径生成一个正的相关性权重,并为另一条路径生成一个负的相关性权重。聚合后,点击概率仍然很低,即与 ground-truth
完美匹配。
因为 。
但是很明显,牛奶不能和手机产生postive
的相关性。这意味着SimNet
产生了过拟合。
在图 (b)
中,TrigNet
也可以学习对 trigger
的negative
偏好,从而过拟合数据。
在这一部分,我们详细描述了 PDN
在淘宝上进行item
推荐的实现和部署。当用户打开手机淘宝 App
时,推荐系统首先会从包含多达数十亿个 item
的语料库中为该用户检索数千个相关的 item
。然后,每个检索到的 item
都通过 ranking
模型进行评分,并将根据评分排序的item
列表作为推荐给用户展示。
在线检索Onling Retrieval
:如前所述,matching
阶段需要处理数十亿甚至数万亿个item
。为了满足在线实时 serving
,不可能利用 PDN
对所有可用 item
进行评分。基于 PDN
的架构,很直观的一点是 ,路径相关性权重越大,用户对 item
感兴趣的可能性就越大。因此,matching
问题可以看作是在用户的 2-hop
邻域中检索具有较大路径权重的 item
节点。
如下图所示,我们通过贪心策略以路径检索的形式实现了在线实时 top-K
最近邻检索。具体而言,我们将路径检索分解为两个部分:
TrigNet
的 top-m
重要的 trigger
搜索(第一跳)。SimNet
生成的索引对每个 top-m trigger
执行 top-k item
搜索(第二跳)。对于 TrigNet
,我们将模型部署在实时在线服务中,用于用户 trigger
的打分。对于 SimNet
,我们使用该模型以离线方式计算和索引 item
相关性。
详细而言,PDN
的在线检索可以概括为:
索引生成(第一步):基于 SimNet
,离线生成语料库中每个 item
的 top-k
最相似的 item
,并与相关性得分 一起存储在数据库中。
trigger
提取(第二步):当用户打开手机淘宝 App
时,我们取出用户交互的所有item
,并利用 TrigNet
得到用户所有的 trigger
的评分 ,并返回 top-m trigger
。
top-k
检索(第三步):我们从这些 top-m trigger
开始查询数据库并获得总共 个候选 item
。在移除 bias feature
的情况下,返回 top-k item
进行推荐:
注意:
representation
,这两种 representation
也可以离线推断并存储在数据库中。在执行在线服务时,可以直接根据user id
或者 item id
来查询它们。top -m
个 trigger
(训练时使用 n
个);推断时评分函数使用简化的 、基于加法操作的Merge
函数(训练时使用复杂的、基于对数操作的 Merge
函数)。索引生成Index Generation
:对于具有大型 item
语料库的工业系统,我们需要压缩 item
相关性的稠密矩阵,即 ,从而减少索引构建时间成本和存储成本。即使这个过程可以离线完成,计算所有 的 item pair
对的相关性成本太高,所以我们首先根据候选生成 candidate generation
将 降低到 ,其中 要比 大一个量级。压缩操作主要包括三个步骤:
item pair
对生成:我们主要从两种策略生成 item pair
对:一种基于共现信息,例如在同一个session
中点击的 item
;另一种基于 item
的画像信息,例如同一个品牌。从这个意义上讲,历史没有共现的、但是具有一些相似属性的 item pair
对也可以被视为候选。item pair
对排序:我们使用 SimNet
提取每个 item pair
对的相关性得分 。item
,我们获取 top-k
相似的 item
组成 的 item pair
对,同时 也一并存储在数据库中。值得一提的是, SimNet
可以独立地用于索引,因此也可以用于 item-to-item
检索。
对每个
item
基于SimNet
生成top k
相似的item
非常关键。如果对全量item
库进行计算,那么每个item
需要调用SimNet
次,全量计算需要调用SimNet
次,即使是离线计算也不现实。为此,需要根据先验知识,挑选出可能相关的item
进行打分。
PDN
和已有的 SOA
方案进行离线和在线的对比,包括消融研究、模型分析、案例研究。数据集:我们在三个公开的真实数据集上进行实验:MovieLens
、Pinterest
、Amazon books
。这三个数据集的统计数据如下表所示。按照 《Neural collaborative filtering》
的设置,我们仅保留至少有 20
次交互的用户。关于这三个数据集的预处理的更多细节,参考 《Neural collaborative filtering》
,我们不再赘述。
评估方式:为了评估 PDN
的性能,我们采用了留一法来评估。对于每个用户,最后一次交互作为 target item
,而之前的交互 item
作为用户行为集合。具体而言,我们遵循惯例,在每个 test case
中使用所有negative items
,并在这些 negative items
中对 target item
进行排序。
我们使用命中率 Hit Ratio: HR
和 Normalized Discounted Cumulative Gain: NDCG
作为性能指标。在这里 HR
可以解释为基于召回的指标, NDCG
可以解释为基于 ranking
的指标。
baseline
方法:我们将 PDN
与以下双塔方法和传统的 item-based CF
方法进行比较。为了确保公平地比较,超参数调整是通过网格搜索进行的,每种方法都用最佳超参数进行测试。
双塔方法如下:
DSSM
:DSSM
使用 embedding
来表示用户和 item
。相关性得分是基于 user representation
和 item representation
之间的内积来计算。Youtube DNN
:Youtube DNN
利用用户的交互序列来得到user representation
。它平等地对待用户历史行为中的每个交互 item
,并采用均值池化来提取用户的兴趣。BST
:BST
扩展了 Youtube DNN
,通过利用 transformer layer
来捕获用户对历史行为序列的短期兴趣。我们使用 user representation
和 item representaiton
的内积,而不是 MLP
。item-based CF
方法如下:
Pearson-based CF: PCF
:这是标准的 item-based CF
,它根据皮尔逊系数估计 item
相关性。SLIM
:SLIM
通过最小化原始 user-item
交互矩阵和从 item-based CF
模型重建的矩阵之间的损失来学习 item
相关性。ranking
方法如下:
DIN
:DIN
利用 target attention
来提取用户交互序列和 target item
之间的关系。三个公共数据集上HR@10
和 NDCG@10
的实验结果如下表所示。所有实验重复 5
次并报告平均结果。最佳结果以粗体突出显示。对 baseline
方法的提升在 0.05
水平上具有统计显著性。
Personalise
是指输出的得分考虑了用户信息,例如 PDN
和 EBR-based
方法。值得注意的是,CF
无法得到个性化的分数,因此用 -
表示。Item to Item
指的是基于交互 item
和 target item
之间的相关性检索。具体而言,item
相似度的获取策略是基于 item-based CF
、SimNet
的输出、EBR
方法获取的 item embedding
之间的内积。显然,在大多数数据集下,PDN
优于所有比较方法。我们观察到:
对于个性化检索(Personalise
),DSSM
在双塔方法中表现最差,这表明基于用户行为捕获用户兴趣对于推荐系统至关重要。
BST
的性能优于 YouTube DNN
,这是因为 transformer layer
通过考虑用户行为中的序列信息来提取用户的兴趣。
PDN
实现了最佳性能,主要是因为这些双塔方法用一个固定维度的向量来表示每个用户,这是对不同兴趣进行建模的瓶颈。相比之下,PDN
利用 TrigNet
提取多兴趣的用户representation
,每个维度都以细粒度的方式描述了用户对交互item
的兴趣。SimNet
在得到 item
和 target item
之间的相似性方面也很有效。因此,可以通过考虑用户对 target item
的潜在兴趣来估计更准确的相关性。
在线部署时,我们采用 SimNet
代替item-based CF
来估计 item-to-item
相似性。因此,我们和 item-to-item
进行了对比(即下表中带有 Item to Item
的列)。
SimNet
在所有Item to Item
方法中表现最好。原因是 SimNet
基于深度神经网络,通过集成双塔方法使用的 item
画像、以及item-based CF
使用的共现信息,显式优化了 item
之间的相似性。这种方式利用更多的信息来解决 CF
遇到的稀疏性问题。
PDN
比 DIN
表现更好。我们认为 DIN
忽略了用户对交互 item
的注意力(而仅考虑 target item
对交互 item
的注意力),而 PDN
同时考虑了 user attention
和 item attention
从而获得更好的个性化推荐。
基于消融研究,PDN
产生了最佳性能,并且确认每个组件对最终效果都有贡献。
A/B test
:除了离线研究,我们还通过在淘宝推荐系统中部署我们的方法从而进行为期两周的在线 A/B test
实验。
baseline
)中,包含了我们当前生产系统中的所有matching
策略。SimNet
而不是 item-based
方法来构建倒排索引。为了公平地比较,在两个 matching
阶段之后都采用相同的 ranking
组件和业务逻辑。注意:在线指标给出的是相对提升,即:
下表给出了淘宝上的在线 A/B test
实验提升,为期两周:
下图给出了 PDN
每一天各种指标的在线提升,为期一周:
可以看到:
PDN
改进了电商推荐系统的所有核心业务指标,包括页面点击率 page click-through rate: PCTR
、用户点击率 user click-through rate: UCTR
、每个用户点击量 clicks per user: ClkPU
、平均session
时长 average session duration: avgSD
,以及多样性diversity
。
这些都被认为是推荐满意度recommendation satisfaction
的良好指标。其中多样性指标代表了覆盖的类目数量。尤其是个性化的多样性对于现有的生产系统而言通常是比较难的,而 PDN
大幅度增加了推荐item
的多样性,这说明 PDN
可以通过 TrigNet
和 SimNet
来捕获用户的多样化兴趣,提升整体的用户体验。
此外,我们还部署了 SimNet
来验证它可以独立地用于构建索引,而不是基于 item-based CF
,从而进行 item-to-item
检索。这也获得了性能的提升。
在线效率:这里我们报告在线serving
的效率。具体而言,从请求到候选生成candidate generation
的整体延迟可以在 6.75ms
内完成,即 queries per second: QPS
是在千级别,这与使用标准倒排索引的检索相当。基于巨大的性能提升和低延迟,我们将 PDN
部署到线上,从而服务于淘宝推荐系统的 matching
阶段。
用户行为序列长度分析:基于淘宝离线日志训练得到的模型,我们研究了用户行为序列长度 对性能的影响。我们根据 对用户进行分组。
如下表所示,我们发现 越小增益越大。评估指标为 HR@300
,括号中的百分比表示相对于 BST
的提升。
该结果表明:PDN
对 具有较强的鲁棒性,即使在用户行为序列稀疏的情况下也能获得优异的性能。
如下图所示,我们发现随着 的增加,PDN
生成的候选的多样性逐渐增加,并且显著优于 BST
。
这些结果表明:PDN
能够以细粒度的方式捕获用户的个性化和多样化兴趣,从而改善用户体验。
SimNet
的多样性diversity
和准确性accuracy
:
为了验证 SimNet
的有效性,我们分别利用 SimNet
和 item-based CF
提供的相似性,利用相同的 trigger item
执行 item-to-item
检索。返回结果的相似性从左到右递减。
如下图所示,通过形状像猫的玩偶来检索,SimNet
返回相似的猫形玩偶和印有猫爪图案的杯子,而 item-based CF
返回月销量高但是和猫无关的玩偶(例如狗形玩偶)。这个结果表明:SimNet
可以在不受交互次数(即 item
销量)干扰的情况下检索更相关和更多样的结果,而 item-based CF
会遭受 “马太效应”的影响,这引入了对热门item
的偏好的bias
。换句话说,item-based CF
仅基于 item co-occurrence
信息计算相似性,而我们的方法额外引入了更多信息,如 item
画像、用户画像、用户行为,从而实现更准确的 item
相似性估计。
为了进一步验证基于 SimNet
的 item
相似性的可靠性,我们选择一批类目,然后每对类目随机选择 1000
个 item pair
对,并基于在线 serving
的 SimNet
构建的倒排索引计算它们的平均相似度。如下图所示:
item
具有更高的相似性。vs
童装” 还是 “电子产品 vs
家电”,都要比其它类目 pair
对具有更高的相似度。TrigNet
的个性化和有效性:
在公共数据集上,我们基于 TrigNet
来探索用户对 item
的兴趣。如下图所示,user-to-item
的 trigger
权重分别在 postive item
和 negative item
上取平均。很明显,postive item
的权重高于 negative item
的权重。这个结果说明了 TrigNet
的合理性。
为了验证 TrigNet
的个性化能力,我们随机选择了 1000
名男性和 1000
名女性,从几个类目中随机选择了 500
个 item
,然后基于在线 serving
的 TrigNet
对所有 user-item pair
对进行评分,得到男性和女性之间的平均 trigger
权重的差异。如下图所示,我们可以发现 TrigNet
对性别的处理是不同的,从而准确反映用户特点。例如,男性更喜欢电脑、汽车和手表,女性更喜欢花卉、旅游和女鞋。
POI
推荐是基于位置的社交网络中的一项重要任务,它有助于建模用户和位置之间的关系。
最近,学者根据长期兴趣和短期兴趣推荐 POI
并取得成功。长期兴趣是通过用户历史到店来获得,短期兴趣是通过最近到店来建模的。这些兴趣通过编码器网络(例如 LSTM
)来编码。然而,它们未能很好地捕获到周期性的兴趣。人们倾向于在相似的时间或相似的地域访问相似的门店。因此,只有一小部分到店与用户的下一次到访行为高度相关。因此,到店序列作为输入会弱化相关部分的信号。
有一些方法试图通过建模周期性来解决这个问题:
DeepMove
应用当前的移动状态mobility status
来捕获所有到店的周期性。LSTPM
使用 time slot
计算时序相似性temporal similarity
从而获得时间加权的轨迹表达time-weighted trajectory representation
。但是,这些方法在学习周期兴趣方面仍然能力有限。
到店上下文,例如空间信息spatial information
、时间信息temporal information
,可以用于建模周期兴趣。
daily pattern
和小时级别模式hourly pattern
。例如,一些用户可能只在周末去度假,另一些用户会在晚上去餐馆。areal pattern
。例如,用户在景区参观古迹、在商圈附近购物。POI
,这就是 小时-区域级别的模式hourly-areal pattern
。例如,很多人八点钟去公司上班。而 DeepMove
和 LSTPM
等之前的方法在学习周期性时并没有充分利用时空信息。
受上述分析的启发,论文《ST-PIL: Spatial-Temporal Periodic Interest Learning for Next Point-of-Interest Recommendation》
提出了一个时空周期兴趣学习网络 Spatial-Temporal Periodic Interest Learning network: ST-PIL
。具体而言,ST-PIL
采用长短期兴趣学习的架构,但是充分利用时空上下文中从历史到店中检索到相关的部分,从而获得周期性兴趣。
intra-level attention
来得到长期兴趣。inter-level attention
自动融合多个兴趣。主要贡献:
相关工作:这里简要回顾一下近期关于 POI
推荐的一些研究并总结了差异。
长期兴趣和短期兴趣的结合最近备受关注,并取得了 state-of-the-art
。
DRCF
通过协同过滤捕获长期兴趣,并通过 RNN
添加短期兴趣。STGN
通过设计时空门 spatial-temporal gates
来修改 LSTM
从而提升兴趣。Deep-Move
应用 RNN-based
方法来捕获短期规律,并设计一个历史注意力模块从而利用用户状态的移动周期性mobility periodicity
。LSPL
和 PLSPL
使用 attention layer
来获得长期兴趣,并使用 LSTM
对近期的连续行为进行建模从而获得短期兴趣。LSTPM
使用各种技术得到的所有轨迹来捕获长期兴趣,例如:周期性的时间加权操作、用于捕获短期兴趣的 LSTM
和 geo-dilated LSTM
。之前的这些工作和我们的研究之间的差异是明显的。以前的工作通常从有限的粒度(例如 time slot
)中捕获周期性,而我们充分利用时空上下文,并设计有效的注意力操作来自动结合combine
。
已知条件:
POI
集合 ,类目集合 。POI
都有一个类目 。POI
都有一个经纬度,我们使用 geohash-5
编码,得到 geohash
编码集合 。每个 POI
都对应于一个 geohash
编码。24
小时,即 。给定用户的所有历史到店序列 ,以及用户当前的时空信息(即 ),我们预估用户可能到店的 top-k POI
。
这里要求获取用户的实时地理位置,即用户当前位置和门店
POI
匹配。
Long-Term Module
:使用周几的时间上下文查找用户的天级别模式daily pattern
,并使用注意力机制来建立长期兴趣。
天级别模式旨在捕获用户的天级周期性,从周一到周日。
首先,构建七组掩码:第 组掩码表示用户历史到店序列中,每个行为是否是周 k
产生的。
例如,第一组掩码:[1,1,0,0,1,0,...0]
,这表示历史到店序列第一个行为、第二个行为、第五个行为都是周一产生的。
接下来,我们用每一组掩码和到店序列进行逐元素相乘(从而得到周 k
的行为序列),然后通过均值池化以及一个全连接层(这个全连接层在周一...周日之间共享),从而得到周 k
的天级别 embedding
。
我们得到七个天级别 embedding
,记做 。
我们创建一个 query
来获取 attention
,第 个 query
由候选 POI
和已知上下文 的拼接组成:
其中每个 POI
都可以作为候选,但是只有一个是 positive
的,并且这里的 ID
都转换为 embedding
向量。
然后我们通过 Bahdanau attention
来聚合 :
其中 都是attention
的参数。
Short-Term Module
:用于捕获基本序列模式和上下文感知(例如hourly
周期性 、areal
周期性、hourly-areal
周期性)。
在第 次 到店,假设我们有当前的时间槽 time slot
、有 area
。我们构建四条序列:
5
个到访 POI
。捕获序列模式 Sequential Pattern
。geohash=47
的 5
个到访 POI
。捕获 Areal Pattern
。22
点、23
点、或24
点)的 5
个到访 POI
。捕获 Hourly Pattern
。geohash=47
的、相同或相近小时(22
点、23
点、或24
点)的 5
个到访 POI
。捕获 Hourly-Areal Pattern
。每个序列都暗含某种行为模式,对于每个序列,我们使用 LSTM
来捕获用户对应 pattern
的兴趣:
Inter-level Attention
:用于获取用户最终的兴趣。
在当前时刻 ,我们有五个兴趣: 。其中, 捕获长期的天级兴趣,其它四个捕获短期的兴趣。我们使用 Bahdanau attention
来获取用户最终的兴趣:
其中 为attention
权重。
然后我们拼接所有的兴趣,得到最终的用户兴趣 representation
:
这里有几点注意:
query
和各个兴趣添加了一个 dropout layer
,从而避免在计算注意力权重之前过拟合。pattern
时,我们通过加权拼接来聚合他们,从而保留独特的模式。softmax
来改善重要模式的表达能力。Prediction Layer
:我们将 和 进行拼接,然后馈入 MLP
。
模型的输出为交叉熵:
其中 N
为所有候选POI
(在所有候选里,只有一个 positive
)。
模型整体架构如下图所示。
数据集:两个公开的、真实的数据集,来自于 NewYork city: NYC
和 Tokyo: TKY
。 每个到店包含:用户 ID
、POI ID
、类目ID
、经度、纬度。
数据处理:删除到店人数少于 5
的 POI
,并且对每个用户保留他/她最近的 500
个到店。
评估方式:留一法,每个用户保留最近一次的到店作为测试集,剩余的到店用户训练集和验证集。然后从用户未到店的 POI
中挑选 20
个作为负样本。评估指标为 Acc@k
、MRR@k
。
评估结果:
ST-PILL
:只有长期兴趣的 ST-PIL
模型。 ST-PILS
:只有短期兴趣的 ST-PIL
模型。
ST-PIL
明显优于其它方法。ST-PILS
优于 ST-PILL
,而 ST-PIL
是最好的。这表明同时融合长期兴趣和短期兴趣的价值。长期模块的 attention
研究:att-qk
表示长期模块 attention
且包含 query
,att-k
表示长期模块 attention
但是不包含 query
,seq-avg
表示长期模块不使用注意力而是取均值。
L
表示仅使用长期模块而没有短期模块,L+S
表示同时使用长期模块和短期模块。
结论:带 query
的注意力机制效果最佳。
短期模块的四种兴趣研究:依次采用不同的短期兴趣组合,从而评估这些短期兴趣的效用。
S2
)和时空周期性(S4
)优于其它两个,表明它们的影响力强于序列效应和时间周期性。也就是,当用户选择某个区域的 POI
时,他/她更可能去之前访问过的 POI
。ST-PILS
的整体性能优于任何单个短期兴趣。此外,当我们逐渐增加四个短期兴趣时,效果越来越好。这表明这些兴趣是互补的。未来工作:设计更加自动化的方法来代替构建不同序列的预操作。