代码改变世界

一文说明推荐优秀的系统特征交叉方法

2026-01-26 17:09  tlnshuju  阅读(0)  评论(0)    收藏  举报

推荐系统排序模型从开始的LR到现在的LLM,其中一个主要的效果提升脉络就是特征交叉,之前做了很多单篇论文的笔记,这里作下Summary:

一 非参数的特征交叉

通过不需要引进额外的权重矩阵,不需要专门训练,能够通过代码直接控制的特征交叉方法,由于推荐特征第一层一般都会经过一个embedding层,每个特征一般都会被编码成一个vector,故而这里的非参数关键聚焦在vector的交叉途径上。就是非参数的意思

  1. cartesian product(笛卡尔积)
    cartesain product 该是非vector上的交叉方法,在深度排序模型中使用很少,仅在 GBDT(XGBoost、LightGBM)或 LR + Crossing 中使用。
    在 DeepFM/FM 模型出现后,Cartesian 特征交叉已经少用,基于 FM 自动捕获二阶交互。
    在这里插入图片描述
  2. 内积/外积
    内积又叫Dot Product,深度学习时代极其常用,占 60%~70% 模型都在用 dot 交叉
    在这里插入图片描述
    外积是outer product,得到的是一个矩阵,能捕捉高阶相关性(比 dot product 更细粒度),但高维矩阵风险大,不一定能收敛,于是从业界采用情况来看属于比较小众流派
    在这里插入图片描述
  3. hardamard积:element-wise-product, 得到的还是一个vector,要求两个向量维度必须相同。
    a = [ a 1 , a 2 , . . . . , a m ] T a = [a_1, a_2, ...., a_m]^Ta=[a1,a2,....,am]T
    b = [ b 1 , b 2 , . . . . , b m ] T b = [b_1, b_2, ...., b_m]^Tb=[b1,b2,....,bm]T
    交叉后的结果为:
    c = [ a 1 ∗ b 1 , a 2 ∗ b 2 . . . , a m ∗ b m ] T c = [a_1* b_1, a_2 * b_2 ..., a_m * b_m]^Tc=[a1b1,a2b2...,ambm]T
    比 outer product 轻量, 比 dot product 细粒度, 允许学到“局部维度的特征交互”, 在深度学习流行程度中等
    对于非类别特征,或者数值特征,不经过处理的话,严格意义上就不是特征交叉了,是特征之间的数学运算( - / ) 等,这里暂时不考虑;在推荐系统里,数值特征大部分时候其实是做分箱处理,能更好的cover异常值等困难。

二 参数式的特征交叉

特征两两交叉(Pairwise Feature Interaction)

这类模型只对两个 field(如用户特征和商品特征)之间进行显式或隐式交互,是最经典、最基础的交互方式。

1. FM(Factorization Machines)——显式二阶交叉的开端

FM 是“自动特征交叉”的开山模型,本质是二阶 Polynomial 的低秩近似。

核心公式:
∑ i < j ⟨ v i , v j ⟩ \sum_{i<j} \langle v_i, v_j \ranglei<jvi,vj
FM 依据 embedding 向量的内积实现“二阶交互”,避免了传统 Polynomial 的维度爆炸。

2. DNN(MLP 隐式特征交叉)——YouTube 推荐率先使用

YouTube DNN 首次将 embedding concat → MLP 作为“深度交叉”。
DNN 的权重矩阵本质上在学习特征之间的复杂加权组合。

核心交互本质:
c r o s s e d _ v e c = w 1 ⋅ a + w 2 ⋅ b crossed\_vec = w_1 \cdot a + w_2 \cdot bcrossed_vec=w1a+w2b
MLP 会自动学习到多阶交叉,因此 DNN 是当前使用最广的参数式交互方式。

3. DCN(Deep & Cross Network)——显式多阶 Polynomial Cross

详细内容见:
DCN学习笔记

DCN 在 MLP 之外提供了一个“显式交叉分支”,通过多层 Cross Layer 构建高阶特征交叉。

交叉公式:
x l + 1 = x 0 ⋅ ( w T x l + b ) + x l x_{l+1} = x_0 \cdot (w^T x_l + b) + x_lxl+1=x0(wTxl+b)+xl
特点:

  • 显式多阶(1-6阶)交叉
  • 比 MLP 更可解释
  • 在 CTR & 搜索排序中真实落地

4. Bilinear Cross —— FiBiNet 的核心模块(微博提出)

详细内容见:
FiBiNet 学习笔记
FM、Hadamard 等交叉方法要求两个 embedding 维度一致。
通过Bilinear Cross 引入参数矩阵 W,使得两个 field 能够映射到同一空间进行交互。

交互公式(核心):
i n t e r a c t i o n i j = x i T W x j interaction_{ij} = x_i^T W x_jinteractionij=xiTWxj
特点:

  • 能处理不同维度的 embedding
  • 表达能力强于 FM
  • FiBiNet 中与 SENet 一起使用效果显著
5. CAN(Co-Action Network,阿里)——动态参数交叉

详细内容见:
CAN 学习笔记
CAN 的设计非常特别,它的 MLP 权重不是通过 BP 学习得到,而是直接由输入特征 reshape 出来的,比较trick,论文里显示阿里场景是落地的,在序列基础上还有提升。
核心思想:输入特征 P_induction → reshape → 作为另一个特征的 MLP 参数

6. PNN(Product-based Neural Network,Google)——乘积交互

PNN 是比 DeepFM、DCN 更早的参数式交叉模型,分两类:
PNN 是 最早将“乘积交互 + MLP”结合现在应该基本已经很少用了。就是的深度 CTR 结构,后续的 DeepFM、xDeepFM 等都受到其影响,但
(1) IPNN(Inner Product PNN)

显式进行 embedding 之间的内积。

(2) OPNN(Outer Product PNN)
对 embedding 做 outer-product(可参数化的)

7. CIN(Compressed Interaction Network)——xDeepFM 代表模型

详细见XdeepFM学习笔记
xDeepFM 中提出的特征交叉方式,CIN 是最典型的显式高阶交叉模型,可看作 DCN 的替代/升级,-显式高阶交互(比 DCN 更强), 复杂度比直接 outer product 小得多,在广告领域有真实落地

核心思想:
利用卷积式权重,显式构造特征间多阶 outer product 再压缩。
X k + 1 = f ( X 0 , X k , W ) X^{k+1} = f(X^0, X^k, W)Xk+1=f(X0,Xk,W)

二、样本维度的特征交叉(Sample-level Interaction)

这类模型跳出“两个特征对两个特征交叉”,
基于整个样本的所有 embedding 构造一个全局交互向量。就是而

1. MaskNet(微博)——基于 Mask 的 Sample-level Cross

详细内容见:
MaskNet 学习笔记
MaskNet 使用一条样本的所有 embedding concat 构造一个“instance-guide-mask”,然后利用 mask 对每个 embedding 做加权交互。
核心过程:

  1. embedding 全拼接:
    e = c o n c a t ( e 1 , e 2 , . . . , e n ) e = concat(e_1, e_2, ..., e_n)e=concat(e1,e2,...,en)

  2. 依据 2 层 MLP 得到 mask:

    • 第一层扩维
    • 第二层还原维度
  3. mask 与每个 embedding 逐元素乘:
    e i ′ = m a s k ⊙ e i e_i' = mask \odot e_iei=maskei

  4. 多层 mask 堆叠可形成高阶交互

总结

方法交互方式是否显式是否真实落地
FM二阶内积显式二阶⭐⭐⭐⭐⭐
DNN隐式加权组合隐式高阶⭐⭐⭐⭐⭐
DCN显式多阶 polynomial显式高阶⭐⭐⭐⭐
Bilinear Cross双线性交互 + W 矩阵显式⭐⭐⭐
CAN动态参数交互显式+动态⭐⭐
PNN内积/外积 + MLP显式⭐⭐⭐
CIN显式高阶 outer product 压缩显式⭐⭐⭐⭐
MaskNetMask × embedding 的 sample-level特征交叉显式⭐⭐