微信在《Deep Feedback Network for Recommendation》提出了DFN。

摘要

显式与隐式反馈可以影响关于items的用户意见,这对于学习用户偏好来说是必要的。然而,大多数当前的推荐算法主要关注于隐式正反馈(implicit positive feedbacks: 例如:click),忽略了其它有信息的用户行为。在本paper中,我们的目标是:联合考虑explicit/implicit以及positive/negative feedbacks来学习用户的无偏偏好。特别的,我们提出了一种新的Deep feedback network(DFN)来建模click、unclick和dislike行为。DFN具有一个内部feedback interaction组件,它可以捕获用户行为间的细粒度交叉(fine-grained interactions),一个额外的feedback interaction组件可以使用精准但相对少的feedbacks(click/dislike)来从丰富但带噪声的feedbacks(unclick)中抽取有用信息。在实验中,我们在wechat top stories的推荐系统上,对数百万用户做了实验。DFN带来了极大的提升。源代码为:https://github.com/qqxiaochongqq/DFN

1.介绍

个性化推荐系统的目标是,为用户根据它们的偏好提供定制的items。它们在视频和电商业被广泛使用。

推荐系统中大量使用user-item interactions来进行个性化。这些重要的信息主要有两大类:显式反馈(explicit feedback)和隐式反馈(implicit feedback):

  • 显式反馈(explicit feedback)来自于用户对items的直接意见(比如:评分、like/dislike等)。它可以很精准地表示用户的真实偏好,而收集这样的feedback相当不容易。
  • 隐式反馈(implicit feedback)主要来自于具有暗示非直接意见的用户行为(例如:click或unclick)。在真实推荐系统中,很容易从大量用户行为中收集这样的隐式反馈。隐式反馈(implicit feedbacks)会混杂着许多其它内在的noises,以及少量的真实负反馈,这会损害学习用户的无偏偏好.

最近,推荐系统通常会将个性化推荐看成是一个CTR预测任务。因此很自然地,大多数推荐算法主要关注于隐式正反馈(点击),这在实际中很容易获取。这些模型会直接使用点击行为和CTR目标进行最优化,它会产生以下的问题:

  • 首先,CTR目标的objectives通常关注于:用户喜欢什么,忽略掉用户不喜欢什么。简单依赖于这些隐式正反馈(implicit positive feedbacks)会使得模型趋向于提供均匀的(homogeneous)、短视(myopic)的结果,这会伤害用户体验。因此,negative feedbacks应在推荐中被考虑
  • 第二,除了被动地接受由模型选中的信息外,用户也需要有效和高效的反馈机制来激活与推荐系统的交互。再者,由于用户的implicit feedbacks与它的真实偏好(点击并不总是意味着喜欢)间存在gap。它也证实了explicit feedbacks的必要性。

多个explicit/implicit和positive/negative feedbacks可以互补,并影响用户的无偏偏好。有一些工作:使用隐式反馈和显式反馈的CF(Liu 2010)、多任务学习(Hadash 2018)。然而,这些工作中,negative feedbacks通常会被忽略,或者只存在显式反馈(这很精准、但量很少)。一些工具会考虑unclick或missing行为作为隐式负反馈来乘上负信号(negative signals)。不幸的是,在这些隐式负反馈(implicit negative feedbacks)中的noises会严格限制效果表现,因此,这些隐式负反馈会由许多除了dislike之外的原因造成。

图片名称

图1

。。。

2.相关工作

。。。

3.方法

我们的目标是,将多个explicit/implicit和positive/negative feedbacks进行联合考虑来学习用户无偏偏好。特别的,我们提出了DFN模型,它会收集用户历史行为中的三种类型的feedbacks:

  • 隐式正反馈(implicit positive feedbacks):implicit positive feedbacks是在大规模推荐中被广泛使用的feedbacks,它在量级和质量上均比较满意。根据大多数conventional模型,我们考虑点击行为序列 \(\lbrace c_1, \cdots, c_{n_1}\rbrace\)作为在DFN中使用的implicit positive feedback。
  • 显式负反馈(explicit negative feedbacks):Explicit feedbacks是高质量的,但在真实推荐中很少。我们会使用与每个item相关的dislike按钮来收集explicit negative feedback序列 \(\lbrace d_1, \cdots, d_{n_2}\rbrace\)
  • 隐式负反馈(implicit negative feedbacks):我们会将曝光未点击(impressed but unclick)的行为序列\(\lbrace u_1, \cdots, u_{n_3}\rbrace\)作为implicit negative feedbacks。这种未点击行为在所有feedbacks类型中占绝大多数,而它会与噪声和false-negative信号相混杂。

CFN尝试使用高质量的click和dislike behaviors作为instructors来从未点击行为中抽取有用信息。在DFN中很容易添加其它类型的feedbacks

3.1 整体架构

Deep feedback network主要包含两个模块,称为:deep feedback interaction模块与feature interaction模块。首先,deep feedback interaction模块会采用多个feedbacks作为inputs,使用内部和外部的feedback interactions来抽取用户无偏的positive和negative偏好。第二,refined feedback features会与其它有信息特征(比如:user profiles、item features以及contexts)进行组合。我们会实现Wide、FM和Deep组件来进行特征聚合(feature aggregation)。最终,feature interaction模块的outputs会feed给full connected和softmax layers来进行positive和negative losses的模型最优化。图2(a)展示了DFN的整体架构。

图片名称

图2

3.2 DFN module

图2(b)中的deep feedback interaction模块会采用对于target item的implicit positive(click),explicit negative(dislike)以及implicit negative(unclick) feedbacks作为inputs。我们会使用两个components来从inside和between不同类型的feedbacks的交叉中进行学习。

Internal Feedback Interaction Component

对于一个特定类型的feedback,该component会关注target item和individual behaviors间的交叉。我们会根据Vaswani[2017]的行为使用一个multi-head self-attention。所有的行为特征包含了它们的item embeddings和position embeddings,会被投影到一个联合语义空间(joint semantic space)中来形成behavior embeddings。以点击行为为例,我们会将target item t与点击序行的behavior embeddings进来组合来形成输入矩阵 \(B_c = \lbrace t, c_1, \cdots, c_{n_1} \rbrace\)。query, key, value矩阵可以通过如下进行计算:

\[Q = W^Q B_c, K=W^K B_c, V=W^V B_c\]

…(1)

其中,\(W^Q, W_K, W^V\)是投影矩阵。我们接着通过下面方式计算self-attention:

\[Attention(Q, K, V) = softmax(\frac{Q^T K}{\sqrt{n_h}}) V\]

…(2)

其中,\(n_h\)是query、key、value的维度。总共h个multi-heads的第i个head可以通过如下进行计算:

\[head_i = Attention(W_i^Q Q, W_i^K K, W_i^V V)\]

…(3)

\(W_i^Q, W_i^K, W_i^V \in R^{n_k \times n_k / h}\)是第i个head的weighting矩阵。self-attention的最终输出矩阵是:

\[F_c = concat(head_1, \cdots, head_h) \cdot W^O\]

…(4)

\(W_O \in R^{n_h \times n_h}\)是投影矩阵。最终,我们通过在\(F_c\)中所有n+1的output embeddings上进行一个average pooling来生成implicit positive feedback embedding \(f_c\):

\[f_c = Average_pooling(F_c), f_c \in R^{n_h}\]

…(5)

我们也会使用相同的带type-specific hyper-params的transformer来生成explicit negative feedback embedding \(f_d\)以及从dislike和unclick behaviors中的implicit negative feedback embedding \(f_u\)。internal feedback interaction component可以很好地捕获在每种类型的feedback序列中target item和behaviors的behavior-level interactions。它可以提供与target item相关的user positive和negative偏好。

External Feedback Interaction Component

隐式负反馈(implicit negative feedbacks)是够多的,但有非常noisy。总之,unclick behaviors看起来暗示着negative signals,而曝露给用户的items则需通过特定策略进行选择,它也会包含来自粗粒度的用户兴趣。external feedback interaction组件的目标是,根据在click和dislike行为上的强反馈,来区别用户在未点击行为(unclick behaviors)上的真实喜欢(like)和不喜欢(dislike)。特别的,我们通过两个vanilla attentions,它会考虑隐式正反馈和隐式负反馈的embeddings \(f_c\)和\(f_d\)作为instructors来指导来自unclick序列\(u_1, \cdots, u_{n_3}\)。我们将unclick-dislike interaction embedding \(f_{ud}\)使用dislike和unclick行为公式化:

\[f_{ud} = \sum\limits_{i=1}^{n_3} \alpha_i u_i, \alpha_i = \frac{f(f_d, u_i)}{\sum_{j=1}^{n_3} f(f_d, u_j)}\]

…(6)

其中,weighting score function \(f(a,b)\)定义如下:

\[f(a, b) = MLP(concat(a, b, a-b, a\odot b))\]

…(7)

我们将\(\odot\)看成是element-wise product,并使用一个2-layer Multi-layer perceptron (MLP)。\(f_d\)包含了user的强的negative偏好,它从与target item相关的显式负反馈(explicit negative feedbacks)进行重定义得到。它会帮助vanilla attention来抽取用户真实dislike和unclick行为的items。我们也会使用隐式正反馈(implicit positive feedback)的embedding \(f_c\)来放大在unclick行为中positive的声音。

\[f_{uc} = \sum\limits_{i=1}^{n_3} \beta_i u_i, \beta = \frac{f(f_c, u_i)}{\sum_{j=1}^{n_3} f(f_c, u_j)}\]

…(8)

最后,我们将所有5种feedback features组合来构建最终的refined feedback feature \(f_{Feed}\):

\[f_{Feed} = \lbrace f_c, f_d, f_u, f_{uc}, f_{ud}\rbrace\]

…(9)

隐式正反馈与显式负反馈\(f_c\)和\(f_d\)被看成是强的positive和negative信号,而其余unclick-related feedbacks则被看成是弱信号(weak signals)。

3.3 Feature Interaction Module

在feature interaction中,我们将refined feedback feature与其它features(包括:user profiles、item features、以及context)进行refined。根据Guo[2017],我们将这些sparse features进行group到m个fields中 \(\lbrace x_1, \cdots, x_m \rbrace\)包括:continuous fields(例如:age)和categorical fields(例如:location)。所有的fields被表示成one-hot embeddings。一个lookup table被用于生成所有fields的dense feature:\(\lbrace f_1, \cdots, f_m \rbrace\)。我们为feature interaction实现了Wide, FM以及Deep components。

Wide Component

Wide component是一个泛化的linear model,它在推荐中被广泛使用。Wide component \(y^{Wide}\)的output是一个m-dimensional的vector,其中,第i个element被计算成:

\[y_i^{Wide} = w_i^T x_i + b_i, w_i, x_i \in R^{n_{f_i}}\]

…(10)

\(w_i\)是第i个one-hot fields embedding \(x_i\)的weighting vector,\(b_i\)是bias,\(n_{f_i}\)是\(x_i\)的维度。

FM Component

FM component会捕获所有features间的二阶交叉。FM的input embeddings是所有dense features的组合,最终的refined feedback feature为:\(F' = \lbrace f_1, \cdots, f_m, f_{Feed}\rbrace\)。我们根据Bi-interaction layer,并根据下面方式生成output embedding \(y^{FM}\):

\[y^{FM} = \sum\limits_{i=1}^{m+5} \sum\limits_{j=i+1}^{m+5} f_i^' \odot f_j^', f_i^', f_j^' \in F'\]

…(11)

Deep component

在Deep component中,我们实现了一个2-layer MLP来学习高阶feature interactions。input是dense features和feedback features的concatenation,可以表示成:\(f^{(0)} = concat(f_1, \cdots, f_m, f_{Feed})\)。我们有:

\[y^{Deep} = f^{(2)}, f^{(i+1)} = ReLU(W^{(i)} f^{(i)} + b^{(i)})\]

…(12)

其中,\(f^{(i)}\)是第i个layer的output embedding。\(W^{(i)}\)是weighting matrix,\(b^{(i)}\)是第i个layer的bias。

最终,我们从三个components中将所有outputs进行concat起来来生成aggregated feature embedding y:

\[y = concat(y^{Wide}, y^{FM}, y^{Deep})\]

…(13)

3.4 Optimization Objective

我们使用click、unclick以及dislike行为来进行监督训练。预测的点击概率与aggregated feature embedding y通过下式计算:

\[p(x) = \sigma(w_p^T y)\]

…(14)

\(w_p\)是weighting vector,\(\sigma(\cdot)\)是sigmoid function。DFN的loss function包含了三个部分:click、unclick、dislike行为:

\[L = -\frac{1}{N} (\lambda_c \sum\limits_{S_c} log p(x) + \lambda_u \sum\limits_{S_u} log(1 - p(x)) + \lambda_d \sum\limits_{S_d} log(1-p(x)))\]

…(15)

该训练集具有N个实例,分组成:click set \(S_c\),dislike set \(S_d\)以及unclick set \(S_u\)。\(\lambda_c, \lambda_d, \lambda_u\)是不同losses的weights来measure不同feedbacks的重要性。

4.实验

参考

JD在《Category-Specific CNN for Visual-aware CTR Prediction at JD.com》提出了CSCNN:

1.介绍

JD领先的广告系统,会服务数百万广告主(advertisers)与数十亿顾客(customers)相连。每天,顾客会访问JD,点击ads并留下数十亿的交互日志。这些数据不仅会反馈给到学到的系统,但也会增强技术演进提升用户体验。

在常见的CPC广告系统中,广告会通过eCPM进行排序,商品的竞价通过advertisers给出,广告系统则会预测CTR。精准的CTR预测对商业效果和用户体验有用。因而,该topic在机器学习界和工业界被广泛关注。

大多数广告会使用图片进行展示,因为它们具有更多的视觉展示,并对于文本描述能传达更丰富的信息。一个有意思的现象是,许多广告通过切换更吸引人的图片会获得更高的CTR。对于CTR预测,这驱使了关于提取更丰富可视化特征的许多研究。这些算法会采用现成的(off-the-shelf)的CNNs来抽取可视化特征,并将它们与非可视化的特征(non-visual features:比如:category, user)进行混合来进行最终CTR预测。有了额外的可视化特征,这些算法在离线实验上可以远胜过无可视化的模型,并可以泛化到冷门和长尾ads上。在实际在线广告系统中使用CNN仍然是non-trival的。使用CNN进行offline end-to-end训练必须足够有效遵循随时间变化(time-varying)的在线分布,online serving需要广告系统的满足低时延要求。

另外,我们注意到,在电商中的可视化特征抽取与图片分类的setting有大不同。在分类任务中,categories会被看成是要预测的target。而在电商系统中,广告的categories会被明显地进行标记,它包含了丰富的可视化先验信息,可以帮助进行可视化建模。一些学术研究通过在CNN embeddings的top之上[7]构建category-specific投影矩阵进行集成,并将可视化features显式解耦成styles和categories。这些研究会共享一个公共的架构:visual和categorical knowledge的late fusion,然而,它对于CTR预测来说是sub-optimal。也就是说,image embedding模块很少会利用categorical knowledge。如果不知道ad category,通过这些CNNs抽取的embedding会包含与该category不相关的不必要features,从而浪费CNN的有限表达能力。相反,如果该ad category被集成其中,CNN只需要关注category-specific patterns,它会减轻训练过程

为了克服工业挑战,我们会同时为有效的end-to-end CNN training和低时延在线服务构建优化的基础设施。基于该有效地基础设施,为了充分利用电商中的labeled category,我们为CTR预测任务特别提出Category-specific CNN (CSCNN)。我们的关键思想是,以一个early-fusion的方式将category知识插入到CNN中。受SE-net、以及CBAM的启发,它会使用一个light-weighted self-attention模块来建模convolutional features间的相互依赖,CSCNN会进一步吸收ad category知识,并执行一个category-specific feature recalibration,如图2所示。更明显地,我们会接着使用category-specific channel和spatial attention modules来强调重要的以及与category相关的features。这些丰富的可视化特征对于CTR预测问题来说有巨大的效果增益。

总之,我们有以下的贡献:

  • 据我们所知,我们是在visual-aware CTR预测中首个对visual和non-visual features的late fusion的负面影响进行强调的。
  • 我们提出了CSCNN,为CTR预测特别设计了一个新的visual embedding模块。关键思想是组织category-specific channel和spatial self-attention来强调重要并且与category相关的特征。
  • 我们通过大量离线实验、以及AB test验证了CSCNN的有效性。我们验证了许多self-attention机制的效果,以及network backbones通过插入CSCNN来进行一致性提升。
  • 我们构建了高度有效地基础设施在real online电商广告系统中来使用CNN。在一天内100亿规模的真实产品数据集上,引入有效加速方法来对CNN完成end-to-end training,并满足在线系统的低时延需求(在CPU上20ms)。CSCNN已经被部署在JD的搜索广告系统中。

2.相关工作

2.1 CTR预测

2.2 CNN中的attention机制

attention机制是一个重要的feature selection方法,它可以帮助CNN来强调feature maps的重要部分,并抑制不重要的部分。spatial attention会告诉你关注where,而channel-wise attention则告诉你focus在what上。

在文献中,许多工作尝试从feature map中学习attention weights,称为“self-attention”。SOTA的算法称为CBAM, SE。除了self attention外,attention weights可以有额外的信息为条件,例如自然语言。成功应用的领域包括:language、image captioning以及可视化问答。

我们的工作受attention机制的启发。而非vision & language,我们设计了新的架构来使用attention机制来解决一个重要但长期忽略的问题:对于vision和non-vision feature的sub-optimal late fusion。我们同时将self-attention和attention conditioned on external information(称为:ad category)两者的优点相结合。作为结果,我们的图片embedding能够强调important和category相关的features。

3. JD中的CTR预测

我们首先review了3.1节中的CTR预测的背景。接着,我们描述了CTR预测系统的架构。我们会进一步挖掘新的visual modeling模块的细节。最终,我们会引入必要的加速策略来进行在线部署。表1中总结了相关概念。

3.1 先决条件

在在线广告工业界,一个ad会在一些contexts下被展示给一个user,该情景被记成一次曝光(impression)。CTR预测的目标是:在发生一次impression(ad, user, contexts)时,预测一次positive feedback(例如:click)的概率。准确的CTR预测直接有益于用户体验和商业效果,这使得该任务对于整个广告工业来说很重要。

CTR预测通常被公式化成二分类问题。特别的,它会从一个training set \(D = \lbrace (x_1, y_1), \cdots, (x_{\mid D \mid}, y_{\mid D \mid} )\rbrace\)中学习一个预测函数f: \(R^d \rightarrow R\),,其中\(x_i \in R^d\)是第i次impression的feature vector,\(y_i \in \lbrace 0,1 \rbrace\)是class label表示一个click是否发生。

目标函数被定义成负的log-likelihood:

\[l(D) = - \frac{1}{|D|} \sum\limits_{i=1}^{|D|} y_i log(\hat{y}_i) + (1-y_i)log(1-\hat{y}_i)\]

…(1)

其中,\(\hat{y}_i\)是predicted CTR,通过sigmoid \(\sigma\)归一化到(0, 1)中:

\[\hat{y}_i = \sigma(f(x_i))\]

…(2)

3.2 CTR预测系统的架构

我们现在描述了我们的CTR预测系统的架构,如图1所示。

图片名称

图1. CTR预测系统的架构。左下角:CSCNN,它会将一个ad image与它的category一起嵌入到一个visual feature vector \(x_v \in R^{150}\)中。注意,CSCNN只在offline下运行。而在online serving系统中,为了满足低时延需求,我们会使用一个高效的lookup table进行替代。右下角:non-visual feature embedding,从(ad, user, contexts)到一个non-visual feature vector \(x_{nv} \in R^{380}\)。TOP:主要架构,一个修改版的DCN,它会采用visual feature \(x_v\)和non-visual feature \(x_nv\)作为inputs。

3.2.1 DCN

DCN网络可以得到可靠的效果,它可以学到有效的特征交叉。这里,我们将DCN修改成两个inputs:

  • 一个non-visual feature vector \(x_{nv} \in R^{380}\)
  • 一个visual feature vector \(x_v \in R^{150}\)

visual feature被包含在deep net中。在layer 1中,我们将non-visual feature转换成1024维,并将它们与visual feature进行concatenate起来:

\[h_1 = [x_v, ReLU-MLP(x_{nv})] \in R^{150 + 1024}\]

…(3)

接着跟两个deep layers:

\[h_{l+1} = ReLU-MLP(h_l), l \in \lbrace 1, 2\rbrace, h_2 \in R^{512}, h_3 \in R^{256}\]

…(4)

cross net用于处理non-visual feature:

\[z_{l+1} = z_0 z_l^T w_l + b_l + z_l\]

…(5)

其中,对于layer \(l \in \lbrace 0, 1, 2\rbrace\),input \(z_0 = x_{nv}\)。

最终,我们会为predicted CTR组合outputs:

\[\hat{y} = \sigma(ReLU-MLP[h_3, z_3])\]

…(6)

3.2.2 Non-visual Feature Embedding

我们现在描述embedding layer会将一次impression(ad, user, contexts)的raw non-visual features转成vector \(x_{nv}\).

我们假设:所有features以categorical的形式进来(例如:binning,预处理后)。通常,一个categorical feature会以one-hot / multi-hot vector \(x_hot \in \lbrace 0,1 \rbrace^v\)的方式编码,其中v是该feature的vocab size。我们以如下方式展示两条样本:

1
2
WeekDay=Web  ==>  [0,0,0,1,0,0,0]
TitleWords=[Summer,Dress] ==> [..., 0,1,0, ..., 0,1,0...]

不幸的是,该one/multi-hot coding不能应用于工业界系统,因为高维稀疏性。我们在我们的系统上采用一个低维的embedding策略:

\[x_{emb} = E_{x_{hot}}\]

…(7)

其中:

  • \(E \in R^{d_e \times v}\)是对于该specific feature的embedding字典
  • \(d_e\)是embedding size

我们接着将\(x_{emb}\)的所有features进行concatenate来构建\(x_{nv}\).

实际上,我们的系统会使用来自用户的95个non-visual features(历史点击/购买,location),ads(category, title, #reviews等)以及rich contexts(query words, visit time等),总共有70亿vocab。设置\(d_e = 4\),总的维度是95 x 4 = 380. 我们将进一步引入features和其它statistics。

3.3 Category-Specific CNN

converntional预测系统大多数使用off-the-shelf CNN来嵌入ad图片。我们将它称为“off-the-shelf”,是因为它原始是用来分类设计的,而不是CTR预测。他们将image category看成是要预测的target,而非inputs。这实际上在电商平台上是一个巨大的浪费,因为:categories会被精准标记,并包含丰富的可视化先验知识,可以用于visual modeling。

我们针对CTR预测通过提出一种新的CNN(Category-Specific CNN)来解决该问题,它会嵌入一个ad图片m,并与ad category \(k \in K\)一起concat到visual feature \(x_v\)上。特别的,category prior knowledge被编码成category embeddings(与CTR模型联合训练),并使用一个conditional attention机制来包含CNN。

理论上,CSCNN可以被用来在任意网络中当做任意的convoluation layer。在我们的系统中,我们插入CSCNN到ResNet18.

3.3.1 单个convolutional layer上的框架

对于每个category k以及每个convolutional layer l,CSCNN会学习一个 tensor \(A_c^k \in R^{1 \times 1 \times C'}\),它会为该layer编码category prior knowledge在channel-wise attention上的影响。我们会出于简洁性,忽略subscript l。框架如图2所示。

图片名称

图2 我们提出的Category-Specific CNN框架。注意CSCNN可以被添加到任意单个convolutional layer上,但出于简单演示,我们只展示了单个layer的细节。TOP:一个将category映射到category prior knowledge的map,它会影响channel-wise & spatial attentions。Bottom:F是当前convolutional layer上的output feature map。通过顺序使用channel-wise和spatial attention进行refined,新的feature map F’‘被当成下一layer的input使用

给定一个intermediate feature map \(F \in R^{H \times W \times C}\),convolutional layer l的output,CSCNN会首先学习一个channel attention map \(M_c \in R^{1 \times 1 \times C}\),它基于当前feature map和category为条件。接着,channel-wise attention会被乘上feature map来获得一个Refined feature map \(F' \in R^{H \times W \times C}\),

\[F' = M_c (F, A_c^k) \odot F\]

…(8)

其中,\(\odot\)表示与\(M_c\)的element-wise product,它沿着spatial维度\(H \times W\)进行广播。

相似的,CSCNN也会学到另一个tensor \(A_s^k \in R^{H \times W \times 1}\),它会为spatial attention \(M_S \in R^{H \times W \times 1}\)对category prior knowledge进行编码。这两个attention模块被顺序用来获得一个3D的refined feature map \(F'' \in R^{H \times W \times C}\):

\[F'' = M_s(F', A_s^k) \odot F'\]

…(9)

其中,spatial attention会在element-wise product之前沿着channel维度进行广播。一个实际的关注点是,在\(A_s^k\)中存在大量参数,尤其是在前几层。为了解决该问题,我们提出只学习一个更小的tensor \(A_s^{'k} \in R^{H' \times W' \times 1}\),其中\(H' << H\)以及\(W' << W\),接着通过线性插件(linear interpolation)将它进行resize到\(A_s^k\)。\(H'\)和\(W'\)的作用会在后面实验结果进行讨论。注意,\(A_s^k\)和\(A_c^k\)会随机初始化并在训练期间学习,除category id外不需要额外的category prior knowledge。

channel-wise和spatial attention两者都被重新定义后,\(F''\)会被fed给下一layer。注意,CSCNN会被添加到任意CNNs上,通过只将input的F替代成next layer的\(F''\)。

3.3.2 category-specific channel-wise Attention

channel-wise attention会告诉要关注”what”。除了之前的inter-channel关系外,我们也会利用category prior knowledge和features间的关系(图3)。

图片名称

图3

为了收集spatial信息,我们首先将F的spatial dimension通过max和average pooling进行挤压(squeeze)。采用两者的优点由CBAM的实验所支持验证。两个squeezed feature maps接着与category prior knowledge \(A_c^k\)进行concatenated一起,并通过一个共享的two layer MLP进行forward传递,将维度从\(1 \times 1 \times (C + C')\)减小到\(1 \times 1 \times C\)上。最终,我们通过element-wise summation进行合并。

\[M_c(F, A_c^k) = \sigma(MLP[Avg P(F), A_c^k] + MLP[MaxP(F), A_c^k])\]

…(10)

3.3.3 Category-specific Spatial Attention

我们的spatial attention module如图3(bottom)。Spaital attention会通过利用features的inter-spatial关系,告诉需要关注哪里。受CBAM的影响,我们首先通过average pooling和max pooling沿着channel的维度聚合feature map \(F'\)的channel-wise信息。为了包含category prior knowledge,这两者接着与\(A_s^k\)进行concatenate一起来形成一个\(H \times W \times 3\)维度的feature map。最终,该feature map通过一个\(7 \times 7\)的convolutional filter进行传递来获得attention weights。

\[M_s(F', A_s^k) = \sigma(Conv_{7 \times 7}(Max P(F'), Avg P(F'), A_s^k))\]

…(11)

3.3.4 复杂度分析

注意,CSCNN实际上是一个轻量级module。特别的,我们在表2中展示了Baseline、CBAM以及我们的算法在参数数目和giga floating-point operations(GFLOPs)上的对比。

我们设轩\(C \in \lbrace 64, 128, 256, 512 \rbrace, C'=20\),瓶颈下降至4, #categories \(\mid K \mid =3310\)(表7中的real production dataset)。在CBAM中的每个convolutional yer中的“shared FC”中,参数数目是\(2 * C * C / 4\)。对于CSCNN,FC中的参数数目和channel category embedding是\(C * C / 4 + (C + C')*C/ 4 + C' * \mid K \mid\)。在channel attention中,参数数目的增加对比CBAM是1个conv layer为67-69k。另外,\(W' = H' = 6\),在spatial attention中的额外参数数目是\(W' * H' * \mid K \mid + 6 * 6 \approx 120k\)。因此,总参数的增加为(120k + 68k) * 16 layers = 3.0M。额外的参数引入是可接受的,对比CBAM,额外计算只有0.03%。

3.4 系统部署

我们在搜索广告系统部署了CSCNN。图4描述了我们在线模型系统的架构。

图片名称

图4

3.4.1 offline training

CSCNN会与整个CTR prediction系统进行jointly train,最近32天收集的100亿规模的直实数据集。在我们之前的调查中,CNN是训练期间的关键计算瓶颈。采用ResNet18 network,它的input pic size为224 x 224,单机4个P40 GPUs只能每天训练1.77亿图片。这意味着在分布式训练中加速CSCNN,我们需要226 P40 GPUs来计算1天内的100亿曝光,这很昂贵。为了加速,我们采用[2]中的sampling strategy。具有相同的ad的大约25个曝光(impressions)会收集成一个batch。一张图片的image embedding只需要管理一次,并在该batch中传播给多次曝光。有了28张P40 GPUs后,训练可以在1天内完成。

3.4.2 Offline inferring

images和categories会被feed到一个well trained CSCNN中来infer那些visual features。Fearures会传到一个lookup table中,接着在predictor memory中加载来替换CSCNN。在维度减小和频控后,一个20GB的lookup table可以覆盖超过下一天曝光的90%。

3.4.3 Online serving

一旦收到请求,visual features会直接从lookup table根据ad id进行发现。predictor会返回一个estimated CTR。在流量高峰中,每秒有超过3亿的items的吞吐量,我们的CPU online serving系统的tp99 latency会在20ms以下。

4.实验结果

参考

google(google play)《Mixed Negative Sampling for Learning Two-tower Neural Networks in Recommendations》中提出了Mixed Negative Sampling。

3.模型框架

在本节中,我们首先提出:对于retrieval任务的large-corpus推荐系统中的一个数学表示。我们接着提出一个two-tower DNN的建模方法,并描述了如何使用in-batch negative sampling来训练模型。最后,我们介绍了Mixed Negative Sampling (MNS) 技术来解决batch negatives的选择偏差(selection bias)。

3.1 问题公式

在推荐系统中的检索任务,目标是:给定一个query,从整个item corpus中,快速选择数百到上千的候选内容。特别的,一个query可以是一个文本、一个item(比如:一个app)、一个user,或者它们的一个混合形式。这里,queries和items可以被表示成feature vectors,用于捕获多样的信息。我们将检索问题看成是一个多分类问题,从一个large corpus(classes) C中选择一个item的likelihood可以被公式化成一个softmax probability:

\[P(y | x) = \frac{e^{\epsilon(x,y)}}{\sum_{j \in C} e^{\epsilon (x, y_i)}}\]

…(1)

其中:

  • \(\epsilon(x,y)\)表示由retrieval model提供的logits,feature vectors x和y分别表示query和item。

3.2 建模方法

我们采用一个two-tower DNN模型结构来计算logits \(\epsilon(x,y)\)。

图片名称

图1 双塔结构

如图1所示,left tower和right tower会分别学习query和item的latent representations。正式的,我们通过函数\(u(x; \theta)\)和\(v(y; \theta)\)来分别表示两个towers,它们会将query features x和item features y映射到一个共享的embedding space上。这里\(\theta\)表示所有的模型参数。该模型会输出query和item embeddings的内积作为等式(1)中的logits:

\[\epsilon(x, y) = <u(x;\theta), v(y;\theta)>\]

出于简单,我们会:

  • u表示成一个给定query x的的embedding
  • \(v_j\)表示从corpus C中的item j的embedding

对于一个\(\lbrace query(x), item(y_l, postive \ label) \rbrace\)pair的cross-entropy loss变为:

\[L = - log(P(y_l | x)) = - log(\frac{e^{<u, v_l>}}{\sum_{j \in C} e^{<u, v_j>}})\]

…(3)

对等式(2)根据参数\(\theta\)做梯度,给出:

\[\nabla_{\theta} (- log P(y_l | x)) \\ = - \Delta_{\theta}(<u, v_l>) + \sum\limits \frac{e^{<u,v_j>}}{\sum_{j \in C} e^{<u, v_j>}} \nabla_{\theta}(<u, v_j>) \\ = - \nabla_{\theta}(<u, v_l>) + \sum\limits_{j \in C} P(y_j | x) \Delta_{\theta}(<u, v_j>)\]

第二项表示:\(\nabla_{\theta}(<u, v_j>)\)是对于\(P(\cdot \mid x)\)(指的是target分布)的期望(expectation)。通常在大的corpus上对所有items计算第二项是不实际的。因此,我们会通过使用importance sampling的方式抽样少量items来逼近该期望(expectation)。

特别的,我们会从corpus中使用一个预定义分布Q来抽样一个items子集\(C'\),其中\(Q_j\)是item j的抽样概率(sampling probability),并用来估计等式(3)中的第二项:

\[E_P [\nabla_{\theta}(<u, v_j>)] \approx_{j \in C'} \frac{w_j}{\sum_{j' \in C'} w_{j'}} \nabla_{\theta}(<u, v_j>)\]

…(4)

其中,\(w_j = e^{<u, v_j> - log(Q_j)}\)会包含用于sampled softmax中的logQ correction。

双塔DNN模型的一个常用sampling策略是:batch negative sampling。特别的,batch negative sampling会将在相同training batch中的其它items看成是抽样负样本(sampled negatives),因此sampling分布Q会遵循基于item频次的unigram分布。它可以避免feed额外的负样本到右塔,从而节约计算成本。图2展示了在一个training batch上的计算过程。给定在一个batch中有B个{query, iitem} pair,B个queries和B个items的features会分别经过该模型的左塔和右塔。产生\(B X K\)(K是embedding维度)的embedding matrix U和V。接着,logits matrix可以被计算为\(L = U V^T\)。由于batch negative sampling会极大提升训练速度,我们会在下节中讨论它的问题,并提出一个可选的sampling策略。

图片名称

图2

3.3 Mixed Negative Sampling

控制梯度估计的bias和variance对于模型质量来说很重要。有两种方式来减小bias和variance:

  • (1) 增加sample size
  • (2) 减少在Q分布和target分布P间的差异

在训练两塔DNN模型的情况下,batch negative sampling会隐式设置采样分布Q为unigram item frequency分布。它在推荐场景下有两个问题:

  • (1) 选择偏差:例如,一个没有任何用户反馈的item不会包含在训练数据中作为一个candidate app。因而,它不会被batch negative sampling抽样成一个负样本。因此,该模型不能有效区分具有稀疏反馈的items 与 其它items。
  • (2) 缺乏调整抽样分布的灵活性:隐式采样分布Q由训练样本决定,不能被进一步调整。Q与target分布P偏离,会导致巨大bias。

我们提出了Mixed Negative Sampling (MNS) 来解决该问题。它会从另一个数据流中均匀抽样\(B'\)个items。我们将这额外数据流称为index data,它是一个由来自整个corpus的items组成的集合。这些items对于每个batch来说会当成额外负样本使用。图3展示了一个training batch的计算过程。

图片名称

图3

除了\(B \times K\)的query embedding matrix \(U_B\)外,\(B \times K\) candidate item embedding matrix \(V_B\),均匀从index data中抽样的\(B'\)个candidate items会被feed到右塔来生成一个\(B' \times K\)个candidate item embedding matrix \(V_B'\)。我们将\(V_B\)和\(V_B'\)进行拼接来获得一个\((B + B') \times K\)个candidate item embedding matrix V。事实上,我们具有\(B \times (B + B')\)个logits matrix \(L = U V^T\)。label matrix因此变成\(B \times (B + B')\),具有一个所有都为0的\(B \times B'\)的matrix会append到原始的\(B \times B\)的对角矩阵上。相应的,一个training batch的loss function:

\[L_B \approx - \frac{1}{B} \sum\limits_{i \in [B]} log(\frac{e^{<u_i, v_i>}}{e^{<u_i, v_i>} + \sum\limits_{j \in [B+B'], j \neq i} w_{ij}})\]

…(5)

其中:

\(w_{ij} = e^{<u_i, v_j> - log(Q_j^*)}\),\(u_i\)是U的第i行,\(v_j\)表示V的第j行。这里的抽样分布\(Q^*\)变成是一个关于基于unigram sampling的item frequency和uniform sampling的混合形式,有一个关于batch size B和\(B'\)间的ratio。

MNS会解决以上与batch softmax有关的两个问题:

  • (1) 减少选择偏差(selection bias):在corpus中的所有items具有一个机会作为负样本,以便retrieval model可以更好分辩新鲜和长尾的items
  • (2) 在控制sampling分布时使得更灵活:有效采样分布Q是一个来自training data基于unigram分布的item freqeuncy和来自index data的uniform分布的mixture。对于一个固定的batch size B,我们可以通过调节\(B'\)来实验不同的Q。这里的\(B'\)可以作为一个超参数进行调节。

参考

阿里在《SDM: Sequential Deep Matching Model for Online Large-scale Recommender System》提出了SDM,我们来看下。

摘要

捕获用户的精准偏好是大规模推荐系统中一个基础问题。当前,item-based CF方法通常会在工业界广泛使用。希而,它们不能有效建模用户的动态演进的偏好。在本paper中,我们提出了一个新的序列深度匹配模型(SDM: sequential Deep Matching)来捕获用户的动态偏好,它通过将short-term sessions和long-term behaviors相结合进行建模。我们对比了已经存在的sequence-aware推荐方法,我们会解决在实验应用中的两个天然问题:

  • 1) 他们可以在一个session内存在多个兴趣趋势
  • 2)长期偏好(long-term)可能会与当前session兴趣的融合得不够有效

长期行为是多样且复杂的,因而,与short-term session高度相关的行为应该在融合(fusion)时被保留。我们提出,使用两个相应的组件来编码行为序列:

  • multi-head self-attention模块:来捕获多种类型的兴趣
  • long-short term gated fusion模块:来吸收long-term偏好

在与序列用户行为向量(sequential user behavior vector)与item embedding vectors相匹配后,会推荐连续的items。在真实世界数据集中的离线实验表明,SDM的优点。另外,SDM已经在taobao的在线大规模推荐系统中成功部署,并达到了巨大提升。

1.介绍

。。。

2.相关工作

。。。

3.提出的方法

3.1 问题公式化

我们首先将序列匹配问题(sequential matching problem)和我们的解决方法进行公式化。假设:

  • U:表示users集合
  • I:表示items集合

我们的模型认为:用户\(u \in U\)会与与一个item \(i \in I\)在t时刻进行交互。对于user u,我们可以通过以时间序降序对交互items进行排序来获得他/她的最新sessions。受session-based推荐的启发,我们可以将new session的生成规则进行公式化:

  • 由后台系统记录,相同的session ID进行交互属于相同session
  • 时间差异少于10分钟内(或者更长时间,具体依赖于场景)的近邻交互也可以合到一个session
  • 一个session的最大长度设置为50,它意味着:当session长度超过50时,会新开启一个new session

用户u的每个最近session会看成是短期行为(short-term behavior),命名为\(S^u = [i_1^u, \cdots, i_t^u, \cdots, i_m^u]\),其中:m是sequence的长度。u在过去7天内在\(S^u\)前发生的长期行为(long-term)被标记为\(L^u\)。基于这样的前提条件,我们会定义我们的推荐任务。给定用户u的短期行为 \(S^u\)以及长期行为 \(L^u\),我们希望为他/她推荐items。

总的网络结构如图1所示。我们的模型会将当前session \(S^u\)和\(L^u\)作为input。\(S^u\)和\(L^u\)会分别被编码成short-term session表示为时间t的\(s_t^u\),长期行为表示\(p^u\)。这两种representations会通过一个gated neural network进行组合。我们将该模块命名为user prediction network,它会从\(S^u\)和\(L^u\)中预测用户行为向量\(o_t^u \in R^{d \times 1}\)。假设:\(V \in R^{d \times \mid I \mid}\)表示I的item embedding vectors,其中:\(\mid I \mid\)是所有items的数目,d是每个vector的embedding size。我们的目标是:基于在\(o_t^u\)与V中每个列向量\(v_i\)间的内积得分,预测在time t+1时top N个item candidates:

\[z_i = score(o_t^u, v_i) = {o_t^u}^T v_i\]

其中,\(v_i \in R^{d \times 1}\)是第i个item embedding vector。

3.2 训练和在线serving

在训练期间,在time t的postive label是next interacted item \(i_{t+1}^u\)。negative labels是从排除了\(i_{t+1}^u\)的I中通过log-uniform sampler抽样得到的。接着预测的class probabitities会通过一个softmax layer做出。称为sampled-softmax,我们会使用cross entropy作为loss function:

\[\hat{y} = softmax(z) \\ L(\hat{y}) = - \sum\limits_{i \in K} y_i log(\hat{y}_i)\]

…(2)

其中,K是I的抽样子集,它包含了positive labels和negative labels,\(z = [z_1, \cdots, z_{\mid K \md}]\)是在\(o_t^u\)与每个\(v_i (i \in K), \hat{y} = [\hat{y}_1, \cdots, \hat{y}_{\mid K \mid}\)是在每个抽样样本(sampled item)上的预测概率分布,其中\(y_i\)是item i的truly probability分布。

我们会在我们的在线推荐系统中部署该模型。item embedding vectors V对于ANN来说很重要。同时,user prediction network会部署在一个高性能的实时inference系统上。这种架构遵循Youtube视频推荐[4]。当顾客使用我们的在线服务时,他们会与多个items交互,他们关于items的feedback会被处理,接着在数据库中作为用户行为日志进行排序。从大量日志中的有用悠会被抽取出来构建成模型所需的结构化数据。在time t时,顾客的历史行为\(S^u\)和\(L^u\)会被feed到inference系统中。接着,用户行为向量\(o_t^u\)会被预测。KNN搜索系统会使用\(o_t^u\)根据它们的内积进行检索。接着推荐top-N items。现在,我们会详述\(S^u\)和\(L^u\)会被编码到network中,并且两个representations会在图2中进行融合。

3.3 使用side information的input embedding

在taobao推荐场景中,顾客不只关注于特定item本身,也会关注品牌、商店和价格,等。例如,一些用户趋向于购买指定品牌的items,其它用户可能会从他们信任的商店进行购买。再者,由于工业界存在大规模items造成的稀疏性(sparsity),只对item ID feature级别来编码items不够令人满意。因此,我们会从不同的feature尺度来描述一个item,例如:item ID、leaf category、first level category、brand和shop,它们可以被表示成side information set F。每个input item \(i_t^u \in S^u\)被表示为一个dense vector \(e_{i_t^u} \in R^{d \times 1}\),它通过embedding layer进行转换,因此,他们可以直接feed到DNN中:

\[e_{i_t^u} = concat( \lbrace e_i^f | f \in F \rbrace )\]

…(3)

其中,\(e_i^f = W^f x_i^f \in R^{d_f \times 1}\)是item i关于feature f的input embedding,它具有embedding size \(d_f\)。\(W^f\)是feature。f是转移矩阵,\(x_i^f\)是one-hot vector。

相似的,user profile可以从不同的feature scales来描述user u,比如:age、gender、life stage。用户u的profile信息输入可以被表示成一个dense vector \(e_u \in R^{d \times 1}\):

\[e_u = concat( \lbrace e_u^p | p \in P \rbrace)\]

…(4)

其中,P是这profile features set,\(e_u^p\)是feature p的embedding。

3.4 Recurrent Layer

给定用户u的embedded short-term sequence \([e_{i_1^u}, \cdots, e_{i_t^u}]\),为了捕获和特征化在short-term序列数据中的全局时序依赖,我们会使用Long Short Term Memory(LSTM) network作为recurrent cell,它遵循session-based recommendation【7,14,15】,LSTM可以描述为:

\[\]

3.5 Attention机制

在电商场景下,顾客通常会浏览一些不相关的items,这被称为是“因果点击(causal clicks)”。不相关的行为(unrelated actions)一定程度上会影响在序列中\(h_t^u\)的表示(representation)。我们使用一个self-attention network来减小一些不相关actions的影响。Attention network可以聚合多个vectors到一个总体表示上,通过分配不同的权重分到每个组件上。

3.5.1 Multi-head self-attention

self

3.5.2 User Attention

对于不同的用户,他们通常会对相似的item sets具有不同的偏好。因此,在 self-attention network的顶部,我们会添加一个user attention module来描述一些细粒度的个性化信息,其中\(e_u\)会被用于query vector,对\(\hat{X}^u = [\hat{h}_1^u, \cdots, \hat{h}_t^u]\)进行attend。time t时的short-term行为表示\(s_t^u \in R^{d \times 1}\)可以被计算:

\[a_k = \frac{exp(\hat{h}_k^{uT} e_u}{\sum_{k=1}^t exp(\hat{h}_k^{uT} e_u} \\ s_t^u = \sum\limits_{k=1}^t a_k \hat{h}_k^u\]

3.6 长期行为混合

从long-term视角看,用户通常会在不同维度积累不同程度的兴趣。一个用户可能经常浏览一群相似商店,并且重复购买相同品类的items。因此,我们也会从不同的feature scales将long-term行为\(L^u\)进行encode,\(L^u = \lbrace L_f^u \mid f \in F \rbrace\)包含了多个子集:\(L_{id}^u\)(item ID),\(L_{leaf}^u\)(leaf category),\(L_{cate}^u\)(first level category),\(L_{shop}^u\)(shop)以及\(L_{brand}^u\)(brand),如图2所示。例如:\(L_{shop}^u\)包含了用户u在过往一周内交互的shops。考虑在在线环境下的快速响应,在每个subset中的entries,通过一个attention-based pooling会被嵌入并聚合到一整个vector中。

每个\(f_k^u \in L_f^u\)会通过在第3.3节中的\(W^f\)被转换成一个dense vector \(g_k^u \in R^{d \times 1}\)。接着我们使用user profile embedding \(e_u\)作为query vector来计算attention scores并获得\(L_f^u\)的表示:

\[a_k = \frac{exp(g_k^{uT} e_u}{\sum_{k=1}^`{| L_f^u |}`exp(g_k^{uT} e_u)} \\ z_f^u = \sum_{k=1}^{| L_f^u |} a_k g_k^u\]

…(11)

\(\lbrace z_f^u \mid f \in F\rbrace\)会被concatented并feed到一个FC network上:

\[z^u = concat(\lbrace z_f^u | f \in F \rbrace) \\ p^u = tanh(W^p z^u + b)\]

…(12)

其中,\(p^u \in R^{d \times 1}\)是long-term行为的表示。

为了与short-term行为进行组合,我们精妙地设计了一个gated neural network,它会将\(e_u, s_t^u, p^u\)作为input进行组合,如图2所示。一个gate vector \(G_t^u \in R^{d \times 1}\)会被用来决定在time t时short-term和long-term的贡献百分比(contribution percentages)

\[G_t^u = sigmoid(W^1 e_u + W^2 s_t^u + W^3 p^u + b)\]

…(13)

最终的output,例如:用户行为向量\(o_t^u \in R^{d \times 1}\),会通过如下计算:

\[o_t^u = (1 - G_t^u) \odot p^u + G_t^u \odot s_t^u\]

…(14)

其中:\(\odot\)是一个element-wise乘法。

4.实验

4.1 数据集

我们会构建一个offline-online train/validation/test framework来开发我们的模型。模型会在两个离线真实电商数据集。一个是移动taobao APP的在线天级日志。另一个来自JD。我们的代码和离线数据集提供在:https://github.com/alicogintel/SDM.

  • 离线taobao数据集。随机选取了在连续8天内交互超过40个items的活跃用户(2018年12月)。另外,我们会过滤交互超过100个items的用户,它们会被认为是spam users。接着我们收集他们的历史交互数据,首个7天做为训练,第8天作为测试。我们会过滤出该数据集中少于5次的items。session segmentation会遵循3.1节的规则,并限定每个\(L_f^u\)的最大size为20个。在训练过程期间,我们会移除长度少于2的sessions。在test环节,我们会选择近10000个活跃用户作为快速评估。他们在第8天的的前25%的short-term sessions会被feed到模型中,剩除的交互作为ground truth。除此外,顾客一天内浏览一些items超过一次,并重复推荐不应被鼓励,因此,我们会在test data上对某个user来说对其它items只保留一次。

离线JD数据集。由于该数据集相当稀疏和更小,我们选择3周的用户-item交互日志进行训练,一周进行测试。其它data构建和清理过程与taobao相同。在表1中的两个离线数据集的统计详情如下。

在线数据集。我们会选择大多数有效离线模型来部署在淘宝的生产环境中。来自taobao APP的user-item交互日志的训练数据来自过往7天,没有进行sampling。相同的数据清理过程会应用在离线训练数据集上。在线用户和items的scales会扩展到亿级别,它可以cover住大多数taobao的活跃商品,更多的long-term行为可以被使用。详情如表1所示。在线model、相应的item和user features会天级更新。

4.2 评估指标

4.1 离线评估

4.2 在线评估

在线指标:pCTR、pGMV和discovery。

pCTR是每个page view的Click-Through-Rate ,其中每个page可以为用户推荐20个items:

\[pCTR = \frac{#clicks}{#pages}\]

pGMV是每个1000 PV的Gross Merchandise Volume。它的计算如下:

\[pGMV = 1000 \times \frac{#pay amount}{#pages}\]

除了在线流量和收入外,我们也考虑用户的shopping体验。定义了有多少新items推荐系统提供给一个用户:

\[discovery = \frac{#new \ categories}{#all \ categories}\]

其中,分母是一个用户在每天点击的所有categories的数目,分子是用户在过往15天内新category的数目。我们会对所有用户求平均。

4.3 对比方法

  • Item-based CF
  • DNN: youtube DNN
  • GRU4REC
  • NARM: GRU4REC的改进版本
  • SHAN
  • BINN
  • SDMMA: Sequential Deep Matching with Multi-head Attention,我们的增强模型
  • PSDMMA:Personalized SDMMA,增加了user attention module来挖掘细粒度的个性化信息
  • PSDMMAL:PSDMMA组合了short-term sessions和long-term 行为。
  • PSDMMAL-N:基于PSDMMAL,在训练期间,我们会采用以下的N个items作为target classes作为Tang&Wang[24]。本实验中N=4

4.4 实现详情

分布式tensorflow。在离线实验上,训练使用5个PSs和6个GPU worksers,平均30 steps/s,在online实验上我们使用20 PSs和100 GPU workers。Adam optimizer具有learning rate 0.001.。。。

5.经验分析

5.1 离线结果

表2展示了不同模型在离线数据集上的结果。我们会从这些模型的训练epochs中选择最好的结果。总之,除YoutubeDNN外,基于deep learning的方法要胜过传统的item-based CF一大截。在item序列上的average pooling会忽略items间的内在的相关性,造成推荐质量(recall、precision)的损伤。GRU4Rec和NARM会考虑short-term行为的演进。他们的效果要好于原始的DNN模型。为什么SHAN和BINN能比GRU4Rec好是因为:他们包含了更多的个性化信息,包括long-term行为和user profile表示。

我们提出的SDMMA会利用multi-head attention结构,并全面好于NARM。我们会在5.3节看一个具体的case来解决multi-head attention是如何捕获多种兴趣的。通过引入user profile表示,PSDMMA会增强该模型,因为不同类型的users会关注不同的items。short-term表示会更准,越多的顾客可以在候选列表中发现他们感兴趣的items。但很难为一个新用户推荐潜在的新items。通过考虑上long-term行为,会infer得到越精准的偏好。

PSDMMAL可以打败所有模型,它会考虑long-term偏好。不同于SHAN和BINN,它会应用一个fusion gate来组合short-term和long-term行为表示。该gate比hierarchical attention结构具有更强的表示能力。SHAN会简单使用user profile表示作为query vector来决定long-term和short-term偏好表示的attention weights。我们提出的PSDMMAL会建模它们间的相关关系。在5.4节会通过一个有意思的case来解释fusion gate的设计。PSDMMAL-N是最好的变种,它在训练期间采用next 5 items作为target classes。它可以召回更多样的items,会满足更广用户的需求,对于推荐系统的matching task更合适。PSDMMAL-NoS的结果表明,我们的模型在没有side information下效果会急剧下降。

5.2 在线A/B

当前,taobao的在线匹配算法是一个two-staged方法。我们会将trigger items定义为一个用户最近交互过的items。Item-based CF首先会生成item-item相似矩阵。trigger items会通过相似矩阵去召回相似的items。接着这些recalled items会通过GBDT进行rerank作为matching chandidates。这样的方法是我们的online baseline,我们替换它作为一个标准的A/B test。

我们会部署最好的的SDM模型PSDMMAL-N,同时也会部署没有long-term behaviors的版本。对比baseline模型,从顾客的序列行为infer出来的推荐items的质量,会比由item-based CF生成的相似items的要好些。特别是对于那些经常在线浏览的顾客,我们的模型会推荐新items给他们,并吸引更多眼球来提升潜在的订单率。图3展示了7天的在线结果。两个SDM模型会胜过baseline一大截,其中PSDMMAL-N具有一个整体pCTR :7.04%的提升,pGMV:4.5%,cover: 24.37%。合并long-term行为会带来更多的提升。long-term行为总是表示个性化偏好,它可以影响顾客的当时购物决策。注意,我们的sequential matching model在2018 12月后表现稳定。

5.3 Multi-head Attention的效果

我们在matching模型中探索了多种heads的影响。直觉上,short-term session会获得heads增加数目带来的准确率。表3上报了在离线taobao dataset上的结果。在该实验中,在PSDMMAL中,只有heads数目是不同的,并且模型的维度 hidden units d设置为64。

我们可以观察到,由head number引起的变化在4个指标上保持一致。当heads的数目少于4时,该效果呈现了heads量间的postive关系。当heads数目大于4时,结果会急剧变差。我们可以下结论:更多head并不必要正向,因为\(d_{head_i} = \frac{64}{#head}\)会变得更小,并造成更差的表示。在我们的settings中,4个heads可以获得最好的结果,我们会将在short-term session上不同heads的attention weights进行可视化,如图4所示。我们会选择LSTM的hidden output \(h_t^u\)作为在multi-head attention中的query vector,来获得到\([h_1^u, \cdots, h_t^u]\)的attention weights。weight vector也是等式8中\(A_i^u\)的第t个row vetor。\(head_1\)和\(head_2\)主要关注在session中的前几个items,它们是白色羽绒衣(white down jackets)。\(head_3\)会捕获连衣裙(dress)的兴趣,\(head_4\)则会给出对牛仔裤(jeans)更多的attention。

5.4 Fusion Gate

element-wise乘法,concatenation和加法操作,会直接在未过滤的long-term偏好表示上进行,并忽略:在long-term上少量偏好会与当前short-term session具有强相关性。这些简单的组合方法会获得来自long-term偏好的所有信息,会天然地伤害fusion的效果,如图4所示,在taobao离线数据集上的效果。作为对比,我们提出的gated fusion network会准确捕获multi-layer user偏好,并达到最好的结果。在long-term偏好中与当前session高度相关的信息会与当前的short-term vector进行融合。

为了更好解释gated fusion,我们使用一个taobao的抽样用户的真实案例来解释gate的功能。如图5所示,\(R^u\)包含了我们模型推荐的items,它会被用户同时点击。我们可以看到,用户会浏览多种类型的玻璃,包括:红酒杯(red wine glass)和冠军杯(champion glass)。我们的模型可以直接推荐champion glasses,因为他们与用户的short-term session \(S^u\)中的最近点击有关。这意味着他更可能在此时对champion glasses感兴趣,该gate会允许保留该信息。同时,我们的gated fusion可以在它大量long-term行为\(L^u\)间捕获最相关的items (red wine),它也包含了许多不相关的点击:比如啤酒(beer)、削皮刀(paring knife)、小板块(small plate),并与short-term session的items( red wine glasses)组合来生成推荐项:红酒瓶(red wine decanter)。该case表明:我们的gate module是有效的,并具有精准融合的能力。

图5

参考

北大在《AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks》提出了AutoInt,我们来看下。

摘要

CTR预估的目标是,预测一个用户在一个ad或item上的概率,它对于许多在线应用(比如在线广告和推荐系统)很关键。但存在许多挑战,因为:

  • 1) input features(例如:user id、user age、item id、item category)通常是稀疏高维
  • 2) 有效的预测通常依赖于高阶组合特征(cross features),由domain experts手工处理非常耗时,很难穷举。因此,对于稀疏高维原始特征,以及它们的特征组合,发现它们的低维表示需要一些工作。

本文提出了一种有效方法:AutoInt来自动学习关于input features的高阶特征交叉。我们提出的算法非常通用,它可以被同时应用到numerical和categorical的input features上。特别的,我们会将numerical和categorical features映射到相同的低维空间中。接着,使用一个带residual connections的multihead self-attentive neural network来显式建模在低维空间中的feature interactions。整个模型可以通过end-to-end的方式有效满足大规模的原始数据。具体代码:: https://github.com/DeepGraphLearning/RecommenderSystems

3.问题定义

我们首先正义定义ctr预测问题:

定义1: CTR Prediction

假设:\(x \in R^n\)表示user u的features和item v的features的concatenation,其中:

  • categorical features使用one-hot encoding表示
  • n是concatenated features的维度

那么,CTR预测的问题的目标是:预测user u根据feature vector x在item v上的点击概率。

CTR预测的一个简单做法是:将x看成是input features,并部署类似于LR的分类器进行预测。然而,由于原始featrue vector x非常稀疏且高维,模型很容易overfit。因此,在低维连续空间中表示raw input features是可行的。另外,在其它文献中,利用高阶组合特征来生成好的预测表现很重要。特别的,我们以如下方式定义高阶组合特征:

定义2: p-order组合特征

给定input feature vector \(x \in R^n\),一个p阶组合特征被定义成:

\[g(x_{i_1}, \cdots, x_{i_p})\]

其中:每个feature来自一个不同的field

  • p是feature fields的数目
  • \(g(\cdot)\)是non-additive combination function,比如:乘法 和 外积,例如:\(x_{i_1} \times x_{i_2}\)是一个关于\(x_{i_1}\)和\(x_{i_2}\)的二阶组合特征

传统的,有意义的高阶组合特征(high-order comibatorial features)可以通过domain experts进行人工构建。然而,这非常耗时,很难泛化到其它domains上。另外,手工构建所有有意义的高阶特征是不可能的。因此,我们开发了一种方法来自动发现有意义的高阶组合特征,同时将所有这些features映射到低维连续空间上,正式地,我们以如下方式定义问题:

定义3: 问题定义

给定一个input feature vector \(x \in R^n\)用于ctr预测,我们的目标是:学习一个关于x的低维表示,它会建模高阶组合特征。

4.AutoInt

4.1 总览

我们的方法会将原始稀疏高维feature vector映射到低维空间上,同时建模高阶特征交叉。如图1所示,我们提出的方法会将sparse feature vector x作为input,后跟一个embedding layer,它会将所有features(包括:categorical和numerical)投影到相同的低维空间上。接着,我们将所有fields的embeddings feed到一个新的interacting layer上,它使用一个multi-head self-attentive neural network来实现。对于每个interacting layer,高阶features通过attention机制来组合,不同类型的combinations可以使用multi-head机制进行评估,它会将features映射到不同的subspaces上。通过将多个interacting layers进行stacking,不同阶的combinatorial features可以被建模。

图片名称

图1

最终interacting layer的output是input feature的低维表示,它可以建模high-order组合特征,进一步通过一个sigmoid function用来估计ctr。接着,我们会详细介绍。

4.2 Input Layer

我们首先表示user profiles和item属性作为一个sparse vector,它是所有fields的concatenation。特别的:

\[x = [x_1; x_2; \cdots; x_M]\]

…(1)

其中:

  • M是总的feature fields的数目
  • \(x_i\)是第i个fields的feature representation

当第i个field是categorical时,\(x_i\)是一个one-hot vector(例如:在图2中的\(x_1\));当第i个field为numerical时,\(x_i\)是一个scalar value(例如:图2中的\(x_M\))。

图片名称

图2

4.3 Embedding Layer

由于categorical features的feature表示是非常稀疏高维的,一种常用方式是将它们表示成低维空间(例如:world embeddings)。特别的,我们将每个categorical feature使用一个低维vector来表示:

\[e_i = V_i x_i\]

…(2)

其中:

  • \(V_i\)是field i的一个embedding matrix
  • \(x_i\)是一个one-hot vector

通常,categorical features可以是multi-valued,例如:\(x_i\)是一个multi-hot vector。以电影观看预测为例,由于有个Genre的feature field,它会描述一个电影的types,它通常是multi-valued(例如:对于电影来说”Titanic”是Drama和Romance)。为了兼容multi-valued inputs,我们进一步修改等式(2),将multi-valued feature表示成相应feature embedding vectors的平均

\[e_i = \frac{1}{q} V_i x_i\]

…(3)

其中:

  • q是样本对于第i个field的values的数目
  • \(x_i\)是该field的multi-hot vector表示

为了允许categorical和numerical features的特征交叉,我们在相同的低维特征空间中表示numerical features。特别的,我们将numerical feature表示成:

\[e_m = v_m x_m\]

…(4)

其中:

  • \(v_m\)是field m的一个embedding vector
  • \(x_m\)是一个scalar value

通过这么做,embedding layer的output可以是一个关于多个embedding vectors的concatenation,如图2表示。

4.4 Interacting layer

一旦numerical和categorical features在相同的低维空间中存在,我们会在该空间中建模高阶组合特征(high-order cominatorical features)。关键问题是决定:哪个features应该被组合来形成有意义的high-order features。这在传统上由domain experts完成,它们会基于经验来创建有意义的特征组合。在本paper中,我们使用一个新方法“multi-head self-attention”机制来解决该问题。

Multi-head self-attentive network已经在建模复杂关系中取得了很好的效果。例如,它在机器翻译和句子embedding上,对于建模特别的word dependency具有优越性,已经被成功应用到捕获在graph embedding中的node相似性。这里,我们会将这些最新技术进行扩展来建模不同feature fields间的相关性。

特别的,我们采用key-value attention机制来决定,哪个feature combinations是有意义的。以feature m为例,接下来我们将解释如何标识涉及feature m的多个有意义的高阶特征。我们首先定义:feature m和feature k间在一个指定attention head h下的相关性:

\[a_{m,k}^{(h)} = \frac{exp(\phi^{(h)} (e_m, e_k))}{\sum_{l=1}^M exp(\phi^{(h)} (e_m, e_l))} \\ \phi^{(h)}(e_m, e_k)= <W_{Query}^{(h)} e_m, W_{Key}^{(h)} e_k>\]

…(5)

其中,\(\phi^{(h)} (\cdot, \cdot)\)是一个attention function,它定义了feature m和k间的相似性。它可以定义成一个neural network,或者一个简单的内积,例如:\(<\cdot, \cdot>\)。在本工作中,我们使用inner product是因为它的简单和有效。等式(5)中的\(W_{Query}^{(h)}, W_{Key}^{(h)} \in R^{d' \times d}\)是transformation矩阵,它会将原始的embedding space \(R^d\)映射到一个新的空间\(R^{d'}\)中。接着,我们会在子空间h中更新feature m的表示,通过将所有由系数\(a_{m,k}^{(h)}\)指定的所有相关特征进行组合来完成:

\[\bar{e}_m^{(h)} = \sum_{k=1}^M a_{m,k}^{(h)} (W_{Value}^{(h)} e_k)\]

…(6)

其中,\(W_{Value}^{(h)} \in R^{d' \times d}\)

由于,\(\bar{e}_m^{(h)} \in R^{d'}\)是一个feature m和它相关features(在head h下)的组合,它可以表示成由我们的方法学到的一个新的组合特征。考虑气候,个维护feature不能上课测IHI而已工程i莫高窟人combinatorial features,我们可以使用多个heads来达成,它可以创建不同的subspaces并分别学习不同的feature interactions。我们以如下方式收集在所有subspaces中学到的combinatorial features:

\[\bar{e}_m = \bar{m}^{(1)} \oplus \bar{m}^{(2)} \oplus \cdots \oplus \bar{m}^{(H)}\]

…(7)

其中,\(\oplus\)是concatenation operator,其中H是total heads的数目。

图片名称

图3

为了保留之前学到的combinatorial features,包含raw individual (例如:一阶) features,我们在网络中添加标准的residual connections:

\[e_m^{Res} = ReLU(\bar{e}_m + W_{Res} e_m)\]

…(8)

其中,\(W_{Res} \in R^{d' H \times d}\)是关于didension mismatching的投影矩阵,其中,\(ReLU(z) = max(0, z)\)是一个非线性activation function。

有了这样的一个interacting layer,每个feature的表示\(e_m\)会被更新成一个新的feature representation \(e_m^{Res}\),它是一个高阶features的表示。我们可以将多个这样的layers进行stack,前一interacting layer的output可以做为下一interacting layer的input。通过这样做,我们可以建模任意阶的combinatorical features。

4.5 Output layer

interacting layer的output是一个关于feature vectors \(\lbrace e_m^{Res} \rbrace_{m=1}^M\)的集合,其中,包含了由residual block保留的raw individual features,以及由multi-head self-attention机制学到的combinatorial features。对于最终的CTR预测,我们可以将所有进行concatenate,接着应用一个非线性投影:

\[\hat{y} = \sigma(w^T (e_1^{Res} \oplus e_2^{Res} \oplus \cdots e_M^{Res} ) + b)\]

…(9)

其中,\(w \in R^{d' H M}\)是一个列投影向量,它可以对concatenated features进行线性组合,b是bias,\(\sigma(x) = 1 / (1+e^{-x})\)会将values转化成users的点击概率上。

4.6 训练

我们的loss funciton 是log loss,它根据以下进行定义:

\[Logloss = - \frac{1}{N} \sum_{j=1}^N (y_j log(\hat{y}_j + (1-y_j) log(1-\hat{y}_j))\]

…(10)

其中,\(y_j\)和\(\hat{y}_j\)分别是user clicks的ground truth和预估的CTR,j会索引训练样本,N是训练样本总数。模型中学习的参数是:\(\lbrace V_i, v_m, W_{Query}^(h), W_{Key}^{(h)}, W_{Value}^{(h)}, W_{Res}, w, b\rbrace\),它们会通过使用gradient descent方式对total Logloss进行最小化更新。

4.7 AutoInt分析

建模任意阶组合特征

给定由等式(5)-(8)的feature interaction的operator,我们接着分析低阶和高阶组合特征是如何建模的。

对假设存在四个feature fields(例如:M=4)分别由\(x_1, x_2, x_3与x_4\)各自表示。在第一个interacting layer,每个独立的feature会通过attention机制(等式5)与任意其它features进行交叉,因此会使用不同的相关weightes捕获二阶特征交叉:\(g(x_1,x_2), g(x_2, x_3), g(x_3, x_4)\),其中interaction function \(g(\cdot)\)的non-additive特性 (定义2)可以通过activation function \(ReLU(\cdot)\)的non-linearity来进行保证。理想的,涉及\(x_1\)的组合特征可以被编码成第一个feature field \(e_1^{Res}\)的updated representation。由于对于其它feature fields来说是相同的源头,所有二阶特征交叉可以被编码成第一个interacting layer的output,其中attention weights会distill有用的特征组合。

接下来,我们证明了高阶特征交叉可以在第二个interacting layer中建模。给定由第一个interacting layer生成的第一个feature field \(e_1^{Res}\)的representation、以及第三个feature field \(e_3^{Res}\),涉及\(x_1, x_2, x_3\)的三阶组合特征可以被建模,允许\(e_1^{Res}\)来attend on \(e_3^{Res}\),因为\(e_1^{Res}\)包含了interaction \(g(x_1, x_2)\)以及\(e_3^{Res}\)包含了单个特征\(x_3\)(来自residual connection)。另外,组合特征的最大阶会随着interacting layers的数目进行指数增长。 例如,四阶特征交叉\(g(x_1, x_2, x_3, x_4)\)可以通过\(e_1^{Res}\)和\(e_3^{Res}\)的组合进行捕获,它分别包含了二阶交叉\(g(x_1, x_2)\)以及\(g(x_3, x_4)\)。因此,少量的interacting layers足够去建模高阶特征交叉。

基于上述分析,我们可以看到,AutoInt会以一个hierarchical的方式使用attention机制来学习feature interactions,例如:从低阶到高阶,所有低阶特征交叉可以通过residual connections进行捎带。这是有保证且合理的,因为学习hierarchical representation已经在计算机视觉和语音处理中对于DNN来说相当有效。

空间复杂度(Space Complexity)

embedding layer,它在NN-based方法中是一个共享组件,包含了nd的参数,其中n是input feature的sparse representation的维度,d是embedding size。由于一个interacting layer包含了以下的weight matrics:\(\lbrace W_{Query}^{(h)} , W_{Key}^{(h)}, W_{Value}^{h}, W_{Res} \rbrace\),在一个L-layer network的参数数目是\(L \times (3d d' + d'Hd)\),它与feature fields M的数目是独立的。最终,在output layer中存在\(d' H M + 1\)个参数。只要interacting layers被关注,空间复杂度是\(O(Ldd'H)\)。注意,H和d’通常很小(例如:H=2 以及d’=32),它会使得interacting layer相当memory-efficient。

时间复杂度(TIme Complexity)

在每个interacting layer中,计算开销是two-fold的。首先,对于一个head计算attention weights会花费\(O(Mdd' + M^2 d')\)的时间。接着,在一个head下形成组合特征也会花费\(O(Md d' + M^2 d')\)的时间。由于我们有H个heads,它总共花费\(O(MHd'(M+d)))\)的时间。由于H, d, d’通常很小,所以很高效。

5.实验

参考