Rank Model
推荐系统技术演进——从特征交叉建模到深度兴趣序列建模
推荐系统的起点是基于群体行为的记忆的协同过滤模型,本质是“物以类聚,人以群分”。利用用户-物品交互矩阵如评分、点击,不依赖任何额外特征。经典的包括 User-CF(找到与你相似的用户,把他们喜欢的推荐给你)和 Item-CF(找到与你喜欢物品相似的物品,推荐给你)。但是这种方法的局限性是交互矩阵稀疏,无法处理冷启动问题,泛化能力差。为了引入丰富的上下文信息比如用户画像、物品属性等模型必须从“记忆”走向“泛化”。由此推荐系统经历了特征交叉模型和深度兴趣序列模型。特征交叉模型利用神经网络的学习能力挖掘特征信息的低阶、高阶融合。深度兴趣序列模型基于用户兴趣和行为进行显式语义特征交互来去捕捉用户和目标商品的相关性。在深度兴趣序列模型之后,推荐模型继续沿着更强大的序列建模如基于LLM的模型、多任务学习(同时优化点击、时长、购买等)、跨域信息融合、生成式推荐等快速发展。
特征交叉模型
特征交叉模型的技术演进,经历了以下三个阶段:
- 线性与手工时代:基础线性模型LR依赖特征工程,POLY2尝试自动化二阶交叉但维度爆炸。
- 特征自动工程:FM用隐向量解决稀疏交互,FFM引入Field概念细化交互粒度,GBDT+LR用树模型自动发现特征组合。
- 深度学习融合:Wide&Deep首次提出记忆与泛化结合架构,DeepFM用FM替代Wide部分实现全自动,DCN利用交叉网络高效学习显式交叉,DCN V2工业优化版平衡了效果与效率,CAN通过微网络结构在表达能力和计算效率之间取得了良好平衡。
LR (Logistic Regression)
广告数据具有高维稀疏性,特征维度可达数十亿,每个样本仅有少量特征非零,数据也是不平衡的,CTR通常很低(0.1%-5%)。用户特征、广告特征、上下文特征的交叉组合具有强预测性。
传统线性模型如LR只能学习线性关系:$P(y=1|\mathbf{x}) = \sigma(\mathbf{w}^T\mathbf{x} + b)$,无法自动学习特征交互,依赖人工特征工程,但是人工交叉特征会导致维度爆炸和泛化能力差。我们简单回顾下LR建模。
- LR模型形式化:给定特征向量 $\mathbf{x} = (x_1, x_2, …, x_n)^T$,LR模型如下,其中 $\mathbf{w} \in \mathbb{R}^n$ 为权重向量,$b \in \mathbb{R}$ 为偏置项。
$$P(y=1|\mathbf{x}) = \frac{1}{1 + \exp(-(\mathbf{w}^T\mathbf{x} + b))}$$ - 参数估计与损失函数:使用最大似然估计,对数似然函数如下,其中 $p_i = \sigma(\mathbf{w}^T\mathbf{x}_i + b), \sigma(z) = 1/(1+e^{-z})$ $$\mathcal{L}(\mathbf{w}) = \sum_{i=1}^N \left[ y_i \log p_i + (1-y_i) \log(1-p_i) \right]$$
在广告推荐场景中,特征交叉非常重要。例如,用户的性别和商品类别的交叉特征(如女性用户和化妆品)可能对点击率有显著影响。包括一阶特征 $x_i$(原始特征);二阶交叉特征 $x_i x_j$(特征乘积);高阶交叉特征 $x_i x_j x_k$(三阶及以上)。为了解决特征交叉问题,早期做法是进行人工特征工程,将交叉特征作为新特征加入模型。但是这样做会导致维度灾难,n个特征的k阶组合数为 $C_n^k$,特征维度指数增长,在数据稀疏的情况下,很多交叉特征出现次数极少,难以有效学习其权重。泛化能力也很差,无法学习未见过的特征组合。
POLY2 (Polynomial-2)
为了自动化特征交叉,二阶多项式POLY2模型直接对所有的二阶交叉特征进行建模,并为每个交叉特征赋予一个权重。模型形式为:
$$
\phi_{\text{POLY2}}(\mathbf{x}) = b + \sum_{i=1}^n w_i x_i + \sum_{i=1}^{n} \sum_{j=i+1}^{n} w_{ij} x_i x_j
$$
POLY2的问题是总参数量为$O(n^2)$,训练复杂度高。对于交叉特征 $x_i x_j$,其参数 $w_{ij}$ 的梯度如下,在数据稀疏时,交叉特征权重难以训练,因为需要同时满足 $x_i$ 和 $x_j$ 都非零,这在稀疏数据中很难。
$$
\frac{\partial \mathcal{L}}{\partial w_{ij}} = (y - \hat{y}) x_i x_j
$$
FM (Factorization Machines)
FM模型发表在SIGIR2011上。FM模型通过引入隐向量的思想,将交叉特征的权重矩阵进行矩阵分解,从而解决稀疏数据下的特征交叉学习问题。FM模型不仅考虑一阶特征,还考虑二阶特征交叉,但使用两个隐向量的内积来建模交叉特征的权重。模型公式如下,其中 $\mathbf{v}_i \in \mathbb{R}^k$ 是特征i的隐向量,$\langle \cdot, \cdot \rangle$ 表示向量内积:
$$\phi_{\text{FM}}(\mathbf{x}) = b + \sum_{i=1}^n w_i x_i + \sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle \mathbf{v}_i, \mathbf{v}_j \rangle x_i x_j$$
$$\langle v_i, v_j \rangle = \sum_{f=1}^k v_{i, f} v_{j, f}$$
对于每一个特征 $i$,我们学习一个一阶权重 $w_i$ 和一个隐向量 $\mathbf{v}_i$(维度为 $k$)。因此总参数量为 $O(nk)$,其中 $k \ll n$,远小于POLY2的 $O(n^2)$。
为什么FM能解决稀疏数据问题? 在POLY2中,交叉特征 $x_i x_j$ 的权重 $w_{ij}$ 只由这两个特征同时出现的数据学习。但在FM中,$w_{ij}$ 被分解为 $\langle \mathbf{v}_i, \mathbf{v}j \rangle$,也就是说,学习 $w{ij}$ 变成了学习特征 $i$ 和 $j$ 的隐向量。这样,对于特征 $i$,我们可以从所有包含 $i$ 的交叉特征中学习它的隐向量。例如,对于交叉特征 $x_i x_j$ 和 $x_i x_l$,它们都会更新特征 $i$ 的隐向量 $\mathbf{v}_i$。因此,即使某个交叉特征 $x_i x_j$ 在训练数据中很少出现,但只要特征 $i$ 和其他特征交叉出现过多次,那么 $\mathbf{v}_i$ 就能学习到较好的表示,从而可以泛化到未见过的交叉特征。
GBDT+LR
GBDT+LR是Facebook在ADKDD2014提出的模型,利用GBDT(Gradient Boosting Decision Tree)强大的非线性特征组合能力进行自动特征组合,GBDT对原始特征进行训练,得到一系列决策树。每棵决策树将输入样本映射到某个叶子节点,将该叶子节点视为一个离散特征one-hot编码。然后GBDT的输出作为特征输入到LR模型中的方法。
- GBDT模型:GBDT是一种加法模型,由多棵决策树组成,每棵树拟合的是之前所有树的残差,也就是梯度方向。对于输入特征向量x,GBDT的输出如下,其中,$h_t(x)$是第t棵决策树的输出,$γ_t$是学习率。在GBDT+LR中,我们并不直接使用F(x)的数值,而是使用每棵树的叶子节点编号作为新的特征。
$$F(x) = Σ_{t=1}^{T} γ_t * h_t(x)$$ - 特征转换:假设我们有 $T$ 棵树,每棵树有 $J_t$ 个叶子节点。对于第 $t$ 棵树,定义函数 $q_t(x)$为:输入x,输出该样本落在第t棵树的哪个叶子节点上,即 $q_t(x) ∈ {1, 2, …, J_t}$。然后,我们构造一个新的向量:$φ(x) = [I(q_1(x)=1), …, I(q_1(x)=J_1), …, I(q_T(x)=1), …, I(q_T(x)=J_T)]$。其中,$I(·)$ 是指示函数,当条件成立时取1,否则取0。这个向量 $φ(x)$ 就是GBDT提取出的新特征,它是一个one-hot向量,维度为 $Σ_{t=1}^{T} J_t$。
- LR模型:将 $φ(x)$ 作为输入,LR模型为 $p(y=1|x) = 1 / (1 + exp(-w^T φ(x) - b))$.
使用GBDR+LR模型可以实现自动化特征组合,GBDT还能同时处理连续值和离散值并分析特征重要性但是,这种两阶段训练,不易进行端到端优化。而且GBDT模型训练时间长,且生成的特征维度高,可能过亿维,需要仔细处理稀疏性。
FFM (Field-aware FM)
FFM发表在RecSys2016上,在FM基础上引入了Field的概念。在广告推荐系统中,特征通常可以按照不同的领域进行分组。例如,我们可以将特征分为用户相关特征(如用户ID、年龄、性别)、广告相关特征(如广告ID、广告类别)和上下文特征(如时间、位置)等。在FM中,每个特征只有一个隐向量,用来与其他特征交互。但实际上,一个特征在与不同Field的特征交互时,其重要性或影响可能是不同的。例如,用户特征“性别”在与广告特征“类别”交互时和在与上下文特征“时间”交互时,其隐向量应该有所不同。在FFM中,每个特征针对其他每一个Field都会学习一个隐向量。这样,当两个特征交互时,会根据对方所属的Field选择对应的隐向量。
FFM建模:给定一个样本,假设有n个特征,这些特征属于f个不同的Field。那么,FFM模型的公式如下,其中$\mathbf{v}_{i, F(j)}$ 是第i个特征针对第j个特征所属的Field(即$F(j)$)所学习的隐向量。
$$
\phi_{\text{FFM}}(x) = w_0 + \sum_{i=1}^n w_i x_i + \sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle v_{i,F(j)}, v_{j,F(i)} \rangle x_i x_j
$$
参数分析:FM每个特征有1个隐向量,参数量 $O(nk)$;FFM每个特征针对每个field有1个隐向量,每个隐向量是k维,参数量 $O(n \cdot f \cdot k)$,其中f是field数,由于f通常远小于n,所以FFM的参数量比FM大很多。
WDL (Wide & Deep Learning)
Google在2016年提出Wide & Deep Learning模型,WDL将传统特征工程结合深度学习模型,落地在Google Play推荐场景。Wide部分学习特征间的交互,尤其是稀疏特征的组合,便于记忆历史数据中的模式。Deep部分学习特征的深层表示,可以泛化到未见过的特征组合。
- Wide部分:一个线性模型LR,输入包括原始特征和交叉特征。
- Deep部分:一个前馈神经网络,输入是稠密特征,可以是连续特征,也可以是embedding后的稀疏特征。
将Wide部分和Deep部分的输出相加,然后通过一个sigmoid函数得到最终的预测概率。$P(Y=1|x) = σ( W_{wide}^T [x, φ(x)] + W_{deep}^T a^{(l_f)} + b )$。其中,$φ(x)$ 是特征交叉变换,$a^{(l_f)}$ 是Deep部分最后一层激活值。训练时同时训练Wide和Deep部分,使用联合损失函数logistic损失$\text{Loss} = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log(P(y_i|x_i)) + (1-y_i) \log(1 - P(y_i|x_i)) \right]$进行梯度下降。
训练时Wide与Deep联合训练。Wide部分使用FTRL(Follow-the-Regularized-Leader)优化器,适合稀疏特征,具有更好的收敛性。Deep部分使用自适应学习率的AdaGrad优化器,适合稠密特征。
Wide&Deep 的“Wide” 部分仍依赖人工设计或搜索交叉特征,效率低且难以扩展。DNN的特征交叉能自动学习特征交互,但交互是隐式、高度非线性的,不易解释,可能无法高效学习某些有界阶数的特征交叉。后续出现了很多分别关于Wide和Deep部分改进的迭代。
DeepFM
DeepFM于2017年由哈尔滨工业大学和华为诺亚方舟实验室联合提出,用FM组件替代Wide & Deep中的Wide部分,不用人工特征工程,FM自动学习所有特征间的二阶交互,Deep网络自动学习高阶非线性交互。FM和DNN共享输入特征embedding,联合训练,端到端优化。
DCN (Deep & Cross Network)
DCN是Google发表在AdKDD2017的文章。DCN 通过引入交叉网络,在 Wide&Deep 的基础上实现了自动、高效、显式的特征交叉学习。DCN无需人工设计,通过可控的网络深度,可以自动学习显式生成从低阶到高阶的交叉特征。相比 DNN,DCN 以更少的参数量达到更好或相当的性能,适用于大规模稀疏输入和稠密特征。
- Embedding & Stacking Layer:稀疏特征通过embedding层转换为稠密向量,将所有embedding向量与归一化的稠密特征拼接后得到 $\mathbf{x}_0$。
- Cross Network:$\mathbf{x}_{l+1} = \mathbf{x}_0 \mathbf{x}_l^T \mathbf{w}_l + \mathbf{b}_l + \mathbf{x}_l$,这样第 $l$ 层输出的最高交叉阶数为 $l+1$。比如1 层 → 2 阶交叉 $x_i x_j$,2 层 → 3 阶交叉 $x_i x_j x_k$。时间复杂度为 $O(d)$,$d$ 为输入维度,远低于显式计算所有交叉 $O(d^2)$。
- Deep Network:标准全连接网络,$\mathbf{h}_{l+1} = \text{ReLU}(W_l \mathbf{h}_l + \mathbf{b}_l)$ 用于学习高度非线性、隐式的特征交互。
- Combination Layer:拼接交叉网络与深度网络的输出,通过逻辑回归层输出预测概率 $p = \sigma(\mathbf{z}^T \mathbf{w}_{\text{logits}})$
DCN的缺点也很明显,交叉阶数受深度限制,最高阶数为 $L_c + 1$,可能无法学习极高阶交叉。而且交叉网络仅为乘法交互,可能无法捕获复杂非线性模式(需依赖 DNN 补充)或是存在冗余交叉特征。论文中指出DCN训练不稳定,交叉层数过多可能导致性能波动。
DCN V2
DCN V2是Google发表在WWW2021的文章。DCN V2 的提出,源于将原始 DCN 模型应用于谷歌等公司超大规模工业级排序系统时遇到的实际挑战:
- 原始 DCN 的表达能力有限:交叉网络的参数复杂度仅为 $O(d)$,限制了它建模复杂交叉模式的能力。在大规模生产数据中,DCN 的交叉网络未能学习到足够多有效的特征交互。
- 参数分配不平衡:在原始 DCN 中,绝大多数参数被分配给了深度网络用于学习隐式交互,而负责显式交互的交叉网络参数量过少,导致两者能力不匹配。
- 效率与性能平衡:工业级系统对模型的服务延迟和计算资源有极其严格的限制。需要在有限的预算内,设计一个既高效又能学习有效显式交叉的模型。
- DNN 的低效性被再次确认:尽管 DNN 是通用函数逼近器,但大量研究和实践表明,标准的基于 ReLU 的全连接网络在学习乘法关系特征交叉(即使是 2 阶或 3 阶)时是低效的,往往需要过于庞大和复杂的网络。
因此,DCN V2 的目标是在继承 DCN 自动、高效学习有界阶数显式交叉基础上,大幅提升其表达能力,并引入低秩混合等工程优化技术,使其能真正落地于十亿/百亿级样本的工业推荐与排序系统。
DCN V2 保留了原始 DCN 的并行双路结构,改进了交叉网络,支持 stacked 和 parallel 两种结构,
原始 DCN 交叉层公式 :$\mathbf{x}_{l+1} = \mathbf{x}_0 \mathbf{x}_l^T \mathbf{w}_l + \mathbf{b}_l + \mathbf{x}_l$,其中 $\mathbf{w}_l \in \mathbb{R}^d$ 是一个向量。这本质上是将 $\mathbf{x}_0$ 和 $\mathbf{x}_l$ 的所有 $d^2$ 个成对交互,通过一个秩为1的矩阵($\mathbf{x}_0 \mathbf{x}_l^T$)进行隐式构建,再用一个向量 $\mathbf{w}_l$ 投影回 $d$ 维。
DCN V2 交叉层公式:$\mathbf{x}_{l+1} = \mathbf{x}_0 \odot (W_l \mathbf{x}_l + \mathbf{b}_l) + \mathbf{x}_l$,其中 $W_l \in \mathbb{R}^{d \times d}$ 是一个完整的矩阵,$\odot$ 表示逐元素乘法(Hadamard积)。将投影权重从一个向量 $\mathbf{w}_l$ 升级为一个矩阵 $W_l$。这使得模型能够为每一对特征交互学习一个独立的、更复杂的权重模式,而不是像原始 DCN 那样共享一个简单的投影向量。
尽管效果很好,但包含 $d \times d$ 矩阵的交叉层在输入维度 $d$ 很大时,计算和存储成本依然较高,是线上服务的潜在瓶颈。为了解决全矩阵 $W$ 可能带来的计算和存储开销,论文观察到学习到的 $W$ 矩阵通常具有低秩特性。
低秩交叉层:将 $W_l$ 分解为两个“高瘦”矩阵 $U_l, V_l \in \mathbb{R}^{d \times r}, (r \ll d)$:$\mathbf{x}_{l+1} = \mathbf{x}_0 \odot (U_l (V_l^\top \mathbf{x}_l) + \mathbf{b}_l) + \mathbf{x}_l$,参数量从 $d^2$ 降至 $2dr$。
混合专家低秩交叉层:受 MoE 启发,使用多个低秩“专家”,每个专家在不同子空间学习特征交互,并通过一个门控网络根据输入动态聚合。
CAN (Co-Action Network)
传统方法笛卡尔积(Cartesian Product) 直接将特征组合视为新特征来增强特征交互,虽然表达能力强,但会导致参数量爆炸($O(N^2 \times D)$),难以在大规模工业场景中部署。另一方面,基于深度神经网络的隐式交互方法如FM、DeepFM等虽能自动学习特征组合,但其表达能力有限,无法完全保留显式特征交互的信息。CAN是阿里发表在WSDM2022的工作,CAN的提出正是为了在保持笛卡尔积强大表达能力的同时,大幅降低参数量和计算开销,使其适用于工业级推荐与广告系统。
CAN通过Co-Action Unit模块显式建模特征对之间的交互,原理是对于一对特征($P_{induction}$, $P_{feed}$),使用 $P_{feed}$ 的不同阶次 $P_{feed}, P_{feed}^2, P_{feed}^3$ embedding向量构建一个微网络(Micro-MLP),将 $P_{induction}$ 的embedding向量作为该网络的输入,输出即为两特征的交互表示。Co-Action Unit 前向过程如下:
- 从 $P_{induction}$ 重构MLP参数。
- 逐层计算:$h_0 = P_{feed}, h_i = \sigma(w_{i-1} \otimes h_{i-1} + b_{i-1}), \quad i=1,\dots,L$。其中使用了多阶增强 $H_{\text{Multi-order}}(P_{induction}, P_{feed}) = \sum_{c=1}^{C} H(P_{induction}, (P_{feed})^c)$
- 输出为各层输出的拼接:$F(u, m) = \big|_{i=1}^{L} h_i$
CAN拥有近似笛卡尔积的表达能力,但是参数量大幅减少从 $O(N^2 \times D)$ 降至 $O(N \times (D’ + D))$。通过MLP和多阶增强捕捉复杂模式,效果显著优于FM、DeepFM等隐式方法,已成功应用于阿里巴巴广告系统,带来CTR +12%,RPM +8%的提升。但是整体计算复杂度较高,相比纯embedding模型,增加了MLP前向计算开销,且多层MLP需要充足数据才能有效训练。
兴趣/序列模型
DIN (Deep Interest Network)
在工业级 CTR 预测任务中,常见的深度学习模型如 Wide&Deep、DeepFM、PNN 等遵循 Embedding&MLP 范式,将大规模稀疏特征映射为低维embedding向量,通过 sum/average pooling 将变长行为序列转为固定长度向量,拼接所有特征向量后输入 MLP 进行预测。然而,用户兴趣是多样化的,比如同时关注服装、电子产品、母婴用品,用户对某个广告的点击往往只与其部分历史行为相关,传统方法将用户所有历史行为压缩为同一个固定长度向量,无论候选广告是什么,这导致模型表达能力受限,难以捕捉局部激活的兴趣。
阿里在KDD2018上提出了DIN算法,给阿里广告系统带来+10.0%CTR和+3.8%RPM提升。DIN 在基础 Embedding&MLP 模型上引入局部激活单元,公式如下:
$$v_U(A) = \sum_{j=1}^{H} a(e_j, v_A) \cdot e_j$$
其中 $e_j$ 是用户第 $ j $ 个行为的embedding向量;$ v_A $ 是候选广告的embedding向量;$ a(\cdot) $ 是前馈网络,输入为 $ e_j $ 和 $ v_A $,输出为激活权重 $ w_j $。和传统注意力机制不同的是,传统注意力机制使用softmax约束权重和为 1,DIN 不做归一化,保留权重的绝对值,以反映兴趣强度。
另外,论文中提到了个训练技术:
- Mini-Batch Aware 正则化:传统 L2 正则化需计算所有参数的 L2 范数,计算量大,DIN 提出仅对当前 mini-batch 中出现的特征计算正则化项,显著降低计算量,适用于亿级参数稀疏网络
- 数据自适应激活函数 Dice:PReLU 的 rectified point 固定为 0,不适合输入分布变化大的场景,Dice 根据输入分布的均值和方差自适应调整 rectified point。
DIEN (Deep Interest Evolution Network)
DIN 通过注意力机制实现了用户兴趣的局部激活,但 DIN 将用户行为embedding直接加权求和作为兴趣表示,未建模兴趣的时序演变过程,用户兴趣可能随时间变化,DIN 未显式建模这种演化趋势。另外行为 ≠ 兴趣,用户行为是兴趣的载体,但二者并非严格对应。DIN 直接将行为作为兴趣,未挖掘其背后的隐含兴趣状态。传统 RNN/LSTM 可建模序列依赖,但隐藏状态缺乏对“兴趣表示”的显式监督,无法针对不同候选商品建模差异化的兴趣演化路径。
DIEN是阿里继DIN后发表在AAAI2019的工作,DIEN提出兴趣提取层(GRU + 辅助损失) + 兴趣演化层(AUGRU)的双层结构,显式建模兴趣的时序演化。DIEN在淘宝广告系统中CTR 提升 20.7%,eCPM 提升 17.1%。DIEN 为后续更复杂的序列模型如 DSIN、MIMN奠定了基础,是 CTR 建模从“静态兴趣”走向“动态演化”的关键里程碑。
兴趣提取层:使用 GRU 对用户行为序列建模,其中 $ i_t = e_b[t] $ 是第 $ t $ 个行为的embedding向量,$ h_t $ 是隐状态。
$$u_t = \sigma(W^u i_t + U^u h_{t-1} + b^u)$$
$$r_t = \sigma(W^r i_t + U^r h_{t-1} + b^r)$$
$$\mathbf{h_t} = tanh(W^h i_t + r_t \odot U^h h_{t-1} + b^h)$$
$$h_t = (1 - u_t) \odot h_{t-1} + u_t \odot \mathbf{h_t}$$
辅助损失:引入监督信号,用下一时刻的真实行为 $ e_b[t+1] $ 作为正样本,随机采样的负样本 $ \hat{e}_b[t+1] $ 作为负样本,目标是使隐状态 $ h_t $ 能预测下一行为,从而提升兴趣表示的语义质量。
$$
L_{aux} = -\frac{1}{N} \sum_{i=1}^N \sum_t \left[ \log \sigma(h_t^i \cdot e_b^i[t+1]) + \log(1 - \sigma(h_t^i \cdot \hat{e}_b^i[t+1])) \right]
$$
兴趣演化层: 输入兴趣序列 $ [h_1, h_2, …, h_T] $,使用 AUGRU(GRU with attention update gate) 建模兴趣演化,并融入注意力机制,注意力分数 $a_t = \frac{\exp(h_t W e_a)}{\sum_{j=1}^T \exp(h_j W e_a)}$,其中 $ e_a $ 是候选商品的embedding向量。将注意力分数作用于更新门 $ u’_t $:$\tilde{u}’_t = a_t \cdot u’_t$。然后更新隐状态。AUGRU 使用向量形式的更新门,而非标量注意力分数,保留各维度的重要性差异,提升演化建模的灵活性。论文中还尝试了其他形式的GRU:
- AIGRU:$ i’_t = h_t * a_t $,仅缩放输入,效果有限。
- AGRU:用标量 $ a_t $ 替换更新门,丢失维度信息。
预测层:最终兴趣状态 $ h’_T $ 与候选商品、用户画像等特征拼接,输入 MLP 进行 CTR 预测。
BST (Behavior Sequence Transformer)
BST是阿里2019发表的工作,BST 是首次将 Transformer 应用于推荐系统精排阶段的工业级模型。通过自注意力机制显式建模用户行为序列的时序依赖,学习上下文感知的商品表示。在淘宝推荐场景中在线 CTR 提升 7.57%,并成功部署服务于亿万用户。为后续基于 Transformer 的推荐模型比如 BERT4Rec、SASRec 等奠定了基础。
行为序列特征处理时每个商品使用 item_id 和 category_id 表示,并添加位置特征 $pos(v_i) = t(v_t) - t(v_i)$,其中 $ t(v_t) $ 为推荐时间,$ t(v_i) $ 为用户点击商品 $ v_i $ 的时间戳,使用时间差而非正弦/余弦函数,在实践中效果更好。但是这种时间差位置编码可能无法完全捕捉绝对顺序或长期依赖。整体模型架构就是标准的Transformer,自注意力复杂度为 $O(n^2)$,当序列长度较长时计算开销大。
DSIN (Deep Session Interest Network)
DSIN是阿里发表在IJCAI2019的工作。DSIN首次将会话结构引入 CTR 预测,推动了 CTR 预测从“序列建模”到“会话感知建模”的演进。用户行为序列通常具有内在的会话结构,一个会话是指在特定时间窗口内发生的连续用户行为。 同一会话内的行为高度同质,而不同会话间的行为高度异质。比如用户可能在会话1浏览裤子,会话2浏览戒指,会话3浏览外套,兴趣在不同会话间发生明显转移。
DIN使用注意力机制激活与目标商品相关的行为,但未显式建模会话结构,忽略了行为序列的局部同质性。DIEN使用 GRU 建模兴趣演化,但未利用会话划分,可能因兴趣快速跳跃导致噪声。传统 RNN 方法直接对长序列建模可能因兴趣漂移而导致信息损失。DSIN利用会话内同质、会话间异质的特性,整体模型架构为:用户行为序列 → 会话划分层 → 会话兴趣提取层(自注意力 + Bias Encoding)→ 会话兴趣交互层(Bi-LSTM)→ 会话兴趣激活层(局部注意力)→ 拼接其他特征 → MLP → CTR预测
会话划分层(Session Division Layer):将用户行为序列按时间间隔 > 30分钟划分为多个会话(遵循常见实践)。设共有 $K$ 个会话,每个会话保留 $T$ 个行为,不足补零,过长截断。每个行为用 $d_{model}$ 维embedding向量表示,会话 $k$ 表示为矩阵:$Q_k \in \mathbb{R}^{T \times d_{model}}$。
会话兴趣提取层(Session Interest Extractor Layer):使用多头自注意力提取每个会话的兴趣表示,并引入Bias Encoding编码会话、位置、embedding维度偏置。Bias Encoding 公式 $BE_{(k,t,c)} = w_k^K + w_t^T + w_c^C$。其中$ \mathbf{w}^K \in \mathbb{R}^K $ 为会话偏置向量,$ \mathbf{w}^T \in \mathbb{R}^T $ 为行为在会话中的位置偏置向量,$ \mathbf{w}^C \in \mathbb{R}^{d_{model}} $ 为embedding维度的偏置向量。更新会话表示 $Q = Q + \mathbf{BE}$。$\mathbf{Q}$经多头自注意力计算后通过FFN得到 $\mathbf{I}_k^Q$,最后平均池化得到会话兴趣:$\mathbf{I}_k = \text{Avg}(\mathbf{I}_k^Q)$。
会话兴趣交互层(Session Interest Interacting Layer):使用 Bi-LSTM 建模会话兴趣序列的交互与演化 $H_t = \overrightarrow{h_{ft}} \oplus \overleftarrow{h_{bt}}$,输出隐藏状态序列 $H = [H_1, \dots, H_K]$,融入上下文信息。
会话兴趣激活层(Session Interest Activating Layer):使用DIN局部注意力机制计算各会话兴趣与目标商品的相关性权重。最后会将 $\mathbf{U}^I$、$\mathbf{U}^H$ 与user/item特征concat输入mlp。
MIMN (Multi-channel user Interest Memory Network)
传统模型DIN、DIEN、DSIN通常处理较短序列(≤ 150),而真实场景中用户行为序列长度会更长。长序列建模面临的两个挑战是存储压力和计算延迟。阿里在KDD2019提出MIMN支持1000+ 长度行为序列,是一个算法-系统协同设计方案:
- 系统侧:设计用户兴趣中心UIC,将用户兴趣计算解耦为独立模块,离线更新,实时预测时直接读取兴趣状态,实现零延迟。
- 算法侧:基于 NTM 改进设计 MIMN,引入记忆利用率正则化与记忆归纳单元,在固定大小记忆中高效存储长序列兴趣,并支持增量更新。
左侧网络用于用户兴趣建模:用户行为序列 → NTM(记忆读写) → MIU(记忆归纳) → 兴趣表示。
右侧网络是传统CTR预测:兴趣表示 + 其他特征(用户/广告/上下文) → Embedding → MLP → CTR预测。
神经图灵机NTM基础:维护外部记忆矩阵 $\mathbf{M}_t \in \mathbb{R}^{m \times d}$,$m$ 为记忆槽数,$d$ 为槽维度。每步接收行为embedding $\mathbf{e}_t$,通过控制器(全连接网络)生成读写键、添加向量、擦除向量。
记忆读取:
$$w_t^r(i) = \frac{\exp(K(k_t, M_t(i)))}{\sum_{j=1}^{m} \exp(K(k_t, M_t(j)))}$$
$$K(k_t, M_t(i)) = \frac{\mathbf{k}_t^T M_t(i)}{|k_t| |\mathbf{M}_t(i)|}$$
$$r_t = \sum_{i=1}^{m} \mathbf{w}_t^r(i) M_t(i)$$
记忆写入:$$M_t = (1 - E_t) \odot M_{t-1} + \mathbf{A}_t$$
$$\mathbf{E}_t = \mathbf{w}_t^w \otimes \mathbf{e}_t$$
$$\mathbf{A}_t = \mathbf{w}_t^w \otimes \mathbf{a}_t$$
其中$ \mathbf{M}_t $ 为擦除矩阵,$\mathbf{E}_t$ 为添加矩阵,$\otimes$ 为外积,$\odot$ 为逐元素乘。
记忆利用率正则化:热门商品频繁出现会导致某些记忆槽过度使用,而其他槽闲置。记忆利用率正则化对写入权重进行重新平衡,鼓励均匀使用。其中 $g_t = \sum_{c=1}^{t} \mathbf{w}_c^{s}$ 为累积写入权重。
$$P_t = \text{softmax}(W_g \mathbf{g}_t)$$
$$\mathbf{w}_t^{s} = \mathbf{w}_t^w P_t$$
正则化损失为:
$$L_{reg} = \lambda \sum_{i=1}^{m} \left( \mathbf{w}^{s}(i) - \frac{1}{m} \sum_{j=1}^{m} \mathbf{w}^{s}(j) \right)^2$$
$$\mathbf{w}^{s} = \sum_{t=1}^{T} \mathbf{w}_t^{s}$$
记忆归纳单元MIU:从 NTM 记忆中提取高阶兴趣演化信息。维护另一记忆矩阵 $\mathbf{S}_t \in \mathbb{R}^{m \times d}$,每个槽视为一个兴趣通道。每步选择 NTM 读取权重 $\mathbf{w}_t^r$ 的 top-k 个通道,使用 GRU 更新。
用户兴趣中心UIC:离线时,当用户有新行为时,UIC 读取当前记忆状态 $(\mathbf{M}_t, \mathbf{S}_t)$,运行 NTM+MIU 更新,写回存储(如 TAIR)。实时预测时 RTP 服务器直接从存储读取用户当前记忆状态,拼接其他特征,输入右侧网络进行预测。实时预测仅需读取固定大小记忆张量,计算复杂度与序列长度无关。
可以看到MIMN的模型复杂度很高,包括NTM + MIU + 正则化,训练与调试难度大。记忆槽数 $m$ 影响模型容量,需根据数据分布调整。UIC 服务也需要独立维护,增加运维与同步成本。适用于行为丰富、用户活跃的场景,对低频用户效果有限。
对比
| 维度 | DIN | DIEN | BST | DSIN | MIMN |
|---|---|---|---|---|---|
| 思路 | 兴趣局部激活 | 兴趣演化建模 | Transformer序列建模 | 会话感知兴趣建模 | 记忆网络 + 系统解耦 |
| 序列建模方式 | 注意力加权池化 | GRU + 注意力 + 辅助损失 | 自注意力(Transformer) | 会话内自注意力 + 会话间Bi-LSTM | NTM + 记忆归纳单元(MIU) |
| 序列长度处理 | 短(≈150) | 短(≈150) | 中(≈20-50) | 中(≈200) | 超长(≈1000+) |
| 是否建模时序 | 否 | 是(GRU) | 是(自注意力) | 是(Bi-LSTM) | 是(MIU-GRU) |
| 是否显式会话建模 | 否 | 否 | 否 | 是 | 否 |
| 是否支持增量更新 | 否 | 否 | 否 | 否 | 是(UIC) |
| 存储开销 | 高(存原始序列) | 高(存原始序列) | 高(存原始序列) | 高(存原始序列) | 低(存记忆张量) |
| 线上延迟 | 中 | 高 | 中 | 高 | 低(UIC解耦) |
| 主要优势 | 兴趣多样性建模 | 兴趣演化建模 | 强序列依赖捕捉 | 会话结构利用 | 超长序列支持 + 低延迟 |
| 主要挑战 | 未建模时序依赖 | 训练复杂,延迟高 | 位置编码敏感,计算复杂 | 会话划分依赖阈值 | 系统架构复杂,同步风险 |
长序列模型
SIM (Search-based User Interest Modeling)
DIN、DIEN能处理数百长度的用户行为序列,但无法处理数千甚至数万长度的“终身行为序列”。阿里之前提出的MIMN模型虽能处理最多1000长度的序列,但当序列长度进一步增加比如1万以上时,模型性能下降,因为固定大小的记忆矩阵中引入了过多噪声。SIM发表于2020年,将用户行为序列扩展至54000,是MIMN的54倍,解决了超长序列建模难题。SIM 采用两阶段搜索机制,先粗筛再精搜,从海量行为数据中提取相关兴趣。在阿里巴巴展示广告系统中,CTR 提升 7.1%,RPM 提升 4.4%。
- General Search Unit(通用搜索单元,GSU) 从原始长序列中快速筛选出与候选物品相关的子序列,将序列长度从数万降至数百。Hard-search仅保留与候选物品同类别的行为,是非参数化的,效率高,适合线上系统。Soft-search使用embedding向量计算相似度,借助最大内积搜索(MIPS) 如 ALSH 加速 Top-K 检索。
- Exact Search Unit(精确搜索单元,ESU) 在筛选后的子序列上使用注意力机制DIEN进行精细建模,捕捉用户对候选物品的具体兴趣。
通过两阶段搜索将计算复杂度从线性降至子线性,可以高效处理超长序列。但软搜索计算成本高,需维护embedding索引,存储与检索开销大。
ETA (End-to-end Target Attention)
SIM通过辅助任务从长序列中检索Top-K相似物品,再与候选物品进行注意力计算。但检索阶段使用的信息(如类别属性或预训练embedding)与主CTR任务的目标不一致,导致性能提升受限。ETA是阿里2021年继SIM的工作,实现检索与CTR任务的端到端训练,消除两阶段中检索目标与CTR目标不一致问题,ETA将相似度计算从高维内积降为低维汉明距离计算,支持在线学习,避免使用离线的预训练embedding或倒排索引,实现embedding的实时更新与同步。线上A/B测试带来3.1%的GMV提升。
ETA 使用局部敏感哈希SimHash将高维embedding向量压缩为二进制fingerprint,通过汉明距离快速检索Top-K相似行为物品,再进行目标注意力计算。检索部分不参与梯度更新,仅依赖固定的随机投影矩阵。embedding更新后,SimHash fingerprint同步更新,保证检索与CTR目标的一致性。直接使用Target Attention的计算复杂度为 $O(L×B×d)$,ETA的计算复杂度为 $O(L×B)$,其中 $L$ 是序列长度,$B$ 是候选物品数量,$d$ 是embedding维度,虽然ETA支持上千长度序列,但若序列过长(如数万),汉明距离计算仍会成为瓶颈。
SDIM (Sampling-based Deep Interest Modeling)
SDIM是美团发表在CIKM2022的工作,是一种基于哈希采样的端到端长序列用户兴趣建模方法。SDIM 避免从长序列中检索Top-K相似物品带来的信息损失和偏差,将计算复杂度从 $O(BLd)$ 降低至与序列长度 $L$ 无关的水平。
SDIM 通过多轮SimHash将用户行为物品与候选物品映射到哈希signature,直接聚合与候选物品signature相同的行为物品作为用户兴趣表示。
1. 哈希signature生成:使用 SimHash 对行为序列物品 $\mathbf{s}_j$ 和候选物品 $\mathbf{q}$ 进行哈希:$h(\mathbf{x}, \mathbf{r}) = \text{sign}(\mathbf{r}^\top \mathbf{x})$,其中 $\mathbf{r} \sim \mathcal{N}(0,1)$ 为随机投影向量。
2. 多轮哈希聚合:为降低噪声,采用 $(m, \tau)$-参数化 SimHash,采样 $m$ 个哈希函数,每 $\tau$ 个哈希码合并为一个signature。行为物品 $\mathbf{s}_j$ 与候选物品 $\mathbf{q}$ 碰撞的条件是它们在同一个signature桶中 $\tilde{p}^{(\mathbf{R}_i)}$
3. 兴趣聚合:直接聚合与候选物品signature相同的行为物品:$\text{Attn}(\mathbf{q},\mathbf{S}) = \frac{1}{m/\tau} \sum_{i=1}^{m/\tau} \ell_2\left( \sum_{j=1}^L \tilde{p}^{(\mathbf{R}_i)}_j \mathbf{s}_j \right)$,其中 $\ell_2$ 为 L2 归一化,使注意力权重和为 1。
4. 理论近似性:期望碰撞概率与向量夹角相关:$\mathbb{E}[\tilde{p}_j] = \left(1 - \frac{\arccos(\mathbf{q}^\top \mathbf{s}_j)}{\pi}\right)^\tau$,当 $m/\tau$ 足够大时,SDIM 的注意力分布与 softmax 目标注意力高度一致。
对比
| SIM | ETA | SDIM | |
|---|---|---|---|
| 思路 | 两阶段检索(类目/预训练embedding) + 目标注意力 | 端到端哈希检索(SimHash + 汉明距离) + 目标注意力 | 端到端哈希采样(SimHash 签名聚合) + 直接兴趣聚合 |
| 检索/选择方式 | 基于属性(如类目)或预训练embedding检索 Top-K | 基于 SimHash 指纹的汉明距离检索 Top-K | 基于多轮 SimHash 签名直接聚合相同签名的行为物品 |
| 主要优点 | 1. 实现简单 2. 检索速度快 3. 可处理长序列 |
1. 端到端训练,目标一致 2. 哈希检索效率高 3. 优于SIM/UBR4CTR |
1. 无需显式检索,避免偏差 2. 计算效率最高 3. 支持极长序列(如2000) 4. 在线效果显著 |
| 主要缺点 | 1. 检索目标与CTR不一致 2. 依赖离线索引 3. 检索可能丢失信息 |
1. 仍需Top-K检索 2. 哈希冲突可能引入噪声 3. 复杂度与L相关 |
1. 哈希冲突可能引入噪声 2. 参数敏感(需调优m, τ) 3. 需额外传输开销 |
| 适用场景 | 1. 类目信息强相关 2. 可接受离线索引延迟 3. 长序列 |
1. 需要端到端训练 2. 实时性要求高 3. 序列较长(~1000) |
1. 极长序列建模(>2000) 2. 对延迟要求极高 3. 希望避免检索偏差 |
参考
- Fast Context-aware Recommendations with Factorization Machines
- Practical Lessons from Predicting Clicks on Ads at Facebook
- Field-aware Factorization Machines for CTR Prediction
- Wide & Deep Learning for Recommender Systems
- DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
- Deep & Cross Network for Ad Click Predictions
- DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-scale Learning to Rank Systems
- CAN: Feature Co-Action for Click-Through Rate Prediction
- Deep Interest Network for Click-Through Rate Prediction
- Deep Interest Evolution Network for Click-Through Rate Prediction
- Behavior Sequence Transformer for E-commerce Recommendation in Alibaba
- Deep Session Interest Network for Click-Through Rate Prediction
- Practice on Long Sequential User Behavior Modeling for Click-Through Rate Prediction
- Search-based User Interest Modeling with Lifelong Sequential Behavior Data for Click-Through Rate Prediction
- End-to-End User Behavior Retrieval in Click-Through RatePrediction Model
- Sampling Is All You Need on Modeling Long-Term User Behaviors for CTR Prediction
- 如何在工业界优化点击率预估
- 【总结】推荐系统——精排篇【1】FM/FFM/GBDT+LR/MLR






