SIM:基于搜索的用户兴趣建模

简介

点击率估计在推荐系统和广告系统中起着至关重要的作用。随着用户行为数据的快速增长,用户兴趣模型被广泛的应用与推荐系统。用户兴趣模型专注于学习用户兴趣的意图表示。受计算和存储资源的限制,大部分的兴趣模型只能利用用户少量近期的历史行为数据,数量在几百个左右。然而有证据已经证明利用更多的历史行为数据是具有巨大价值的。比如淘宝23%的用户在5个月内点击的物品超过了1000。实际可行的利用用户长期行为序列数据的方案是目前开放和热门的研究主题。

很多研究工作借鉴NLP领域的思想,提出采用记忆网络建模用户长期行为序列数据,取得一些突破。比如阿里提出的MIMN模型,通过训练算法和服务系统的综合设计实现了SOTA。MIMN是第一个能够建模长度达到1000以上的用户历史行为序列数据的工业级解决方案。MIMN增量式的将每个用户的多样的兴趣嵌入到一个固定大小的矩阵中,并通过用户的新行为进行更新。通过这种方式,MIMN将用户兴趣建模的计算量与点击率的估计任务解耦。因此在线服务的时候,服务延迟不会有问题,内存损耗也只依赖于矩阵的大小,相比原始的行为数据要小得多。类似的思想也出现在长期兴趣建模【10】中。然而基于内存矩阵的方式建模任意长度的用户序列行为数据存在很大挑战的。实际上我们发现当用户行为序列继续增大,比如达到10000以上时,给定候选物品后模型无法准确捕捉用户兴趣。原因是将所有的用户兴趣建模到一个固定的矩阵中时,将包含很多的噪音信息。

DIN模型指出在面对不同的候选物品时,用户的兴趣是不同的且变化的。DIN的核心思想是从用户行为序列数据中搜索有效信息建模用户在面对不同候选物品时的特定兴趣。这种方式可以克服将所有用户兴趣建模到固定参数中的问题。DIN通过用户数据的建模,确实很大程度提升了点击率建模任务的效果。但是DIN兴趣搜索的方式在面对特别长的用户行为数据时,会有很大的计算和存储的开销。因此,我们是否可以应用一种简单的搜索技巧,设计一种更高效的从用户行为序列数据中提取知识的方法呢?

为了解决这个问题,我们设计了一种新的模型范式,命名为SIM(Search-based Interest Model)。 SIM采用DIN的思想,针对选定候选物品相关的用户兴趣建模。SIM模型通过级联的两个单元提取用户兴趣:1)通用搜索单元(GSU)使用特定候选物品中提取的查询信息,在原始的、任意长度的用户行为数据中进行搜索,得到一个与特定候选物品相关的用户行为子序列(SBS)。为了满足耗时和计算资源方面的苛刻要求,GSU采用了通用但高效的方法。我们的经验来看,用户的行为数据会被减少到数百个,原始行为序列中的大部分噪音信息会被过滤掉。2)精搜索单元(ESU)建模候选物品与SBS间的准确关系。这里可以很容易采用DIN和DIEN提出的方法。

我们的主要贡献分为三个方面

  • 我们提出了SIM模型范式,两阶段的搜索架构在面对用户历史行为序列数据时具有更强的扩展性和准确性
  • 我们介绍了在大规模工业级系统中实现SIM的经验。2019年开始SIM被部署到阿里的系统中,CTR提升了7.1%,RPM提升了4.4%。目前SIM承载了主要的流量
  • 我们将用户历史行为序列数据扩展到了54000,是MIMN模型的54倍

相关工作

用户兴趣模型:基于深度模型的方法在点击率估计任务中取得的重大的成功【1,11,18】。早期的大部分工作【1,4,7,9,15】采用深度网络学习不同特征间的交互信息,将工程师从枯燥的特征工程工作中解脱出来。近期的一系列工作,我们称之为用户兴趣模型,专注于从用户历史行为数据中学习潜在用户兴趣的表示,采用的神经网络结构包括CNN【14,17】、RNN【5,19】、Transformer【3,13】、Capsule【6】。DIN强调用户的兴趣是多样的,并采用注意力机制捕捉面对不同候选物品时用户的不同兴趣点。DIEN指出行为数据时序关系对建模用户不断迁移变化的兴趣至关重要。MIND提出单一向量不足以表示用户的多样兴趣。MIND采用胶囊网络和动态路由机制学习用户兴趣的多向量表示。受到序列映射学习中自注意力机制的启发,Transformer被用于建模用户会话内和会话间的兴趣。

长期用户兴趣:【8】显示用户长期历史行为序列可以显著提升CTR模型的效果。更长的用户历史行为序列给点击率预估任务带来了更多的有用信息,同时极大的增加了在线服务系统的延迟和存储负担,也引入的大量的噪音。很多研究工作专注于解决长期用户兴趣建模的问题,通常采用的方式是基于更多的甚至是全部的历史行为信息建模。【10】提出了一种分级周期记忆网络,通过行为序列模式的个性化记忆,为每个用户提供全量行为数据的建模。【16】基于注意力机制的框架结合用户的长、短期偏好,通过非对称的SVD方式建模长期兴趣。【8】提出了一种基于记忆的架构,命名为MIMN,将用户的长期兴趣嵌入到固定网络中,克服了用户行为数据存储的问题。UIC模块被设计用于增量记录用户行为数据,解决延迟问题。但是MIMN的记忆网络抛弃了目标候选物品的信息,这部分信息被证明是对用户兴趣建模非常重要的信息。

建模用户行为数据,已经被证明对点击率模型有效。典型的基于注意力机制的模型,包括DIN、DIEN,设计复杂的模型结构,采用注意力机制,用不同候选物品作为输入,从用户历史行为序列数据中搜索有用的信息,建模用户多种多样的兴趣。现实中这些模型只能处理较短期用户行为序列数据,通常不超过150个。然而用户的长期行为数据是很有价值的,建模长期兴趣兴趣可以给用户带来更多样的推荐结果。我们似乎处于一个两难的困境:现实系统中我们没有有效的方法处理富含价值的全量用户行为数据。

为了解决这个问题,我们提出了一种新的模型结构,命名为SIM。SIM采用两阶段的搜索策略,能有效的处理长期用户行为序列数据。

整体架构

SIM的整体流程如图1所示,SIM采用级联的两阶段策略,相应的包含两个处理单元:通用搜索单元和精确搜索单元。

第一阶段,通用搜索单元在次线性时间复杂度内从原始的行为序列中搜索相关的TopK个子行为序列。通常K会远远低于原始行为序列的长度。如果可以在时间和计算资源的限制下搜索相关行为,则可以执行一种有效的搜索方法。3.2节中我们提供了两种GSU的实现方法:soft-search和hard-search。GSU采用通用且高效的方式缩短原始行为序列数据的长度,满足延迟和存储方面的严格限制,同时可以过滤掉原始行为数据中可能伤害兴趣模型的噪音信息。
SIM:基于搜索的用户兴趣建模

图1:SIM模型包含两个阶段,由两个处理单元组成。1)通用搜索单元从原始数以万计的用户行为中搜索TopK相关的行为。2)精确搜索单元采用multi-head注意力机制建模用户多样兴趣。然后采用经典的Embedding&MLP范式,将建模的用户兴趣和其他输入一起作为后续网络的输入。本文中卫GSU提出了soft-search和hard-search两种方法。hard-search方式是搜索原始行为中与目标候选物品同一类的物品行为。soft-search方式指的是采用embedding向量为用户行为建立索引,并采用最大化向量内积的方式搜索TopK用户行为。soft-search方式下,GSU和ESU共用embedding向量,embedding向量随着学习的过程一期训练。TopK相关的行为采用最新的embeding向量产生。

第二阶段:精搜索阶段,以过滤后的子行为序列为输入,精确捕捉用户兴趣。由于行为序列数据已经显著减少,这里可以采用成熟的复杂的模型,比如DIN、DIEN等。

需要注意的是虽然我们分开介绍了GSU和ESU单元,实际上二者的训练是一期进行的。

给定候选物品(点击率模型的目标物品),只有一部分用户行为数据是有价值的。这部分行为对用户的决策举足轻重。挑选出这部分物品对用户兴趣建模大有裨益。然而使用全量行为数据直接建模用户兴趣会造成巨大的资源消耗和耗时上升,通常在实际的应用中不可接受。因此我们引入通用搜索单元,压缩用户行为序列数据的的长度。我们分别介绍hard-search和soft-search两种方式。

通用搜索单元(GSU)

给定用户历史行为序列 B = [ b 1 , b 2 , . . . , b T ] \bold{B}=[\bold{b}_1,\bold{b}_2,...,\bold{b}_T] B=[b1​,b2​,...,bT​].其中 b i \bold{b}_i bi​表示用户第i个行为数据, T T T表示行为序列的长度。GSU计算每一个行为数据 b i \bold{b}_i bi​关于目标候选物品的分数 r i r_i ri​,选取分数TopK个行为作为子行为序列 B ∗ \bold{B}^* B∗,输入到精搜索阶段,hard-search与soft-search的区别在于分数的计算公式不一样。

r i = { S i g n ( C i = C a ) , h a r d − s e a r c h ( W b e i ) ⊙ ( W a e a ) T , s o f t − s e a r c h r_i= \begin{cases} Sign(C_i=C_a), & hard-search\\ (W_b\bold{e}_i)\odot(W_a\bold{e}_a)^T, & soft-search \end{cases} ri​={Sign(Ci​=Ca​),(Wb​ei​)⊙(Wa​ea​)T,​hard−searchsoft−search​

Hard-search是非参数的,只有与目标物品属于同一品类的历史行为才会被选中,输入到精确搜索单元。计算公式中 C i , C a C_i,C_a Ci​,Ca​分别表示行为数据 b i \bold{b}_i bi​和目标物品所属的品类。Hard-search比较直接,但在第四节中可以看到这种方式十分适合线上预估。

Soft-search方式中,用户行为数据 b t \bold{b}_t bt​首先经过one-hot编码,然后嵌入到低维向量空间,得到低维向量表示形式 E = [ e 1 , e 2 , . . . , e T ] \bold{E}=[\bold{e}_1,\bold{e}_2,...,\bold{e}_T] E=[e1​,e2​,...,eT​],如图1所示。公式中 W b , W a W_b, W_a Wb​,Wa​表示权重参数。为了优化搜索TopK行为数据的效率,满足次线性时间复杂度的搜索最大内积算法ALSH被引入。通过充分训练的embeding和最大内积搜索算法,数以万计的用户行为被压缩到几百个。

需要注意的是长期行为数据与短期行为数据的分布不一样,soft-search模型中直接采用短期兴趣模型的参数,可能会误导长期兴趣模型。如图1所示,本文中soft-search模型通过一个ctr预测辅助任务训练,采用的是长期兴趣数据。行为表示 U r \bold{U}_r Ur​的计算方式为:

U r = ∑ i = 1 T r i e i \bold{U}_r=\sum_{i=1}^Tr_i\bold{e}_i Ur​=∑i=1T​ri​ei​

行为表示 U r \bold{U}_r Ur​和候选物品 e a \bold{e}_a ea​拼接后,输入到后续MLP网络。如果全量行为数据达到一定的规模,无法直接全量输入到模型中,可以从原始数据中进行采样,采样后的数据分布于原始数据分布一致。

译者注:soft-search方式中,原文将 W b , W a W_b,W_a Wb​,Wa​简单介绍为权重参数,表达的含义比较模糊。结合和 U r \bold{U}_r Ur​的计算公式,可以看出这里是其实是一种简化后的注意力网络, e a \bold{e}_a ea​为query, e i \bold{e_i} ei​既是key,也是value, r i r_i ri​为权重。

r i = a i = F ( e a , e i ) = ( W b e i ) ⊙ ( W a e a ) T r_i = a_i = F(\bold{e}_a, \bold{e}_i)=(W_b\bold{e}_i)\odot(W_a\bold{e}_a)^T ri​=ai​=F(ea​,ei​)=(Wb​ei​)⊙(Wa​ea​)T

U r = ∑ i = 1 T F ( e a , e i ) e i U_r=\sum_{i=1}^TF(\bold{e}_a,\bold{e}_i)\bold{e}_i Ur​=i=1∑T​F(ea​,ei​)ei​

可以看出这里的注意力权重 a i a_i ai​没有做归一化。当 W b , W a W_b,W_a Wb​,Wa​为单位矩阵时,则权重函数 F F F为标准的内积函数。当 W b , W a W_b,W_a Wb​,Wa​为一般矩阵是,则权重函数 F F F为一般形式的函数,分别将query和key向量做空间映射后进行相似度计算。参考以下常见的权重计算函数:

F ( Q , K i ) = { Q T K i , 内 积 Q T W K i , 一 般 形 式 W [ Q , K i ] , 拼 接 v T t a n h ( W Q + U K i ) , 感 知 器 F(Q,K_i)= \begin{cases} Q^TK_i, & 内积\\ Q^TWK_i, & 一般形式\\W[Q,K_i], &拼接\\v^Ttanh(WQ + UK_i),&感知器\\ \end{cases} F(Q,Ki​)=⎩⎪⎪⎪⎨⎪⎪⎪⎧​QTKi​,QTWKi​,W[Q,Ki​],vTtanh(WQ+UKi​),​内积一般形式拼接感知器​

精确搜索单元(ESU)

第一个阶段生成了关于候选物品最相关的TopK个用户行为数据 B ∗ \bold{B}^* B∗。第二个阶段以 B ∗ \bold{B}^* B∗作为输出,采用基于注意力机制的方式建模用户兴趣。

考虑到 B ∗ \bold{B}^* B∗是从相当长的一段时间区间内搜索得来的,因此对决策的共享度不一样。我们为每个行为数据引入序列时间特征。用候选物品与行为数据的时间间隔提供时间距离信息,表示为 D = [ Δ 1 , Δ 2 , . . . , Δ T ] \bold{D}=[\Delta_1,\Delta_2,...,\Delta_T] D=[Δ1​,Δ2​,...,ΔT​]. B ∗ , D \bold{B}^*,\bold{D} B∗,D分别embedding表示为 E ∗ = [ e 1 , e 2 , . . . , e T ] , E t = [ e 1 t , e 2 t , . . . , e T t ] \bold{E}^*=[\bold{e}_1,\bold{e}_2,...,\bold{e}_T],\bold{E}_t=[\bold{e}_1^t,\bold{e}_2^t,...,\bold{e}_T^t] E∗=[e1​,e2​,...,eT​],Et​=[e1t​,e2t​,...,eTt​]. e j ∗ , e j t \bold{e}_j^*,\bold{e}_j^t ej∗​,ejt​拼接后作为用户行为数据的表示,标记为 z j = c a o n c a t ( e j ∗ , e j t ) \bold{z}_j=caoncat(\bold{e}_j^*,\bold{e}_j^t) zj​=caoncat(ej∗​,ejt​).我们利用multi-head注意力机制建模用户多种兴趣:

a t t s c o r e i = S o f t m a x ( W b i z b ⊙ W a i e a ) att_{score}^i=Softmax(W_{bi}\bold{z}_b\odot W_{ai}\bold{e}_a) attscorei​=Softmax(Wbi​zb​⊙Wai​ea​)

h e a d i = a t t s c o r e i z b head_i=att_{score}^i\bold{z}_b headi​=attscorei​zb​

其中 a t t s c o r e i att_{score}^i attscorei​表示第 i i i个注意力得分, h e a d i head_i headi​表示第 i i i个head。最终用户的长期多兴趣表示为 U l t = c o n c a t ( h e a d 1 , h e a d 2 , . . . , h e a d T ) U_{lt}=concat(head_1,head_2,...,head_T) Ult​=concat(head1​,head2​,...,headT​).输入到后续的MLP网络。

最终,通用搜索单元和精确搜索单元采用交叉熵损失函数同时进行训练:

L o s s = α L o s s G S U + β L o s s E S U Loss=\alpha Loss_{GSU} + \beta Loss_{ESU} Loss=αLossGSU​+βLossESU​.

其中 α , β \alpha,\beta α,β为控制损失权重的超参。我们的实验中如果GSU采用soft-search,则 α , β \alpha,\beta α,β都设置为1,如果GSU采用非参数形式的hard-search,则将 α \alpha α设置为0。

上一篇:多项式杂谈 #1


下一篇:高等代数复习笔记 常见证明